How to build equipment slots
Equipment screens are composed from multiple containers, each with SlotCount(1) and a tag filter. The core has no “equipment” concept.
Head slot accepts headgear only
Equipment slots are built by composing regular containers with constraints — there’s no special “equipment” concept in the core. For example, you can create a “head_slot” container with a hard SlotCount(1) constraint and a tag filter requiring Has(“armor.head”). When you add an “iron_helmet” (which carries the “armor.head” tag), it’s accepted and the slot contains 1 item. If you then try to add an “iron_sword”, the operation fails with a tag filter error, since the sword doesn’t match the required tag.
Holy altar rejects cursed items — cleansing allows equip
When a container uses a compound tag filter, all conditions must be satisfied for a transfer to succeed. If you set up a “holy_altar” container with a single slot and a filter requiring both the “weapon” tag and the absence of “cursed” — And(Has("weapon"), Not(Has("cursed"))) — then attempting to transfer a “cursed_axe” from your bag to the altar will fail with a tag filter error. However, tags can be modified at runtime on individual item instances. Once you remove the “cursed” tag from that axe (representing a cleansing ritual, for example), the same transfer succeeds and the altar accepts the item.
Left hand accepts weapon or shield
Equipment slots are built by composing single-slot containers with tag filters — there’s no dedicated “equipment” concept in the core. For example, you can define two left-hand containers, “left_hand_a” and “left_hand_b”, each with a hard SlotCount(1) constraint and a tag filter that accepts items tagged “weapon” or “armor.shield”. Adding an “ice_shield” to “left_hand_a” succeeds because it matches the filter, and adding an “iron_sword” to “left_hand_b” likewise succeeds. Each container holds exactly one item, and the tag filter controls which item types are valid for that slot.
Right hand accepts melee weapons only
Right hand accepts melee weapons only
To restrict an equipment slot to a specific weapon type, combine a SlotCount(1) constraint with a tag filter. For example, you can configure a “right_hand” container with a hard SlotCount(1) constraint and a Has("weapon.melee") tag filter. Adding an “iron_sword” succeeds because it matches the melee weapon tag, but attempting to add a “fire_bow” fails with a tag filter error since it doesn’t satisfy the Has("weapon.melee") requirement.
Ring finger accepts rings
When you create a container like “ring_finger” with a hard SlotCount(1) constraint and a tag filter requiring Has(“accessory.ring”), it will accept matching items — adding a “ruby_ring” succeeds and the container holds 1 item. However, attempting to add a non-matching item like an “iron_sword” fails with a tag filter error, since the sword doesn’t carry the “accessory.ring” tag. This is how equipment slots enforce what can be equipped: not through a special equipment system, but through container composition with slot limits and tag filters.
Generated from core/tests/features/equipment.feature