Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

ITEM.INI

Item database defining all collectible objects, weapons, potions, keys, and quest items with their properties, models, and scripted behaviors.

Shipped sample path: /Redguard/ITEM.INI (e.g. .../GOG Galaxy/Redguard/Redguard/ITEM.INI).

The file is data-driven: every game object from the compass to the soul sword is defined here with associated 3D models, inventory bitmaps, and AI scripts. Item 0 is always the compass, a special case. The file’s comment says giving the player this item turns on the compass display; the display actually toggles when item 0 is used (see compass). Any item index declared as 0 in a weapon or hand-object field is treated as “no object” for this reason.

File Structure

The file contains a single [items] section with two parts:

  1. A header block with global inventory settings.
  2. Per-item field blocks indexed by item ID (e.g. name[0], type[1]).

[items] Header Fields

FieldValueDescription
bitmap_fileSYSTEM\PICKUPS.GXAGXA atlas indexed by bitmap[x]; the HUD active item icon uses this atlas. pickbox.gxa and pickblob.gxa are not used by the Glide build.
bitmap_selected_fileSYSTEM\PICKUPSS.GXAGXA atlas of selected icons, indexed by the same bitmap[x]. Not used by the HUD.
start_item_list1, 2, 4, 18Item IDs the player starts the game with.
start_item_select1Item ID selected by default at game start.
additional_length8Extra inventory display length (slots).
weapon_sphere_size10Collision sphere radius for weapon hit detection.
default_weapon_item1Item ID used as the default weapon (the sabre).
torch_time60Torch burn duration in seconds (tolerance of +/- 3 seconds).

Per-Item Field Schema

All fields are optional. Missing fields are treated as unused. The index x in each field name is the item ID used in all script commands.

A field with no text after = is equivalent to an omitted field. Explicit zero remains a stored value. Item lists contain comma-separated decimal item IDs. Paths, script names, and RTX labels retain their spelling and capitalization.

General fields

FieldDescription
type[x]Item type: 0 = general item, 1 = sword/weapon (can be drawn and sheathed, has both drawn and sheathed 3D files), 2 = hand object (may override a weapon, e.g. torch).
flags[x]Bit-field of misc flags. 1 = remove on drop regardless of player total; 2 = drop item after use; 4 = remove item after use. Add values together to combine.
hide[x]When 1, the item is hidden from screen and inventory but still exists. Scripts may still call UseItem() on it; the player cannot select or use it directly.
total[x]Total number of this item in the game world.
player_max[x]Maximum number of this item the player can carry.
player_total[x]Number of this item the player starts the game with.
name[x]Short name RTX dialogue label (e.g. ?xsw).
description[x]Longer item description RTX dialogue label (e.g. cisw).

name[x] and description[x] values are keys into the RTX dialogue/text system, not literal strings. Labels beginning with ? are short display names; labels beginning with ci or ti are longer descriptions.

AI script fields

FieldDescription
use_script[x]AI script file to execute when the item is used through the shell system.
script_instances[x]Maximum concurrent instances of the use script. 1 prevents a new instance from starting if one is already running. Zero or a negative value means unlimited instances.

Using an item

UseItem(id) does nothing while the player is locked out (LockoutPlayer value

  1. or in an edge state (10 through 19), after another use attempt in the same world-loop iteration, in shell context, with the inventory closed, in deep water, while holding a weapon, or while lighting or dousing a torch. An unknown or unowned item is an error, and so is a receiver other than the selected player. Item zero toggles the compass. Weapon items (type 1) set the weapon attribute and draw the sword, and torch items (code 3) light or put out the torch. A general item starts its use_script as a shell when script_instances is zero or negative or fewer than that many shells of the script are running. It then drops one unit of each drop_use_item_list entry. When that changed the item’s own count and flag bit 2 is set, one unit of the item is dropped; flag bit 4 then empties the item.

Island map request

Using general item 83 sets a pending island-map request before the item’s use script and drop-list processing. The display handler treats this request like the map input action. It clears the request before checking admission, so a rejected request is not retained for a later update. Display requires ownership of item 83, a player lockout value other than 1, and player attribute 105 other than 1. The map screen loads SYSTEM\MAPMAP.GXA and SYSTEM\CROSS.GXA.

Objects and bitmaps

FieldDescription
bitmap[x]Frame index into the bitmap_file and bitmap_selected_file atlases; the HUD shows it for the selected item.
inventory_object_file[x]3D object file used in the inventory screen.
game_object_file[x]3D object file used in the game world.

Drop and add lists

FieldDescription
add_item_list[x]List of item IDs to add to the player when this item is picked up.
drop_add_item_list[x]List of item IDs passed to DropItem when this item is acquired; each entry requests one unit.
remove_drop_item_list[x]Owned counts recursively cleared by DropItem while the dropped item still has a nonzero count.
required_item_list[x]List of item IDs the player must already have before picking up this item.
drop_use_item_list[x]List of item IDs to drop into the world when this item is used.

Weapon fields

FieldDescription
hand_object_file[x]3D object for the item when held in hand. For weapon-type items this must be a weapon object. Ignored for general-type items.
hilt_object_file[x]3D object for the item when sheathed.

Object file paths reference 3DART\ assets, which are the software-renderer models from the original CD release. The GOG release uses fxart/ equivalents at runtime; the 3DART\ paths in this file reflect the original CD asset layout.

Initialization and acquisition

The item database path comes from SYSTEM.INI’s item_ini setting. Initialization first closes the previous item system. Each loaded item’s initial owned count is player_total[x]. The ordered start_item_list then requests acquisition of one unit per entry, including repeated entries. Starting items therefore add to the configured counts rather than replacing them.

Acquisition clamps the requested quantity to both total[x] - player_total[x] and player_max[x] - player_total[x]. A nonpositive result does nothing. For a positive result, every entry in required_item_list[x] must have a nonzero owned count and must recursively satisfy its own requirements.

After requirements pass, acquisition processes drop_add_item_list[x] in order, requesting removal of one unit from each listed item. It then processes add_item_list[x] in order, recursively requesting acquisition of one unit from each entry. These lists run once per acquisition request, independent of the quantity admitted. Active-item fallback selection runs next; the acquired item’s owned count increases last. The quantity is not recalculated after list effects.

An absent start_item_select selects the first loaded item record. A supplied value selects its matching record. This initialization selection does not filter by owned count or visibility.

Empty-selection fallback

Acquisition’s fallback does nothing while an item record is selected. With no selection, it first selects item ID 1 if that record exists, regardless of its owned count, type, or visibility. This is a literal item ID, independent of default_weapon_item.

If item 1 is absent, the fallback scans records in ascending ID order. It selects the first owned type-1 item, or the first owned item of any type if no owned weapon exists. Hidden items remain eligible. If no candidate exists, selection stays empty. Whenever the fallback selects a record, it also writes the low byte of that ID to the selected player’s weapon attribute. The check runs before the acquired item’s count increases, so a newly acquired first unit is not yet owned for that scan.

Removal during acquisition

DropItem(id, quantity) does nothing when the item system is closed or the requested quantity is nonpositive. Otherwise it subtracts at most the item’s current owned count. Flag bit 0x01 then clears that count completely.

The removal-list helper runs after this subtraction and flag handling. It traverses remove_drop_item_list[id] only if the item’s remaining count is nonzero. For each listed item, it recursively applies the same helper and then clears that listed item’s owned count. If the dropped item’s count has reached zero, its removal list is not traversed.

Script count and selection queries

HaveItem(id) returns the item’s owned count, not a Boolean. It returns zero when the item system is closed. With an open item system, an unknown ID reports an item lookup error.

SelectItem(id) selects the matching record without checking its owned count, visibility, or type. It reports an error for an unknown ID. It does not assign the selected player’s weapon attribute.

ActiveItem() takes no script arguments. It returns the selected record’s ID when the item system is open, a record is selected, and the invocation has an actor receiver. Otherwise it returns zero, which is also the compass’s item ID.

Selected-player weapon validation

Before ordinary actor traversal, the engine validates the selected player’s weapon attribute against the open item system. A closed item system or absent invocation receiver leaves weapon state unchanged. Once admitted, validation uses the selected player, even if the supplied receiver is another actor.

A valid weapon requires an animation state, execution outside the shell context, a nonzero weapon attribute, and a matching type-1 item with a positive owned count. If any of these conditions fails, the engine clears the selected player’s weapon attribute and performs the normal weapon cleanup. Item visibility and inventory selection do not affect this check. The check does not acquire or select the configured default weapon.

Item Catalog

87 items are defined (IDs 0 through 86). Item 0 is always the compass.

IDCommentType
0compass0 (general)
1sabre1 (weapon)
2gold0 (general)
3Potion of ironskin0 (general)
4health potion0 (general)
5ring of invisibility0 (general)
6Voa’s ring0 (general)
7guard sword1 (weapon)
8rusty key0 (general)
9gold Key0 (general)
10silver key0 (general)
11amulet0 (general)
12soul gem0 (general)
13soul sword1 (weapon)
14crow bar0 (general)
15rune 10 (general)
16rune 20 (general)
17rune 30 (general)
18letter0 (general)
19orc’s blood0 (general)
20orc’s blood w/stuff0 (general)
21spider’s milk0 (general)
22spider’s milk w/stuff0 (general)
23ectoplasm0 (general)
24ectoplasm w/stuff0 (general)
25hist sap0 (general)
26hist sap w/ stuff0 (general)
27book of dw lore0 (general)
28dwarven gear0 (general)
29vial0 (general)
30vial w/elixir0 (general)
31iron weight0 (general)
32bucket0 (general)
33bucket w/water0 (general)
34fist rune0 (general)
35elven book (copy) DO NOT USE0 (general)
36elven book0 (general)
37redguard book0 (general)
38flora of hammerfell book0 (general)
39reference map0 (general)
40pouch0 (general)
41trithick’s map piece0 (general)
42silver ship0 (general)
43shovel0 (general)
44aloe0 (general)
45torch3 (hand object)
46monocle0 (general)
47red flag0 (general)
48silver locket that talks of lakene0 (general)
49redguard insignia0 (general)
50joto’s piece0 (general)
51flask of lillandril0 (general)
52talisman of hunding0 (general)
53izara’s journal open0 (general)
54canah feather0 (general)
55kithral’s journal0 (general)
56starsign’s book0 (general)
57izara’s journal closed0 (general)
58starstone0 (general)
59krisandra’s key0 (general)
60key to iszara’s lodge0 (general)
61necro book - view only0 (general)
62bar mug ..for thugs hands, etc0 (general)
63mariah’s watering can0 (general)
64glass bottle0 (general)
65glass bottle with water0 (general)
66glass bottle w/aloe and water0 (general)
67Strength Potion0 (general)
68bandage0 (general)
69bloody bandage0 (general)
70skeleton sword1 (weapon)
71keep out poster…mage’s guild0 (general)
72keep out poster…dwarven ruins0 (general)
73tobias mar mug0 (general)
74Bone Key0 (general)
75flaming sabre1 (weapon)
76goblin sword1 (weapon)
77ogre’s axe1 (weapon)
78dram’s sword1 (weapon)
79palace key0 (general)
80dram’s bow0 (general)
81dram’s arrow0 (general)
82silver locket that just says silver locker0 (general)
83island map0 (general)
84wanted poster0 (general)
85palace diagram0 (general)
86last0 (general)

Notes on specific entries:

  • Items 19/20, 21/22, 23/24, 25/26 are paired: the base ingredient and the same ingredient already combined with another substance. Both variants share the same name[x] label.
  • Items 29/30 are the empty vial and the vial filled with elixir.
  • Items 32/33 are the empty bucket and the bucket filled with water.
  • Items 53/57 are the open and closed versions of Izara’s journal, sharing the same name[x] label.
  • Item 35 is marked “DO NOT USE” in the file comment; item 36 is the live elven book.
  • Item 45 (torch) uses type 3, which the file’s comment block does not define.
  • Items 62 and 63 (bar mug, watering can) reuse the journal inventory model (Ijourn.3D) as a placeholder, with distinct game_object_file paths for the actual in-world mesh.
  • Items 80 and 81 (dram’s bow and arrow) reuse the bone key inventory model (ibone.3d) as a placeholder.
  • Item 86 is labeled “last” with no meaningful content, serving as a sentinel or end-of-list marker.

External References

  • UESP: Redguard:Console — documents the item add command, which uses item IDs matching the index numbers in this file.