ITM file format
Applies to:
PST
General Description
This file format describes an "item". Items include weapons, armor, books, scrolls, rings and more. Items can have attached abilties, occuring either when a target creature it hit, or when the item is equipped. ITM files have a similar structure to SPL files.
Header: Size = 114 Bytes | Ext. Header: Size = 56 Bytes | Feature Block: Size = 48 Bytes |
Detailed Description
ITM files consist of a main header, zero or more extended headers (each containing zero or more feature blocks) and zero or more casting feature blocks. All the feature blocks are stored as a continuous data segment, with each extended header containing an offset into this data, and the main header containing an offset into this data for the casting feature blocks.
Overall structure:
Overall structure:
Offset | Size (datatype) | Description |
---|---|---|
0x0000 | 4 (char array) | Signature ('ITM ') |
0x0004 | 4 (char array) | Version ('V1.1') |
0x0008 | 4 (strref) | Unidentified Name (strref) |
0x000c | 4 (strref) | Identified Name (strref) |
0x0010 | 8 (resref) | Drop sound - played when the item is dropped in the inventory (WAV) |
0x0018 | 4 (dword) | Flags |
0x001c | 2 (word) | Item type |
0x001e | 1*4 (byte) | Usability bitmask |
0x0022 | 2 (char array) | Weapon animation (Nameless character only)
|
0x0024 | 2 (word) | Min Level |
0x0026 | 2 (word) | Unused |
0x0028 | 2 (word) | Unused |
0x002a | 2 (word) | Unused |
0x002c | 2 (word) | Unused |
0x002e | 2 (word) | Unused |
0x0030 | 2 (word) | Unused |
0x0032 | 2 (word) | Unused |
0x0034 | 4 (dword) | Price |
0x0038 | 2 (word) | Stack amount |
0x003a | 8 (resref) | Inventory icon (BAM) |
0x0042 | 2 (word) | Lore to ID |
0x0044 | 8 (resref) | Ground icon (BAM) |
0x004c | 4 (dword) | Weight |
0x0050 | 4 (strref) | Unidentified Description (strref) |
0x0054 | 4 (strref) | Identified Description (strref) |
0x0058 | 8 (resref) | Pickup sound - played when the item is picked up in the inventory (WAV) |
0x0060 | 4 (dword) | Enchantment |
0x0064 | 4 (dword) | Offset to extended headers |
0x0068 | 2 (word) | Count of extended headers |
0x006a | 4 (dword) | Offset to feature blocks |
0x006e | 2 (word) | Index into equipping feature blocks |
0x0070 | 2 (word) | Count of equipping feature blocks |
0x0072 | 8 (resref) | Dialog (DLG) |
0x007a | 4 (strref) | Conversable label (strref) |
0x007e | 2 (word) | Paperdoll animation colour |
0x0080 | 2 (word) | Unknown |
0x0082 | 4 (dword) | Unknown |
0x0086 | 4 (dword) | Unknown |
0x008a | 4 (dword) | Unknown |
0x008e | 4 (dword) | Unknown |
0x0092 | 4 (dword) | Unknown |
0x0096 | 4 (dword) | Unknown |
Items can have several "abilities" that correspond to an action the item can do (e.g. melee attacks, projectile attacks, spell-casting etc.). Each of these abilities is specified through an extended header. Only the first three extended headers can have charges (extended headers further than this use the charges of the first extended header). Tooltips for item abilities are set through tooltips.2da.
NB. For items to be stackable, they must contain at least one extension header, even if it is empty.
NB. For an attack type of projectile, if the projectile type is set to 1,2 or 3, the weapon will use the attack speed of the ammunition.
NB. For items to be stackable, they must contain at least one extension header, even if it is empty.
NB. For an attack type of projectile, if the projectile type is set to 1,2 or 3, the weapon will use the attack speed of the ammunition.
Offset | Size (datatype) | Description |
---|---|---|
0x0000 | 1 (char) | Attack type
|
0x0001 | 1 (char) | ID Req.
|
0x0002 | 1 (char) | Location
|
0x0003 | 1 (char) | Alternative dice sides |
0x0004 | 8 (resref) | Use icon |
0x000c | 1 (char) | Target type
|
0x000d | 1 (char) | Target count |
0x000e | 2 (word) | Range |
0x0010 | 1 (byte) | Projectile type
|
0x0011 | 1 (byte) | Alternative dice thrown |
0x0012 | 1 (byte) | Speed |
0x0013 | 1 (byte) | Alternative damage bonus |
0x0014 | 2 (word) | THAC0 bonus |
0x0016 | 1 (byte) | Dice sides |
0x0017 | 1 (byte) | Primary type |
0x0018 | 1 (byte) | Dice thrown |
0x0019 | 1 (byte) | Secondary type |
0x001a | 2 (word) | Damage bonus |
0x001c | 2 (word) | Damage type
|
0x001e | 2 (word) | Count of feature blocks |
0x0020 | 2 (word) | Index into feature blocks |
0x0022 | 2 (word) | Charges |
0x0024 | 2 (word) | Charge depletion behaviour
|
0x0026 | 4 (dword) | Flags |
0x002a | 2 (word) | Projectile animation (projectl.ids/missile.ids) |
0x002c | 2*3 (word) | Melee animation |
0x0032 | 2 (word) | Unused |
0x0034 | 2 (word) | Unused |
0x0036 | 2 (word) | Unused |
Any action carried out by an item is done by feature blocks, each of which holds an effect number as well as targetting and timing information. The engine appears to roll a probability for each valid target type, rather than one probability per attack.
Offset | Size (datatype) | Description |
---|---|---|
0x0000 | 2 (word) | Opcode number |
0x0002 | 1 (char) | Target type
|
0x0003 | 1 (char) | Power |
0x0004 | 4 (dword) | Parameter 1 |
0x0008 | 4 (dword) | Parameter 2 |
0x000c | 1 (char) | Timing mode
|
0x000d | 1 (char) | Resistance The default behaviour is that effects cannot be dispelled and ignore resistance.
This can also be presented in the more traditional way:
|
0x000e | 4 (dword) | Duration |
0x0012 | 1 (char) | Probability 1 |
0x0013 | 1 (char) | Probability 2 Note: The BG1 engine treats probability as a single word, effects are applied in the range 0-probability. Note: Other engines treat probability as two values, effects are applied in the range probability <= x <= probability. Probability range is 0-99 |
0x0014 | 8 (resref) | Resource |
0x001c | 4 (dword) | Dice Thrown |
0x0020 | 4 (dword) | Dice Sides |
0x0024 | 4 (dword) | Saving throw type
|
0x0028 | 4 (dword) | Saving throw bonus |
0x002c | 4 (dword) | Special |
Header Flags
Bit | Byte 1 | Byte 2 | Byte 3 | Byte 4 |
---|---|---|---|---|
0 | Unsellable (critical item) | Silver | Unused | Unused |
1 | Two-handed | Cold-Iron | Unused | Unused |
2 | Movable | Steel | Unused | Unused |
3 | Displayable | Conversable | Unused | Unused |
4 | Cursed | Pulsating | Unused | Unused |
5 | Cannot scribe to spellbook (scrolls) | Unused | Unused | Unused |
6 | Magical | Unused | Unused | Unused |
7 | Unused | Unused | Unused | Unused |
Header Item Type
The item type of an item affects the pick-up/put-down sound when moving the item in the inventory, whether stores will buy the item and the ability buttons shown on the item description screen.
Code | Item type |
---|---|
0x0000 | Books/misc |
0x0001 | Amulets and necklaces |
0x0002 | Armor |
0x0003 | Belts and girdles |
0x0004 | Boots |
0x0005 | Arrows |
0x0006 | Bracers and gauntlets |
0x0007 | Helms, hats, and other head-wear |
0x0008 | Keys (not in Icewind Dale?) |
0x0009 | Potions |
0x000a | Rings |
0x000b | Scrolls |
0x000c | Shields (not in IWD) |
0x000d | Food |
0x000e | Bullets (for a sling) |
0x000f | Bows |
0x0010 | Daggers |
0x0011 | Maces (in BG, this includes clubs) |
0x0012 | Slings |
0x0013 | Small swords |
0x0014 | Large swords (in BG, this includes 2-handed and bastard swords) |
0x0015 | Hammers |
0x0016 | Morning stars |
0x0017 | Flails |
0x0018 | Darts |
0x0019 | Axes (specifically, 1-handed axes -- halberds and 2-handed polearms not included) |
0x001a | Quarterstaff |
0x001b | Crossbow |
0x001c | Hand-to-hand weapons (fist, fist irons, punch daggers, etc) |
0x001d | Spears |
0x001e | Halberds (2-handed polearms) |
0x001f | Crossbow bolts |
0x0020 | Cloaks and robes |
0x0021 | Gold pieces (not an inventory item, but can appear as "monster dropped" treasure) |
0x0022 | Gems |
0x0023 | Wands |
0x0024 | Containers/eye/broken armor |
0x0025 | Broken shields/bracelets |
0x0026 | Broken swords/earrings |
0x0027 | Tattoos (PST) |
0x0028 | Lenses (PST) |
0x0029 | Bucklers/teeth |
0x002a | Candles |
0x002b | Unknown |
0x002c | Clubs (IWD) |
0x002d | Unknown |
0x002e | Unknown |
0x002f | Large Shields (IWD) |
0x0030 | Unknown |
0x0031 | Medium Shields (IWD) |
0x0032 | Notes |
0x0033 | Unknown |
0x0034 | Unknown |
0x0035 | Small Shields (IWD) |
0x0036 | Unknown |
0x0037 | Telescopes (IWD) |
0x0038 | Drinks (IWD) |
0x0039 | Great Swords (IWD) |
0x003a | Container |
0x003b | Fur/pelt |
0x003c | Leather Armor |
0x003d | Studded Leather Armor |
0x003e | Chain Mail |
0x003f | Splint Mail |
0x0040 | Half Plate |
0x0041 | Full Plate |
0x0042 | Hide Armor |
0x0043 | Robe |
0x0044 | Unknown |
0x0045 | Bastard Sword |
0x0046 | Scarf |
0x0047 | Food (IWD2) |
0x0048 | Hat |
0x0049 | Gauntlet |
Header Usability
Bit | Byte 1 | Byte 2 | Byte 3 | Byte 4 |
---|---|---|---|---|
0 | Unusable by Chaotic | Unusable by Godsmen | Unusable by Indeps | Unusable by Ignus |
1 | Unusable by Evil | Unusable by Anarchist | Unusable by Fighter Thief | Unusable by Morte |
2 | Unusable by Good | Unusable by Chaosmen | Unusable by Mage | Unusable by Nordom |
3 | Unusable by Good-Evil Neutral | Unusable by Fighter | Unusable by Mage Thief | Unknown |
4 | Unusable by Lawful | No Faction | Unusable by Dak'kon | Unusable by Annah |
5 | Unusable by Lawful-Chaotic Neutral | Unusable by Fighter Mage | Unusable by Fall-From-Grace | Unknown |
6 | Unusable by Sensates | Unusable by Dustmen | Unusable by Thief | Unusable by Nameless One |
7 | Unusable by Priest | Unusable by Mercykillers | Unusable by Vhailor | Unknown |
Extension Header Flags
Bit | Byte 1 | Byte 2 |
---|---|---|
0 | Add strength bonus | Unknown |
1 | Breakable | Unknown |
2 | Unknown | Hostile |
3 | Unknown | Recharges |
4 | Unknown | Unknown |
5 | Unknown | Unknown |
6 | Unknown | Unknown |
7 | Unknown | Unknown |