About
The custom item descriptor (ITEMS.ITM) is a plain text file with INI format structure, which can be opened by any text editor and edited directly. It allows to create a whole new item or replace existing and fine tune it. This manual intends to help create your own items or modify already existing. It contains detailed description of each parameter and in the File example chapter you will find a file that is ready for use.
Changelog
-
MAY 17 2026
- New action parameter "CheckRange" has been added.
- New action parameter "ClipToAmount" has been added.
- New topic "Extra action parameters" has been added.
- New item example "Life Essence" has been added.
-
FEB 02 2025
-
Fixed incorrect max amount limit comparison for ammo
with "ExtLimits" item flag enabled.
- Added all game items file example.
- New action "TeamScore" has been added.
- New action "Frag" has been added.
Table of contents
How to start
MAY 17 2026
- New action parameter "CheckRange" has been added.
- New action parameter "ClipToAmount" has been added.
- New topic "Extra action parameters" has been added.
- New item example "Life Essence" has been added.
FEB 02 2025
- Fixed incorrect max amount limit comparison for ammo with "ExtLimits" item flag enabled.
- Added all game items file example.
- New action "TeamScore" has been added.
- New action "Frag" has been added.
Table of contents
Basically, all you need to do is to create a text file in your current mod directory and rename it to "ITEMS.ITM".
Notes
- To insert custom item sprites in maps is recommended to use XMAPEDIT. Latest version already have a special button called "User items" that available in the "Game Objects" menu via [ALT+S] in 3D or [SHIFT+S] in 2D edit modes.
- If you playing Blood in multiplayer, all players must have identical ITEMS.ITM file to avoid desync. If some of players sees "OUT OF SYNC" message once picked up an item, it usually means that something wrong with that file.
Output
The parser doesn't show any modal error messages, however it outputs messages in the console, which is available via pressing the "~" (tilde) key. Start any map or load a save, open the console and look for recent messages that prefixed with "ITEM SETUP" characters to get detailed information. Alternatively, you can open a log file to read such messages.
Global file syntax rules
Every single file must contain special section that defines it's syntax version or file will be ignored. I recommend to put it on top of the file.
[General] Version = 1 |
Other rules
- No quotes anywhere.
- Max characters per line limited by 256.
- Lines that starts from ";" or "#" characters are comments and ignored by parser.
- All numeric values must be present in decimal format.
- There is no floating point values supported.
- Any letter case is fine.
Supported value types
Before making first descriptor, you must learn the value types the file is working with. Always make sure you write it properly.
Basic value types and keywords
| Value type | Description | Syntax example |
|---|---|---|
| FIXED | Any numeric value (positive or negative) | 100, -100, 300, -300 |
| UFIXED | Any numeric value (positive only) | 100, 110, 200, 300 |
| BOOLEAN | The boolean value only can be 0 (false) or 1 (true) | 1, true, yes, 0, false, no |
| KEYWORD | A special word that is required for parameter. | Health, Armor |
| STRING | Just some text. | My string |
| COMMON ARRAY | A string that starts with "(" character and ends with ")".It may contain any elements amount of any value types. If there is supposed to be more than 1 element, the values must be separated by "," character. | (110%, Type, Respawn, 300, true) |
| ASSOCIATIVE ARRAY | A string that starts with "(" character and ends with ")".It may contain any elements amount of any value types. Each element represents a key and value pair that must be separated by "=" character. If there is supposed to be more than 1 element, they must be separated by "," character. | (Tile = 160, Sound = Any, Seq = 110) |
Appearance
Represents associative array with dynamic length. Contains a specific key/value pairs. Allows to override default appearance of objects such as sprites. Write order doesn't matter.
| Parameter | Description | Req | Value type | Default | Examples |
|---|---|---|---|---|---|
| Tile | A tile number to set. | No | Ufixed (0 - 32767) | 0 | Tile = 2428 |
| Shade | A shade level. | No | Fixed (-128 - 127) | -8 | Shade = -32 |
| Pal | A palette (palookup) ID to set. | No | UFixed (0 - 255) | 0 | Pal = 5 |
| Size | X and/or Y repeat values to set. | No |
|
64 |
|
| Sound | Allows to override original pickup sound. If not defined, the default item group sound will be set. 0 means no sound. | No | UFIXED (0 - 65535) | item group | Sound = 777 |
| Seq |
Specify a custom SEQ animation ID. 0 means no custom SEQ. Note1: Make sure the animation has no "Delete" flag enabled or item may disappear from the game world. Just imagine you removed a key! Note2: Overrides Tile, Shade, Size and Pal properties! |
No | UFIXED (0 - 65535) | 0 | Seq = 1 |
Syntax example:
(Tile=10, Shade=-32, Sound = 777) // set appearance |
Sections and parameters
All sections, except [General] that described in Global file syntax rules topic treated as a start of actual item definition and in-game name. Names must be unique, however, sometimes you may want to have different types with same item name. If that is case, please add "_" character which serving as separator and enter some text just after it.
Example:
[Spray Can] // displaying item name is "Spray Can" Type = (Weapon, 48) // type 48 ..... [Spray Can_AMMO] // displaying item name remains "Spray Can" Type = (Ammo, 60) // type 60 ..... |
Each section may contain several parameters that describes item behavior. Most of them are optional, however they designed to make item to do something useful apart from being just picked up.
Basic parameters
| Parameter | Description | Req | Value type | Default | Examples |
|---|---|---|---|---|---|
| Type |
The very first and the only required basic parameter at this moment. Defining item group explicitly strongly recommended as it allows to use default templates for some game options such as respawn or playing correct pickup sound when is not defined. When you want to add a new item, enter any free type (range of 160 and 200 recommended), however, if you want to replace specific game item with this one, enter it's type in a range of 40 and 200. Certain game item types cannot be replaced to avoid incorrect behavior in multiplayer. These types are: 145, 146, 147, 148. |
Yes |
|
--- |
|
| Caption | XMAPEDIT shows it as caption in 2D edit mode. | No | String | section name |
Caption = My item |
| Appearance |
Defines sprite appearance in the game world. Refer to Appearance value type description to get detailed information. |
No | APPEARANCE | auto |
Appearance = (Tile = 15, Size = 40, Sound=776) |
| Flags | Various item flags. For example, you can allow to use larger limits, make item show no message and/or no effect on pickup etc... | No |
COMMON ARRAY of keywords:
|
none |
Flags = (NoEffect, NoMessage) |
| Message | Allows to override default "Picked up" message. | No | String | game |
Message = Got fire armor // shows "Got fire armor" Message = You got %s item // shows "You got %NAME% item" |
| GameMode |
Select game modes at which item can be picked up. All game modes allowed by default. |
No |
COMMON ARRAY of keywords:
|
any |
GameMode = (S, T, B) |
| RespawnTime | Item respawn time in seconds. 0 means use item group respawn time. | No | UFIXED (0 - 255) | item group time |
RespawnTime = 3 |
| DropLiveTime | Time in seconds for items that was dropped from another sprite. Defines a delay before it will be removed. 0 means infinite time. | No | UFIXED (0 - 255) | infinity |
DropLiveTime = 10 |
Action parameters or "Actions"
Actions are most interesting part which makes item useful. They allows to change player health or armor, give or remove weapons, set screen effects and much more. Each item supports up to 256 actions that can be combined (for example add 100 health and 50 armor) and/or duplicated. Item can be picked up when at least one action successful, when all actions that marked as required successful, or it have no actions at all. In case when item have any required actions, they must be successful for all other actions to be completed.
Each action key name consist of 2 parts: prefix that defines it's operation and name that defines action type. The value of key represents associative array with dynamic length containing a specific key/value pairs which can be written in random order. Most of them are pretty same for each action.
Operations
| Add | Adds amount of units to current. |
| Sub | Substracts amount of units from current. |
| Set | Sets amount of units as current. |
Action types
Health Action
Allows to change player's health amount. Cannot be reduced when player is immortal.
| Entry | Description | Req | Value type | Default | Examples |
|---|---|---|---|---|---|
| Amount | Amount in health units. | Yes | UFIXED | 1 | Amount = 10 |
| MinAmount |
Current value must be greater for successful action. Limited to default value. |
No | UFIXED | 0 | MinAmount = 1 |
| MaxAmount |
Current value must be less for successful action. Limited to default value. |
No | UFIXED |
game: auto extended: 999 |
MaxAmount = 50 |
Examples:
SetHealth = (Amount=90, MinAmount=50, MaxAmount=100) |
// set health to 90 units when >= 5 AND <= 100 |
SubHealth = (Amount=5, MinAmount=50) |
// substract 5 units when > 50 |
AddHealth = (Amount=10, MaxAmount=100) |
// add 10 units when < 100 |
Armor Action
Allows to change player's armor amount.
| Entry | Description | Req | Value type | Default | Examples |
|---|---|---|---|---|---|
| Amount | Amount in armor units. | Yes | UFIXED | 1 | Amount = 10 |
| MinAmount |
Current value must be greater for successful action. Limited to default value. |
No | UFIXED | 0 | MinAmount = 1 |
| MaxAmount |
Current value must be less for successful action. Limited to default value. |
No | UFIXED |
game: auto extended: 250 |
MaxAmount = 50 |
| Slot | Armor ID. Armor slots list contains possible IDs. | YES | UFIXED (1 - 3) | --- | Slot = 1 // body armor |
| Compatible | Simulate or not vanilla bug that makes possible to pickup armor items when current slot amount <= 100 and other slots amount < 100. | No | BOOLEAN | no | Compatible = False |
Examples:
SetArmor = (Amount=100, MinAmount=50, MaxAmount=200, Slot=3) |
// set spirit armor to 100 units when >= 5 AND <= 200 |
SubArmor = (Amount=5, MinAmount=50, Slot=1) |
// substract 5 units from body armor when > 50 |
AddArmor = (Amount=10, MaxAmount=100, Slot=2) |
// add 10 units to fire armor when < 100 |
Ammo Action
Allows to change player's weapon ammo amount. Cannot be reduced if have infinite ammo.
| Entry | Description | Req | Value type | Default | Examples |
|---|---|---|---|---|---|
| Amount | Amount. | Yes | UFIXED | 1 | Amount = 35 |
| MinAmount |
Current value must be greater for successful action. Limited to default value. |
No | UFIXED | 0 | MinAmount = 0 |
| MaxAmount |
Current value must be less for successful action. Limited to default value. |
No | UFIXED |
game: auto extended: 999 |
MaxAmount = 50 |
| Slot | Weapon ID. Weapon slots list contains possible IDs description. | YES | UFIXED (2 - 12) | --- | Slot = 2 // flare pistol |
Examples:
AddAmmo = (Amount=10, MaxAmount=100, Slot=3) |
// add 10 ammo for sawed-off when < 100 |
SubAmmo = (Amount=5, MinAmount=50, Slot=9) |
// substract 5 ammo from life leech when > 50 |
SetAmmo = (Amount=20, MinAmount=0, MaxAmount=100, Slot=2) |
// set ammo for flare pistol to 20 when >= 0 AND <= 100 |
Weapon Action
Allows to give or remove player's weapons. Keep in mind that even if you give a weapon, but it has no ammo - player won't be able to select it. You have to create another action that will add some ammo for it! In multiplayer modes with permanent weapons option enabled item cannot be picked up if player already have weapon, despite item may contain another actions.
| Entry | Description | Req | Value type | Default | Examples |
|---|---|---|---|---|---|
| Amount | Is player have a weapon? | Yes | UFIXED (0 or 1) | 1 | Amount = 1 |
| Slot | Weapon ID. Weapon slots list contains possible IDs description. | YES | UFIXED (2 - 12) | --- | Slot = 2 // napalm launcher |
Examples:
AddWeapon = (Amount=1, Slot=3) |
// give sawed-off |
SubWeapon = (Amount=1, Slot=9) |
// take away life leech |
SetWeapon = (Amount=0, Slot=2) |
// take away flare pistol |
PowerTime Action
Allows to change various powerups time. The powerup will toggle it's state automatically according current time amount.
| Entry | Description | Req | Value type | Default | Examples |
|---|---|---|---|---|---|
| Amount | Amount in seconds. | Yes | UFIXED | 1 | Amount = 35 |
| MinAmount |
Current value must be greater for successful action. Limited to default value. |
No | UFIXED | 0 | MinAmount = 0 |
| MaxAmount |
Current value must be less for successful action. Limited to default value. |
No | UFIXED |
game: auto extended: 999 |
MaxAmount = 50 |
| Slot | Powerup ID. Powerup slots list contains possible IDs description. | YES | UFIXED (1 - 51) | --- | Slot = 25 // reflective shots |
| Compatible | Simulate game behavior when it's possible to pickup powerup item, but it's current duration won't be changed if already non-zero. | No | BOOLEAN | false | Compatible = False |
Examples:
AddPowerTime = (Amount=10, MaxAmount=35, Slot=15) |
// add 10 seconds for ivulnerability when < 35 |
SubPowerTime = (Amount=5, MinAmount=50, Slot=15) |
// substract 5 seconds from ivulnerability when > 50 |
SetPowerTime = (Amount=20, MinAmount=0, MaxAmount=100, Slot=15) |
// set ivulnerability timer to 20 seconds when >= 0 AND <= 100 |
Inventory Action
Allows to change player's inventory item amount.
| Entry | Description | Req | Value type | Default | Examples |
|---|---|---|---|---|---|
| Amount | Amount in percent. | Yes | UFIXED | 1 | Amount = 100 |
| MinAmount |
Current value must be greater for successful action. Limited to default value. |
No | UFIXED | 0 | MinAmount = 0 |
| MaxAmount |
Current value must be less for successful action. Limited to default value. |
No | UFIXED |
game: auto extended: 999 |
MaxAmount = 50 |
| Slot | Inventory item ID. Inventory slots list contains possible IDs description. | YES | UFIXED (1 - 5) | --- | Slot = 1 // doctor's bag |
Examples:
AddInventory = (Amount=10, MaxAmount=100, Slot=1) |
// add 10% for doctor's bag when < 100 |
SubInventory = (Amount=20, MinAmount=50, Slot=1) |
// substract 20% from doctor's bag when > 50 |
SetPowerTime = (Amount=80, Slot=1) |
// set doctor's bag amount to 80% |
Key Action
Allows to give or erase keys of player. Keep in mind that Key 7 never shows in player HUD.
| Entry | Description | Req | Value type | Default | Examples |
|---|---|---|---|---|---|
| Amount | Is player have a key? | Yes | UFIXED (0 or 1) | 1 | Amount = 1 |
| Slot | Key ID. Key slots list contains possible IDs description. | YES | UFIXED (1 - 7) | --- | Slot = 2 // eye key |
Examples:
AddKey = (Amount=1, Slot=1) |
// give skull key |
SubKey = (Amount=1, Slot=2) |
// erase eye key |
SetKey = (Amount=1, Slot=2) |
// give eye key |
ScreenEffect Action
Allows to set various player screen effects such as pain, delirium, pickup etc. The effects you define with this action replaces default pickup effect. When there is other actions of different type, the effects will play only if at least one of them is completed.
| Entry | Description | Req | Value type | Default | Examples |
|---|---|---|---|---|---|
| Amount |
Amount units depends on effect ID, so you have to experiment. |
Yes | FIXED | 1 | Amount = 35 |
| MinAmount |
Current value must be greater for successful action. Limited to default value. |
No | FIXED | --- | MinAmount = -128 |
| MaxAmount |
Current value must be less for successful action. Limited to default value. |
No | FIXED | --- | MaxAmount = 3600 |
| Slot | Effect ID. See Effect slots list with IDs description. | YES | UFIXED (1 - 8) | --- | Slot = 1 // pickup effect |
Examples:
AddScreenEffect = (Amount=10, MaxAmount=35, Slot=6) |
// add 10 units for earthquake effect when < 35 |
SubScreenEffect = (Amount=5, MinAmount=50, Slot=1) |
// substract 5 units from pickup effect when > 50 |
SetScreenEffect = (Amount=100, Slot=2) |
// set pain effect to 100 |
AirTime Action
Allows to change player's underwater timer. The greater value, the longer time player can be underwater. Note that using it for items that is not underwater normally makes no sense.
| Entry | Description | Req | Value type | Default | Examples |
|---|---|---|---|---|---|
| Amount | Amount in seconds. | Yes | UFIXED (0 - 999) | 1 | Amount = 10 |
| MinAmount |
Current value must be greater for successful action. Limited to default value. |
No | UFIXED (0 - 999) | 0 | MinAmount = 5 |
| MaxAmount |
Current value must be less for successful action. Limited to default value. |
No | UFIXED (0 - 999) | 999 | MaxAmount = 100 |
Examples:
AddAirTime = (Amount=3) |
// add 3 seconds for underwater timer |
SubAirTime = (Amount=5) |
// substract 5 seconds from underwater timer |
SetAirTime = (Amount=120) |
// set underwater timer to 120 seconds |
IgnoreDamage Action
Allows to change player's permanent damage type vulnerability.
| Entry | Description | Req | Value type | Default | Examples |
|---|---|---|---|---|---|
| Amount | Is player immune to damage type? | Yes | UFIXED (0 or 1) | 1 | Amount = 1 |
| Slot | Damage type ID. See Damage types list with IDs description. | YES | UFIXED (1 - 7) | --- | Slot = 2 // bullet damage |
Examples:
AddIgnoreDamage = (Amount=1, Slot=1) |
// make player ignore falling damage |
SubIgnoreDamage = (Amount=1, Slot=1) |
// make player receive falling damage |
TeamScore Action
For "Teams" multiplayer mode only. Allows to change player's team score.
| Entry | Description | Req | Value type | Default | Examples |
|---|---|---|---|---|---|
| Amount | Amount. | Yes | FIXED | 1 | Amount = 10 |
| MinAmount |
Current value must be greater for successful action. Limited to default value. |
No | FIXED | --- | MinAmount = 0 |
| MaxAmount |
Current value must be less for successful action. Limited to default value. |
No | FIXED | --- | MaxAmount = 100 |
Examples:
AddTeamScore = (Amount=15) |
// add 15 scores to the player's team |
SubTeamScore = (Amount=15) |
// substract 15 scores from the player's team |
Frag Action
Allows to change player's frag amount. Doesn't work in "Cooperative" multiplayer mode.
| Entry | Description | Req | Value type | Default | Examples |
|---|---|---|---|---|---|
| Amount | Amount. | Yes | FIXED | 1 | Amount = 10 |
| MinAmount |
Current value must be greater for successful action. Limited to default value. |
No | FIXED | --- | MinAmount = 0 |
| MaxAmount |
Current value must be less for successful action. Limited to default value. |
No | FIXED | --- | MaxAmount = 100 |
Examples:
AddFrag = (Amount=5) |
// add 5 frags to the player |
SubFrag = (Amount=15) |
// substract 5 frags from the player |
Extra global action parameters
| Entry | Description | Req | Value type | Default | Examples |
|---|---|---|---|---|---|
| CheckRange | Always check if value in a range of min and max amount. If value is out of range, the item cannot be picked up. By default it checks only for "Set" operation. | No | BOOLEAN | no | CheckRange = Yes |
| ClipToAmount | Always clip final value to the min or max amount (to the game limits otherwise). | No | BOOLEAN | yes | ClipToAmount = No |
| Required | Action must be successful or item cannot be picked up. | No | BOOLEAN | no | Required = Yes |
File example
Below is a brief example with few new items. You may also download a larger example file which replicates all the original game items.
Slots lists
Armor slots
| 1 - Body armor |
| 2 - Fire armor |
| 3 - Spirit armor |
Powerup slots
These are most interesting:
| 13 - Feather fall | 20 - Gas mask | 30 - Grow shroom (modern) |
| 14 - Limited invisibility | 22 - Crystal ball | 31 - Shrink shroom (modern) |
| 15 - Invulnerability | 24 - Doppelganger | 32 - Death mask |
| 16 - Jump boots | 25 - Reflective shots | 40 - Asbestos armor |
| 18 - Guns akimbo | 26 - Beast vision | 51 - Level map (modern) |
| 19 - Diving suit | 29 - Delirium shroom |
Inventory slots
| 1 - Doctor's bag | 4 - Beast vision | |
| 2 - Diving suit | 5 - Jump boots | |
| 3 - Crystal ball |
Weapon slots
| 2 - Flare pistol | 6 - Bundle of TNT | 10 - Voodoo doll |
| 3 - Sawed-off | 7 - Spray can | 11 - Proximity detonator |
| 4 - Tommy gun | 8 - Tesla gun | 12 - Remote detonator |
| 5 - Napalm launcher | 9 - Life leech |
Key item slots
| 1 - Skull key | 4 - Dagger key | 7 - Key 7 |
| 2 - Eye key | 5 - Spider key | |
| 3 - Fire key | 6 - Moon key |
Effect slots
| 1 - Pickup | 4 - Blindness | 7 - Brightness |
| 2 - Pain | 5 - Tilting | 8 - Delirium |
| 3 - Choke (underwater only) | 6 - Earthquake |
Damage type slots
| 1 - Falling | 4 - Explode | 7 - Electric |
| 2 - Burning | 5 - Choke | |
| 3 - Bullet | 6 - Spirit |