Table of Contents
Crossfire Archetype & Treasure System: Developer Handbook
This handbook covers how the archetype and treasure systems work in Crossfire,
using the arch repository (crossfire-crossfire-arch) and server source
(crossfire-crossfire-server) as reference.
—
1. Asset Overview
All game assets live in the arch git repository. At startup, the server
loads them directly from disk, or from packed consolidated files generated by
crossfire-server -pack-assets.
| File extension | Packs into | Asset type |
|---|---|---|
*.arc | crossfire.arc | Archetype definitions |
*.trs | crossfire.trs | Treasure list definitions |
*.face | crossfire.face | Face and animation definitions |
*.png (named correctly) | crossfire.tar | Images displayed by the client |
image_info | image_info | Faceset definitions |
*.artifact / artifact | artifact | Artifact variations |
*.formulae / formulae | formulae | Crafting recipes |
*.quests | crossfire.quests | Quest definitions |
The arch directory is organised by category (monster/, weapon/,
armour/, door/, floor/, player/, etc.). A single category
folder typically contains matching .arc, .face, and .png files
for each object it defines.
—
2. PNG Image Files
2.1 Naming convention
Every image file follows a strict naming pattern:
<objectname>.<faceset>.<frame>.png
| Part | Meaning | Example |
|---|---|---|
objectname | Base name shared with the .face and .arc | pixie |
faceset | Image set identifier (base = default, clsc = classic) | base |
frame | Three-digit frame code (see below) | 111 |
Frame codes use three hexadecimal digits:
XYZ │││ ││└─ frame index within the facing (1-based) │└── facing direction (1=default/south, 3=north, 5=west, 7=east) └─── always 1 for normal objects; used by multi-tile heads/parts
Examples:
pixie.base.111.png— pixie, base set, facing south, frame 1sphinx.base.x71.png— sphinx, base set, facing east, frame 1 (xprefix means extended tile)viking.base.131.png— viking, base set, facing north, frame 1
2.2 Facesets
Currently two shipped facesets, defined in arch/image_info:
| Extension | Long name | Notes |
|---|---|---|
base | standard | Default 32×32 image set; every image must exist here |
clsc | classic | Alternate art; falls back to base if image is missing |
When a clsc image is absent the client silently uses the base
equivalent. You can create a clsc variant by adding a file with the same
name but .clsc. instead of .base..
—
3. Face Files (.face)
A .face file defines the client-visible face names and any animations that
belong to the same object group. The server reads these to know which images
to send to clients.
3.1 Simple face entry
face wooddoor_2.111 magicmap brown end
| Field | Meaning |
|---|---|
face <name> | Declares a face identifier. The name must match a PNG file (minus faceset and .png). |
magicmap <colour> | Colour used on the magic-map overview. |
end | Closes the face block. |
3.2 Animation block
Animations are also stored in .face files. An animation names a sequence
of face identifiers that cycle at runtime.
animation pixie pixie.111 pixie.112 pixie.111 pixie.112 pixie.111 blank.111 blank.111 mina face pixie.111 magicmap orange end face pixie.112 magicmap orange end
| Keyword | Meaning |
|---|---|
animation <name> | Starts an animation block named <name>. |
facings <n> | Optional. n = 1 (default), 2, or 4. Tells the engine how many directional variants follow. With facings 4 the list contains four groups of frames (south, north, west, east). |
| frame lines | One face name per line, in display order. |
mina | Ends the animation frame list (reverse of anim). |
Example with directional facings (4 directions × 2 frames = 8 lines):
animation northman_player facings 4 viking.111 viking.112 viking.131 viking.132 viking.151 viking.152 viking.171 viking.172 mina
The animation name used in an .arc file must exactly match the name
declared here.
—
4. Archetype Files (.arc)
An archetype is the blueprint for an in-game object. Every mob, item,
floor tile, door, spell, and skill has an archetype. Archetypes are loaded
once at server startup and never changed at runtime (except for temporary
archetypes created for customised map objects — see §4.7).
4.1 Basic structure
Object <archetype_name> <field> <value> ... end
The Object keyword opens the definition; end closes it. The
archetype name is the internal identifier referenced everywhere else (treasure
lists, map files, randomitems, other_arch, etc.).
Minimal example (a wooden club):
Object club nrof 1 last_sp 9 type 15 face club.111 material 16 dam 6 weapontype 8 weight 9000 value 10 attacktype 1 name_pl clubs client_type 121 body_arm -1 skill one handed weapons end
4.2 Common fields
Identity
| Field | Type | Meaning |
|---|---|---|
Object <name> | string | Internal archetype ID (no spaces). |
name <text> | string | Singular in-game display name. |
name_pl <text> | string | Plural display name. |
title <text> | string | Appended to name when identified (e.g. of fire). |
race <text> | string | Race tag (used by treasure matching, god powers, etc.). |
slaying <text> | string | For keys: door slaying string. For scripts: Python path. |
Visuals
| Field | Type | Meaning |
|---|---|---|
face <name> | face-ref | Static face displayed when not animated (e.g. pixie.111). |
animation <name> | anim-ref | Name of animation sequence to use (from .face file). |
anim_speed <n> | int | Server-side animation speed (ticks per frame). |
client_anim_random 1 | flag | Client picks animation frames at random instead of in order. |
client_anim_sync 1 | flag | All instances of this object animate in sync on client. |
invisible 1 | flag | Object has no visible presence (used for event connectors, etc.). |
Physical stats
| Field | Type | Meaning |
|---|---|---|
type <n> | int | Object type ID (see §4.4). |
subtype <n> | int | Subtype within a type (e.g. sign subtypes). |
client_type <n> | int | Type hint sent to client for display purposes. |
weight <n> | int | Weight in grams. |
value <n> | int | Base shop value in silver coins. |
nrof <n> | int | Default stack size. |
material <bitmask> | int | Material bitmask (see §4.5). |
materialname <text> | string | Specific named material (overrides the bitmask label). |
no_pick 1 | flag | Object cannot be picked up. |
identified 1 | flag | Object starts already identified. |
Combat stats
| Field | Type | Meaning |
|---|---|---|
level <n> | int | Object level (affects drops, difficulty, spell effects). |
hp <n> | int | Current hit points. |
maxhp <n> | int | Maximum hit points. |
sp <n> | int | Current spell points. |
maxsp <n> | int | Maximum spell points. |
exp <n> | int | Experience awarded to killer when this object is destroyed. |
ac <n> | int | Armour class (lower = harder to hit). |
wc <n> | int | Weapon class (lower = better to-hit). |
dam <n> | int | Base damage per hit. |
speed <f> | float | Movement/attack speed. Negative = once per |n| ticks. |
attacktype <bitmask> | int | Attack types used (see §4.6). |
resist_<type> <n> | int | Resistance percentage (−100 to 100) against each attack type. |
Ability stats (living objects)
| Field | Type | Meaning |
|---|---|---|
Str / Dex / Con / Int / Wis / Pow / Cha <n> | int | Base attribute scores. |
run_away <n> | int | Flee when HP falls below this percentage. |
sleep 1 | flag | Monster starts asleep. |
unaggressive 1 | flag | Will not attack players unless attacked first. |
monster 1 | flag | Object is a living monster. |
alive 1 | flag | Object is alive (can be healed, poisoned, etc.). |
can_cast_spell 1 | flag | Monster may cast spells. |
can_use_range 1 | flag | Monster may use ranged weapons. |
see_invisible 1 | flag | Can detect invisible players. |
Movement
| Field | Value | Meaning |
|---|---|---|
move_type walk | — | Moves on ground. |
move_type fly_low | — | Flies at low altitude. |
move_type fly_high | — | Flies at high altitude. |
move_type swim | — | Swims in water. |
move_block <type> | — | Blocks objects of the given move type(s). all blocks everything. |
blocksview 1 | — | Prevents line of sight through this tile. |
stand_still 1 | — | NPC never moves from its starting position. |
attack_movement <n> | int | Monster AI movement pattern bitmask. |
Equipment / inventory slots
Body slot fields specify what equipment locations this item occupies (positive = slots used, negative = slots provided for items to use):
| Field | Slots | Typical use |
|---|---|---|
body_arm | ±1/2 | Shields (−1), two-handed weapons (−2) |
body_hand | ±2 | Gloves |
body_head | ±1 | Helmets |
body_torso | ±1 | Body armour |
body_waist | ±1 | Girdles/belts |
body_shoulder | ±1 | Cloaks |
body_finger | ±2 | Rings |
body_neck | ±1 | Amulets |
body_foot | ±2 | Boots |
body_wrist | ±2 | Bracers |
body_range | ±1 | Bows, wands, rods |
body_skill | ±1 | Skill objects |
Weapon fields
| Field | Meaning |
|---|---|
weapontype <bitmask> | Category of weapon (1=sword, 8=club, etc.) |
skill <name> | Skill required to use this weapon/item. |
last_sp <n> | Attack speed modifier. |
startequip 1 | Item was given to player at character creation and is not dropped. |
Treasure and linking
| Field | Meaning |
|---|---|
randomitems <list> | Treasure list name that spawns items into this object's inventory when initialised. |
other_arch <name> | Archetype to transform into or spawn (context-dependent: locked doors, generators, spells, etc.). |
connected <n> | Connects this object to a trigger group by ID number. |
on_use_yield <arch> | Archetype to replace this object with when it is consumed (e.g. empty bottle after potion). |
artifact <name> | Forces the object to be a specific named artifact. |
Message / dialog
msg @match * I don't know any riddles right now.... GO AWAY!!!! endmsg
The msg / endmsg block stores the object's readable text or NPC dialog
script. For NPC dialog, lines beginning with @match set triggers; see the
dialog system documentation for full syntax.
4.3 Embedded inventory (sub-objects)
Objects can contain other objects defined inline. This is used for potions that embed a spell, items that carry event connectors, or containers pre-filled with items.
Object potion_heroism name potion of heroism type 5 face potionhero.111 weight 1000 value 500 on_use_yield potion_empty arch spell_heroism end end
The inner arch … end block embeds a copy of the spell_heroism archetype
inside the potion. Any fields between arch and end override defaults
from the referenced archetype.
Event connectors are a common case — they attach plugin/Python scripts:
Object messageboard name message board type 98 arch messageboard_apply_event end arch messageboard_say_event end end Object messageboard_apply_event title Python slaying /python/IPO/board.py type 116 subtype 1 invisible 1 end
4.4 Multi-tile objects
Objects that span more than one map tile are defined as a chain of parts linked
by More. The first Object is the head (origin tile); each subsequent
part carries a relative x/y offset.
Object large_vdoor1 name large door type 23 face large_vdoor.111 no_pick 1 end More Object large_vdoor2 name large door type 23 face large_vdoor.111 no_pick 1 y 1 end More Object large_vdoor3 name large door type 23 face large_vdoor.111 no_pick 1 y 2 end
All parts share the same name and behaviour but each occupies its own tile.
The More keyword (capital M) separates parts; no end appears after
More.
4.5 Compound animations (anim_suffix)
Objects can define an anim_suffix that the engine appends to their
animation name during specific actions (attacking, spellcasting, skill use,
item application). If an animation called <base>_<suffix> exists in the
.face files, it plays for one cycle.
Object my_sword ... anim_suffix sword end
When a player wields my_sword and attacks, the engine looks for an
animation named <player_anim>_sword and plays it if found.
4.6 Object type IDs
The type field is a numeric constant defined in the server header
include/object.h. Frequently used values:
| type | Constant | Description |
|---|---|---|
| 1 | PLAYER | Player character |
| 3 | ROD | Rod |
| 5 | POTION | Potion |
| 6 | FOOD | Food |
| 8 | BOOK | Book / scroll case |
| 14 | BOW | Bow |
| 15 | WEAPON | Melee weapon |
| 16 | ARMOUR | Body armour |
| 20 | LOCKED_DOOR | Locked door |
| 23 | DOOR | Regular door |
| 24 | KEY | Key |
| 33 | SHIELD | Shield |
| 34 | HELMET | Helmet |
| 36 | MONEY | Money |
| 39 | AMULET | Amulet |
| 43 | SKILL | Skill object |
| 60 | GEM | Gem |
| 66 | EXIT | Map exit / portal |
| 68 | SHOP_FLOOR | Shop floor tile |
| 70 | RING | Ring |
| 71 | FLOOR | Floor tile |
| 80 | MONSTER | Monster |
| 85 | SPELLBOOK | Spell book |
| 87 | CLOAK | Cloak |
| 98 | SIGN | Sign / talking sign |
| 99 | BOOTS | Boots |
| 100 | GLOVES | Gloves |
| 101 | SPELL | Spell |
| 109 | WAND | Wand |
| 111 | SCROLL | Scroll |
| 113 | GIRDLE | Girdle / belt |
| 114 | FORCE | Force (invisible effect) |
| 116 | EVENT_CONNECTOR | Plugin event hook |
| 122 | CONTAINER | Container |
| 154 | RUNE | Rune trap |
| 155 | TRAP | Trap |
| 158 | DISEASE | Disease |
| 160 | BUILDER | Map builder |
| 161 | MATERIAL | Builder material |
4.7 Material bitmask values
The material field is a bitmask — add values together for composite
materials.
| Value | Constant | Material |
|---|---|---|
| 1 | M_PAPER | Paper |
| 2 | M_IRON | Iron |
| 4 | M_GLASS | Glass |
| 8 | M_LEATHER | Leather |
| 16 | M_WOOD | Wood |
| 32 | M_ORGANIC | General organic |
| 64 | M_STONE | Stone |
| 128 | M_CLOTH | Cloth |
| 256 | M_ADAMANT | Adamant |
| 512 | M_LIQUID | Liquid |
| 1024 | M_SOFT_METAL | Soft metal (copper, tin, etc.) |
| 2048 | M_BONE | Bone |
| 4096 | M_ICE | Ice |
| 8192 | M_SPECIAL | Special (hides material name in display) |
Example: material 16 = wood. material 18 = iron + wood (2 + 16).
4.8 Attack type bitmasks
The attacktype field is a bitmask of AT_xxx constants. resist_xxx
fields name the same attack types in lowercase:
| Value | Field name | Description |
|---|---|---|
| 1 | physical | Basic physical attack |
| 2 | magic | Arcane magic |
| 4 | fire | Fire (can ignite objects) |
| 8 | electricity | Electricity |
| 16 | cold | Cold (can freeze) |
| 32 | confusion | Scrambles movement/attack directions |
| 64 | acid | Corrodes random equipment |
| 128 | drain | Steals experience |
| 256 | weaponmagic | Direct magic damage |
| 512 | ghosthit | Bypasses physical armour |
| 1024 | poison | Damage-over-time |
| 2048 | slow | Reduces movement speed |
| 4096 | paralyze | Stops movement entirely |
| 8192 | turn_undead | Fear effect vs. undead only |
| 16384 | fear | Causes fleeing |
| 32768 | cancellation | Strips magic from items |
| 65536 | deplete | Drains a stat point |
| 131072 | death | Chance of instant kill |
| 262144 | chaos | Random attack type each hit |
| 524288 | counterspell | Cancels active spells |
| 1048576 | godpower | Adds the attacker's god's type |
| 2097152 | holyword | Damages by race alignment |
| 4194304 | blind | Causes blindness |
| 16777216 | life_stealing | Transfers victim HP to attacker |
| 33554432 | disease | Disease vector |
4.9 Temporary archetypes
When the map loader encounters a monster whose properties differ from the base
archetype (i.e. it has custom attributes added in the map file), the server
automatically creates a temporary archetype to record those initial values.
This ensures that fix_object() calls (triggered by equipping/unequipping
items, being cursed, etc.) can restore the correct baseline rather than the
generic defaults.
Temporary archetypes are reference-counted and freed automatically when no living object refers to them. Map developers do not create these directly.
—
5. Treasure List Files (.trs)
Treasure lists define what items are generated inside an object when the server
initialises it. They are separate from .arc files so that the same list
can be reused across many archetypes.
5.1 Linking an archetype to a treasure list
In the .arc file, the randomitems field names the treasure list to use:
Object door_0 name door randomitems door type 23 ... end
When the server spawns this door, it runs the door treasure list and inserts
the generated items into the door's inventory.
5.2 Treasure file format reference
List types
| Keyword | Behaviour |
|---|---|
treasure <name> | A list where every entry is rolled independently. Each item has a chance % probability of appearing. |
treasureone <name> | A list where only one item is chosen. Items are weighted by their chance relative to the total of all chance values in the list. |
Item entry fields
| Field | Meaning |
|---|---|
arch <name> | Generate an object from this archetype. |
list <name> | Reference and execute another treasure list. |
artifact <name> | Force the generated item to be a specific named artifact (magic is ignored when this is set). |
chance <n> | In a treasure list: probability in percent (0–100). In a treasureone list: relative weight vs. other entries. Defaults to 100. |
nrof <n> | Maximum stack size. If omitted, uses the archetype default. |
magic <n> | For arch: caps the magic enhancement level the item can receive. For list: minimum difficulty required before this list is even considered. |
list_magic_value <n> | If non-zero, generate the list at exactly this difficulty instead of the current map difficulty. |
list_magic_adjustment <n> | Add this value (may be negative) to the current difficulty when generating the referenced list. |
change_name <text> | Override the generated item's name. |
change_title <text> | Override the generated item's title. |
change_slaying <text> | Override the generated item's slaying string. |
Branching keywords
| Keyword | Meaning |
|---|---|
yes | Opens a sub-list that is generated only if the previous item was successfully generated. |
no | Opens a sub-list that is generated only if the previous item was not generated. |
more | Adds the next entry to the same list at the same level. |
end | Closes the current yes, no, or top-level list block. |
Generation rules
- The server tracks a magic (difficulty) level when instantiating a list. An
archentry is only eligible if itsmagicvalue is less than or equal to the current difficulty. - A maximum of 100 attempts are made to generate an eligible item before the generation is considered failed.
- The flag
GT_ONLY_GOOD(used internally) suppresses cursed and damned items. - Comments start with
#and are ignored. - Lines may be indented freely; leading whitespace is ignored.
—
6. treasures.trs — Annotated Walkthrough
The file arch/treasures.trs (2 252 lines) is the master treasure
definition file. All other .trs files in category subdirectories define
lists for specific objects; treasures.trs holds the shared, reusable
building-block lists that most content references.
Below is a structured summary of the major lists in the file.
6.1 Skill injection lists
treasure skill_use_magic_item
arch skill_use_magic_item
end
treasure all_spell_skills
arch skill_use_magic_item
more
arch skill_evocation
more
arch skill_praying
... (etc.)
end
These treasure lists (not treasureone) guarantee that every item
in the list is generated, giving a monster or player character a guaranteed
set of skill objects. skill_use_magic_item and all_spell_skills are
referenced by monster treasure lists so pet monsters award XP to the right
skill.
6.2 Random knowledge (scroll) list
treasureone random_knowledge
arch scroll_alchemy
chance 10
more
arch scroll_bargaining
chance 5
...
end
A treasureone list. Exactly one skill scroll is chosen, with rarer skills
(e.g. scroll_evocation at chance 5) less likely than common ones
(scroll_missile_weap at chance 15).
6.3 Weapon and armour selection
treasureone random_weapon
list missile_weapons
chance 5
more
list melee_weapons
chance 10
end
treasureone random_armour
list random_gauntlet
chance 10
more
list random_helmet
chance 40
...
end
These lists compose smaller sub-lists. random_weapon delegates to either
missile_weapons or melee_weapons; random_armour delegates to
specific slot sub-lists such as random_helmet and random_mail.
6.4 Mushroom foraging pattern
treasure random_mushroom
arch mushroom_1
chance 50
no
arch mushroom_2
chance 50
no
arch mushroom_3
chance 50
no
arch mandrake_root
chance 10
end
end
end
end
This illustrates the no branching chain. The generator tries
mushroom_1 (50%); if that fails it tries mushroom_2 (50%); if that
fails it tries mushroom_3 (50%); if all fail it tries mandrake_root
(10%). The deepest nesting acts as a rare fallback.
6.5 Coin and wealth lists
treasureone random_coin
arch goldcoin
chance 5
nrof 5
more
arch goldcoin
chance 5
nrof 10
...
arch platinacoin
chance 5
nrof 6
end
The same archetype (goldcoin, silvercoin, platinacoin) appears
multiple times with different nrof values. In a treasureone list this
is how you produce a distribution of stack sizes — each entry is a separate
weighted option.
random_wealth is structurally identical but adds gems to the coin mix.
starting_wealth is a simpler three-entry list used for new characters.
6.6 Artifact injection with magic difficulty
treasureone special_uncommon
list NONE
chance 5
more
arch bracers_ac
magic 4
chance 10
more
list rare_artifacts
magic 14
chance 5
...
end
list NONE is a special no-op entry that lets the list intentionally produce
nothing for that roll. The magic field on list rare_artifacts means
this branch is only considered when the current difficulty is ≥ 14 — so truly
rare items cannot appear in low-level areas.
artifact field usage example from later in the file:
arch potion_generic
artifact minor healing
chance 3
This forces the generated potion_generic to become the minor healing
artifact rather than a random potion.
6.7 yes/no branching: bow + arrows
treasure poor_old
arch bow
chance 5
yes
arch arrow
nrof 6
end
...
end
If the bow is generated (5% chance), the yes block fires and guarantees
arrows are also generated (nrof 6 = up to 6 arrows). No chance on the
arrows means 100% — the arrows are certain once the bow appears.
The no branch cascades through increasingly-likely weapon fallbacks:
arch b_ssword_2
magic 1
chance 5
no
arch b_ssword_1
chance 10
no
arch b_dagger
chance 15
no
arch stoneaxe
chance 20
no
arch club
chance 25
end
end
end
end
If b_ssword_2 is not generated (95% of the time), try b_ssword_1; if
that fails, try b_dagger; and so on down to club as the final fallback.
Note that b_ssword_2 also requires magic 1 — it cannot generate at
difficulty 0.
6.8 Standard monster treasure sets
The lists poor, standard, rich (and their _old variants) are
the primary lists assigned via randomitems to humanoid monsters:
| List | Purpose |
|---|---|
poor | Minimal loot: basic weapon, a little silver. |
standard | Average loot: weapon + shield + helmet + small amount of coins + chance of magic item. |
rich | Good loot: quality weapon + armour + gold + rods/wands/rings + spell books. |
humanoidpockets_low | Random small items a humanoid might carry (mushrooms, coins, books, potions). |
humanoidpockets_medium | Better pockets: more books, wealth, healing potions, knowledge scrolls. |
humanoid_parts | Body parts (flesh items) dropped by humanoid monsters. |
These are assembled with more and sometimes delegate to humanoidpockets_low/medium:
treasure standard
arch skill_use_magic_item
more
list standard_old
more
arch torch_unlit
nrof 3
chance 1
more
list humanoid_parts
chance 20
end
6.9 Named character class lists
Towards the end of treasures.trs are lists for specific NPC/monster types
used by the randomitems field on character archetypes:
treasure elf
list fighter_skills
more
list mage_skills
more
arch bow
magic 2
more
arch skill_bowyer
more
arch cloak
more
arch arrow
nrof 50
more
list humanoid_parts
chance 20
more
list humanoidpockets_low
end
These composed lists give NPC classes coherent equipment sets without
duplication. fighter_skills, mage_skills, and basic_skills are
defined in player/player_skills.trs and referenced here by name, showing
that treasure lists can cross-reference lists defined in other .trs files —
all files are merged into crossfire.trs at build/pack time.
6.10 Restoration potions (treasureone with artifacts)
treasureone restoration_potions
arch minor_potion_restoration
chance 15
more
arch medium_potion_restoration
chance 10
more
arch major_potion_restoration
chance 5
more
arch potion_restoration
chance 5
end
A simple treasureone weighted by rarity: minor (15) → medium (10) →
major (5) → full (5). The total weight is 35; a major_potion_restoration
has a 5/35 ≈ 14% chance once this list is chosen.
—
7. Common Patterns and Tips
- Naming conventions — The archetype name in
Object <name>must be unique across all.arcfiles. It becomes the identifier everywhere:randomitems,other_arch, map files, treasure lists. - Face references — The face name in
face <name>strips the faceset and extension.face pixie.111expectspixie.base.111.png(and optionallypixie.clsc.111.png). - Adding a new object — Create a
.arcfile (plus matching.faceand.png) in the appropriate category folder. No registration step is needed; the server finds all files recursively. - Treasure list scope —
treasures.trsis global. Category-local.trsfiles (e.g.door/locking_key.trs) are for lists used only by objects in that folder, but any list name is accessible globally once packed. - NONE list —
list NONEis a built-in no-op. Using it in atreasureonelist adds a weighted “generate nothing” outcome, useful for controlling drop frequency without changing all the other weights. - Difficulty gating — Use
magic <n>on alistentry to create level-appropriate loot tables. Combine withlist_magic_adjustmentto scale difficulty up or down relative to the current area. - Event connectors — Attach Python scripts to objects by embedding
type 116(EVENT_CONNECTOR) sub-objects. Thesubtypeselects the event (1=apply, 6=say, etc.) andslayingis the script path relative to the server's Python directory.
—
8. Case Study: Dissecting ''treasureone random_armour''
This section walks through an entire treasureone chain end-to-end — from
the top-level list down through every sub-list — using random_armour as
the example. It is intended to make the relationship between chance,
treasureone, list, and magic concrete.
8.1 The block in full
treasureone random_armour
list random_gauntlet
chance 10
more
list random_helmet
chance 40
more
list random_mail
chance 52
more
list random_shield
chance 36
more
list random_boots
chance 10
more
arch cloak
chance 10
end
8.2 How ''chance'' works in a ''treasureone'' list
In a treasure list, chance is a plain percentage (0–100). In a
treasureone list the meaning is different: chance is a relative
weight, not a percentage.
The engine sums every chance value in the list to get a total, then
assigns each entry a share proportional to its weight.
Total weight = 10 + 40 + 52 + 36 + 10 + 10 = **158**
The real probability of any entry = chance ÷ 158.
Concrete example: Imagine 158 numbered tickets in a hat. 52 of them say “random_mail”, 40 say “random_helmet”, and so on. One ticket is drawn. The entry whose ticket is drawn wins, and its items are generated. Everything else produces nothing.
| Entry | chance | Probability |
|---|---|---|
list random_gauntlet | 10 | 10/158 = 6.3 % |
list random_helmet | 40 | 40/158 = 25.3 % |
list random_mail | 52 | 52/158 = 32.9 % |
list random_shield | 36 | 36/158 = 22.8 % |
list random_boots | 10 | 10/158 = 6.3 % |
arch cloak | 10 | 10/158 = 6.3 % |
Body armour (random_mail) is the most likely single outcome. Gauntlets,
boots, and cloaks share the lowest probability.
8.3 Line-by-line explanation
treasureone random_armour
Declares the list named random_armour. The treasureone keyword means
one and only one outcome is produced per instantiation.
list random_gauntlet
chance 10
References the sub-list random_gauntlet (defined in
armour/gauntlets/random_gauntlet.trs). 10 tickets out of 158 (~6.3 %).
If this entry wins, control is handed to random_gauntlet, which rolls its
own internal treasureone to pick a specific pair of gloves or gauntlets.
more
Continues the list. Every entry except the last must be followed by more.
Without it, the parser would treat the next line as a new top-level definition.
list random_helmet
chance 40
References random_helmet (armour/helmet/random_helmet.trs).
40 tickets (~25.3 %). Helmets are the second-most-likely slot.
list random_mail
chance 52
References random_mail (armour/mail/random_mail.trs). 52 tickets
(~32.9 %) — the highest weight in the list. Body armour is the most common
result from random_armour.
list random_shield
chance 36
References random_shield (armour/shield/random_shield.trs).
36 tickets (~22.8 %).
list random_boots
chance 10
References random_boots (armour/boots/random_boots.trs). 10 tickets
(~6.3 %).
arch cloak
chance 10
end
Generates a cloak archetype directly — no sub-list involved. 10 tickets
(~6.3 %). end closes the entire random_armour definition.
8.4 Sub-lists expanded
When one of the list entries wins, that sub-list runs its own
treasureone roll. Each sub-list has its own set of weights, and many
entries carry a magic requirement that gates them behind a minimum
difficulty level. An entry whose magic value exceeds the current
difficulty is skipped; the engine retries up to 100 times before giving up.
random_gauntlet (total weight: 22)
| Item | magic req | chance | Probability |
|---|---|---|---|
gloves_cloth | none | 5 | 22.7 % |
gloves | ≥ 1 | 5 | 22.7 % |
gloves_b | ≥ 3 | 1 | 4.5 % |
gloves_w | ≥ 3 | 1 | 4.5 % |
b_gauntlets | ≥ 2 | 5 | 22.7 % |
gauntlets | ≥ 4 | 5 | 22.7 % |
gloves_cloth is the only entry with no magic requirement, making it
the sole result possible at difficulty 0. gauntlets and gloves_b/w
are locked behind higher thresholds.
random_helmet (total weight: 40)
All entries share chance 5, so each has an equal 12.5 % share of this
sub-list. Magic difficulty is the only differentiator.
| Item | magic req | Probability |
|---|---|---|
b_full_helmet | ≥ 4 | 12.5 % |
b_helmet | ≥ 4 | 12.5 % |
b_horned_helmet | ≥ 4 | 12.5 % |
coif | ≥ 4 | 12.5 % |
full_helmet | ≥ 2 | 12.5 % |
horned_helmet | ≥ 1 | 12.5 % |
helmet | ≥ 2 | 12.5 % |
bighorned_helmet | ≥ 1 | 12.5 % |
At difficulty 1 only horned_helmet and bighorned_helmet are eligible.
At difficulty 4 all eight are in the pool.
random_mail (total weight: 53)
| Item | magic req | chance | Probability |
|---|---|---|---|
b_plate_mail | ≥ 4 | 5 | 9.4 % |
b_scale_mail | ≥ 4 | 5 | 9.4 % |
robe | ≥ 4 | 5 | 9.4 % |
leather_armour | ≥ 4 | 5 | 9.4 % |
scale_mail | ≥ 4 | 5 | 9.4 % |
ring_mail2 | ≥ 3 | 5 | 9.4 % |
chain_mail | ≥ 3 | 5 | 9.4 % |
lapron | ≥ 1 | 1 | 1.9 % |
tunic | ≥ 3 | 1 | 1.9 % |
ring_mail | ≥ 4 | 5 | 9.4 % |
ring_mail (duplicate entry) | ≥ 4 | 5 | 9.4 % |
plate_mail | ≥ 4 | 5 | 9.4 % |
list random_dress | ≥ 3 | 1 | 1.9 % |
ring_mail appears twice at equal weight, effectively doubling its
combined share to ~18.8 % at difficulty ≥ 4. lapron, tunic, and
random_dress have only 1 ticket each, making them rare. random_dress
is itself a further treasureone sub-list choosing between dress styles and
a tunic.
random_shield (total weight: 36)
| Item | magic req | chance | Probability |
|---|---|---|---|
b_shield | ≥ 4 | 5 | 13.9 % |
b_small_shield | ≥ 4 | 5 | 13.9 % |
spiked_shield | ≥ 1 | 1 | 2.8 % |
shield | ≥ 2 | 5 | 13.9 % |
small_shield | ≥ 1 | 5 | 13.9 % |
high_shield | ≥ 2 | 5 | 13.9 % |
kite_shield | ≥ 2 | 5 | 13.9 % |
round_shield | ≥ 1 | 5 | 13.9 % |
spiked_shield is the rarest at 1 ticket (2.8 %). Three shields
(small_shield, round_shield, spiked_shield) are available from
difficulty ≥ 1; the remainder require ≥ 2 or ≥ 4.
random_boots (total weight: 10)
| Item | magic req | chance | Probability |
|---|---|---|---|
low_boots | ≥ 1 | 5 | 50 % |
high_boots | ≥ 3 | 3 | 30 % |
high_boots_b | ≥ 3 | 1 | 10 % |
high_boots_w | ≥ 3 | 1 | 10 % |
The most compact sub-list. low_boots wins half the time. The coloured
variants (black, white) are each 10 % of this already-rare (~6.3 %) outcome.
8.5 Combined probability of any specific item
The final chance of a specific item is the product of each stage:
P(item) = P(sub-list wins in random_armour) × P(item wins in sub-list)
Example — gauntlets (the best gauntlets, magic ≥ 4):
P(random_gauntlet wins) = 10/158 = 6.33 % P(gauntlets wins in random_gauntlet, at difficulty ≥ 4) = 5/22 = 22.7 % P(gauntlets) = 6.33 % × 22.7 % ≈ 1.4 %
Example — plate_mail (magic ≥ 4):
P(random_mail wins) = 52/158 = 32.9 % P(plate_mail wins in random_mail, at difficulty ≥ 4) = 5/53 = 9.4 % P(plate_mail) = 32.9 % × 9.4 % ≈ 3.1 %
Despite random_mail being by far the most likely slot, the many entries
inside it dilute any individual item's final probability considerably.
—
9. ''treasureone'' Probability Tables — Full Reference (treasures.trs)
This section provides a probability table for every treasureone list defined
in arch/treasures.trs. Each table lists entries in file order. The
Probability column is chance ÷ total_weight × 100, rounded to one
decimal place. magic req is the minimum difficulty level at which an entry
is eligible; entries with no magic requirement can appear at any difficulty.
nrof is the maximum stack size generated. arch entries generate an
object directly; list entries delegate to another named treasure list.
list NONE is a built-in no-op that intentionally generates nothing.
random_armour is covered in full in §8.
9.1 random_knowledge
Used by shops, libraries, and monster drops to give one random skill scroll. Scrolls for harder skills (evocation, oratory, pyromancy, sorcery, summoning) have lower weight; two skills with the broadest use (missile weapons, praying) share the highest weight of 15.
Total weight: 247
| Entry | magic req | chance | Probability |
|---|---|---|---|
arch scroll_alchemy | — | 10 | 4.0 % |
arch scroll_bargaining | — | 5 | 2.0 % |
arch scroll_bowyer | — | 10 | 4.0 % |
arch scroll_climbing | — | 10 | 4.0 % |
arch scroll_disarm_traps | — | 10 | 4.0 % |
arch scroll_evocation | — | 5 | 2.0 % |
arch scroll_find_traps | — | 10 | 4.0 % |
arch scroll_hiding | — | 9 | 3.6 % |
arch stylus | — | 10 | 4.0 % |
arch scroll_jewelry | — | 10 | 4.0 % |
arch scroll_jumping | — | 10 | 4.0 % |
arch scroll_karate | — | 8 | 3.2 % |
arch scroll_literacy | — | 8 | 3.2 % |
arch scroll_missile_weap | — | 15 | 6.1 % |
arch scroll_one_handed_weapons | — | 10 | 4.0 % |
arch scroll_oratory | — | 5 | 2.0 % |
arch scroll_praying | — | 15 | 6.1 % |
arch scroll_punching | — | 5 | 2.0 % |
arch scroll_pyromancy | — | 5 | 2.0 % |
arch scroll_sense_curse | — | 5 | 2.0 % |
arch scroll_sense_mag | — | 5 | 2.0 % |
arch scroll_singing | — | 5 | 2.0 % |
arch scroll_smithing | — | 5 | 2.0 % |
arch scroll_sorcery | — | 5 | 2.0 % |
arch scroll_stealing | — | 9 | 3.6 % |
arch scroll_summoning | — | 5 | 2.0 % |
arch scroll_thaumaturgy | — | 9 | 3.6 % |
arch scroll_throwing | — | 1 | 0.4 % |
arch scroll_two_handed_weapons | — | 10 | 4.0 % |
arch scroll_use_magic_item | — | 8 | 3.2 % |
arch scroll_woodsman | — | 10 | 4.0 % |
9.2 needle_diseases
Used by needle traps to inject a random disease into a player. Most diseases share equal weight (20). Athletes foot and tooth decay are notably rarer at 5 each.
Total weight: 150
| Entry | chance | Probability |
|---|---|---|
arch warts | 20 | 13.3 % |
arch atheletes_foot | 5 | 3.3 % |
arch tooth_decay | 5 | 3.3 % |
arch tapeworms | 20 | 13.3 % |
arch egg_disease | 20 | 13.3 % |
arch diarrhea | 20 | 13.3 % |
arch incontinence | 20 | 13.3 % |
arch scurvy | 20 | 13.3 % |
arch flaming_fart | 20 | 13.3 % |
9.3 random_weapon
A high-level picker that selects a weapon category. Melee weapons are twice as likely as missile weapons.
Total weight: 15
| Entry | chance | Probability |
|---|---|---|
list missile_weapons | 5 | 33.3 % |
list melee_weapons | 10 | 66.7 % |
9.4 random_armour
See §8 for the full line-by-line breakdown and sub-list expansion.
Total weight: 158
| Entry | chance | Probability |
|---|---|---|
list random_gauntlet | 10 | 6.3 % |
list random_helmet | 40 | 25.3 % |
list random_mail | 52 | 32.9 % |
list random_shield | 36 | 22.8 % |
list random_boots | 10 | 6.3 % |
arch cloak | 10 | 6.3 % |
9.5 random_special
Used by special shops and high-value loot containers. Wands are the single
most likely result. scroll_new appears three times with different nrof
values, creating a distribution of scroll quantities. special_uncommon is
gated at three magic thresholds (5, 8, 10) so premium items only appear in
higher-level areas.
Total weight: 108
| Entry | magic req | nrof | chance | Probability |
|---|---|---|---|---|
arch scroll_new | — | 3 | 5 | 4.6 % |
arch scroll_new | — | 2 | 5 | 4.6 % |
arch scroll_new | — | 1 | 10 | 9.3 % |
arch amulet | — | — | 10 | 9.3 % |
arch wand | — | — | 15 | 13.9 % |
arch staff | — | — | 5 | 4.6 % |
arch holy_symbol | — | — | 3 | 2.8 % |
arch ring | — | — | 5 | 4.6 % |
list random_books | — | — | 5 | 4.6 % |
arch emerald | — | 8 | 5 | 4.6 % |
arch sapphire | — | 5 | 5 | 4.6 % |
arch gem | — | 1 | 5 | 4.6 % |
arch ruby | — | 3 | 5 | 4.6 % |
arch pearl | — | 16 | 5 | 4.6 % |
list special_uncommon | ≥ 10 | — | 5 | 4.6 % |
list special_uncommon | ≥ 8 | — | 5 | 4.6 % |
list special_uncommon | ≥ 5 | — | 5 | 4.6 % |
arch potion_heroism | — | — | 5 | 4.6 % |
9.6 random_coin
Generates one coin stack. All 14 entries share equal weight (5), making each
outcome equally likely. The same archetype is repeated with different nrof
values to distribute stack sizes across coin types.
Total weight: 70 (14 entries × 5)
| Entry | nrof | Probability |
|---|---|---|
arch goldcoin | 5 | 7.1 % |
arch goldcoin | 10 | 7.1 % |
arch goldcoin | 15 | 7.1 % |
arch goldcoin | 20 | 7.1 % |
arch goldcoin | 25 | 7.1 % |
arch silvercoin | 25 | 7.1 % |
arch silvercoin | 50 | 7.1 % |
arch silvercoin | 75 | 7.1 % |
arch silvercoin | 100 | 7.1 % |
arch silvercoin | 150 | 7.1 % |
arch platinacoin | 2 | 7.1 % |
arch platinacoin | 4 | 7.1 % |
arch platinacoin | 6 | 7.1 % |
arch platinacoin | 10 | 7.1 % |
9.7 random_wealth
An expanded version of random_coin that also includes gem drops. All 24
entries share equal weight (5). Gold and silver cover larger stacks than in
random_coin. Platinacoin starts at nrof 1.
Total weight: 120 (24 entries × 5)
All entries have equal probability of 4.2 % each.
| Entry | nrof |
|---|---|
arch goldcoin | 5, 10, 15, 20, 25 (×5 entries) |
arch silvercoin | 25, 50, 75, 100, 150 (×5 entries) |
arch platinacoin | 1, 2, 4, 6 (×4 entries) |
arch gem | 1, 1 (×2 entries) |
arch pearl | 2, 4 (×2 entries) |
arch ruby | 1, 2 (×2 entries) |
arch sapphire | 1, 3 (×2 entries) |
arch emerald | 2, 5 (×2 entries) |
9.8 random_gem
Generates one gem type and quantity. Common gems (gem, pearl, ruby, sapphire, emerald, amethyst) each have two entries at chance 5, spreading their quantity range. Topaz and bloodstone are rarer at chance 3.
Total weight: 72
| Entry | nrof | chance | Probability |
|---|---|---|---|
arch gem | 1 | 5 | 6.9 % |
arch gem | 2 | 5 | 6.9 % |
arch pearl | 4 | 5 | 6.9 % |
arch pearl | 6 | 5 | 6.9 % |
arch ruby | 2 | 5 | 6.9 % |
arch ruby | 4 | 5 | 6.9 % |
arch sapphire | 2 | 5 | 6.9 % |
arch sapphire | 4 | 5 | 6.9 % |
arch emerald | 10 | 5 | 6.9 % |
arch emerald | 4 | 5 | 6.9 % |
arch amethyst | 2 | 5 | 6.9 % |
arch amethyst | 4 | 5 | 6.9 % |
arch topaz | 5 | 3 | 4.2 % |
arch topaz | 2 | 3 | 4.2 % |
arch bloodstone | 2 | 3 | 4.2 % |
arch bloodstone | 7 | 3 | 4.2 % |
9.9 starting_wealth
Used to assign starting money to a new character. All three coin types are equally likely, giving each a one-in-three chance.
Total weight: 15
| Entry | nrof | chance | Probability |
|---|---|---|---|
arch goldcoin | 120 | 5 | 33.3 % |
arch silvercoin | 1000 | 5 | 33.3 % |
arch platinacoin | 40 | 5 | 33.3 % |
9.10 random_plant
Generates foliage and botanicals. flowers_permanent is the most likely
result. random_mushroom requires difficulty ≥ 15 and is only eligible in
very high-level areas.
Total weight: 76
| Entry | magic req | nrof | chance | Probability |
|---|---|---|---|---|
arch rose_pink | — | 5 | 8 | 10.5 % |
arch rose_yellow | — | 5 | 12 | 15.8 % |
arch rose_white | — | 4 | 10 | 13.2 % |
arch rose_red | — | 3 | 8 | 10.5 % |
arch flowers_permanent | — | 5 | 15 | 19.7 % |
arch clover | — | 2 | 5 | 6.6 % |
arch mint | — | — | 5 | 6.6 % |
arch mandrake_root | — | — | 3 | 3.9 % |
list random_mushroom | ≥ 15 | — | 10 | 13.2 % |
9.11 random_alchemy
Alchemy supply stock list. A plain cauldron dominates at chance 18. A
magic-enhanced cauldron (magic ≥ 5) has only a 3.1 % share. Mineral
reagents, base metals, and plants round out the list. fix_mercury
(transmuted mercury) is the rarest single item at chance 1.
Total weight: 97
| Entry | magic req | nrof | chance | Probability |
|---|---|---|---|---|
arch cauldron | — | — | 18 | 18.6 % |
arch cauldron | ≥ 5 | — | 3 | 3.1 % |
list random_books | — | — | 10 | 10.3 % |
arch scroll_alchemy | — | — | 2 | 2.1 % |
arch min_oil | — | 5 | 12 | 12.4 % |
list shop_gems | ≥ 5 | — | 3 | 3.1 % |
arch phil_sulphur | — | 3 | 4 | 4.1 % |
arch phil_salt | — | 4 | 5 | 5.2 % |
arch phil_phosphorus | — | 2 | 3 | 3.1 % |
arch phil_oil | — | 3 | 5 | 5.2 % |
arch water | — | 3 | 3 | 3.1 % |
list random_plant | ≥ 5 | — | 10 | 10.3 % |
arch mercury | — | — | 8 | 8.2 % |
arch lead | — | — | 8 | 8.2 % |
arch true_lead | — | — | 2 | 2.1 % |
arch fix_mercury | — | — | 1 | 1.0 % |
9.12 random_potion
A layered potion list. The seven stat potions each get a modest weight of 3.
shop_potions is referenced three times at escalating magic thresholds (2,
6, 8), and random_potion references itself recursively at thresholds 10,
12, and 14 to create tiered escalation. special_uncommon is included five
times at decreasing magic thresholds so that truly unusual items only emerge at
high difficulty.
Total weight: 91
| Entry | magic req | chance | Probability |
|---|---|---|---|
arch potionstr | — | 3 | 3.3 % |
arch potionint | — | 3 | 3.3 % |
arch potioncha | — | 3 | 3.3 % |
arch potionwis | — | 3 | 3.3 % |
arch potioncon | — | 3 | 3.3 % |
arch potiondex | — | 3 | 3.3 % |
arch potionpow | — | 3 | 3.3 % |
list shop_potions | ≥ 2 | 5 | 5.5 % |
list shop_potions | ≥ 6 | 5 | 5.5 % |
list shop_potions | ≥ 8 | 5 | 5.5 % |
list random_potion | ≥ 10 | 10 | 11.0 % |
list random_potion | ≥ 12 | 5 | 5.5 % |
list random_potion | ≥ 12 | 5 | 5.5 % |
list random_potion | ≥ 14 | 5 | 5.5 % |
list special_uncommon | ≥ 14 | 5 | 5.5 % |
list special_uncommon | ≥ 13 | 5 | 5.5 % |
list special_uncommon | ≥ 12 | 5 | 5.5 % |
list special_uncommon | ≥ 10 | 5 | 5.5 % |
list special_uncommon | ≥ 7 | 5 | 5.5 % |
list uncommon_items | ≥ 3 | 5 | 5.5 % |
9.13 special_uncommon
A gateway list for mid-tier rare items. Referenced heavily by random_potion
and random_magical. bracers_ac and lockpicks lead with 10 tickets
each. mithril_chainmail and ring_spell are the rarest non-NONE
outcomes at 1 ticket each. list NONE (1.0 % base) intentionally produces
nothing. uncommon_items is referenced four times at escalating magic
thresholds.
Total weight: 97
| Entry | magic req | chance | Probability |
|---|---|---|---|
list NONE | — | 5 | 5.2 % |
arch bracers_ac | ≥ 4 | 10 | 10.3 % |
arch mithril_chainmail | ≥ 4 | 1 | 1.0 % |
arch lockpicks | — | 10 | 10.3 % |
list rare_artifacts | ≥ 14 | 5 | 5.2 % |
list uncommon_artifacts | ≥ 13 | 5 | 5.2 % |
list uncommon_artifacts | ≥ 7 | 5 | 5.2 % |
arch potion_fire | — | 5 | 5.2 % |
arch potion_cold | — | 5 | 5.2 % |
arch potion_heal | — | 5 | 5.2 % |
arch potion_magic | — | 5 | 5.2 % |
list restoration_potions | — | 10 | 10.3 % |
list uncommon_items | ≥ 2 | 5 | 5.2 % |
list uncommon_items | ≥ 4 | 5 | 5.2 % |
list uncommon_items | ≥ 6 | 5 | 5.2 % |
list uncommon_items | ≥ 8 | 5 | 5.2 % |
arch ring_nodrain | — | 5 | 5.2 % |
arch ring_spell | — | 1 | 1.0 % |
9.14 containers
Used wherever a random bag-type item is needed. Sacks and bags are the most
common. Quivers for throwing (quiver_throwing) and scroll cases are the
rarest.
Total weight: 110
| Entry | chance | Probability |
|---|---|---|
arch sack | 25 | 22.7 % |
arch bag | 25 | 22.7 % |
arch pouch | 20 | 18.2 % |
arch key_ring | 20 | 18.2 % |
arch quiver | 10 | 9.1 % |
arch quiver_throwing | 5 | 4.5 % |
arch scrollcase | 5 | 4.5 % |
9.15 missile_weapons
Ammunition (arrows, bolts) dominates at chance 35 each. Bows and crossbows each get 10. Rare bow variants (hunter's, long, composite) have only 1 ticket each. All weapon entries require magic ≥ 3; quivers have no magic requirement.
Total weight: 103
| Entry | magic req | nrof | chance | Probability |
|---|---|---|---|---|
arch bow | ≥ 3 | — | 10 | 9.7 % |
arch arrow | ≥ 3 | 10 | 35 | 34.0 % |
arch crossbow | ≥ 3 | — | 10 | 9.7 % |
arch bolt | ≥ 3 | 8 | 35 | 34.0 % |
arch huntersbow | ≥ 3 | — | 1 | 1.0 % |
arch longbow | ≥ 3 | — | 1 | 1.0 % |
arch compositebow | ≥ 3 | — | 1 | 1.0 % |
arch quiver | — | — | 10 | 9.7 % |
9.16 throw_weapons
Spears are the most common thrown weapon (31.8 %) followed by daggers (27.3 %). Throwing stars, tridents, and the quiver are the rarest. All thrown weapon stacks require magic ≥ 2 (tridents ≥ 3).
Total weight: 110
| Entry | magic req | nrof | chance | Probability |
|---|---|---|---|---|
arch t_dagger | ≥ 2 | 8 | 30 | 27.3 % |
arch spear | ≥ 2 | 4 | 35 | 31.8 % |
arch axe_2 | ≥ 2 | 5 | 15 | 13.6 % |
arch hammer_2 | ≥ 2 | 4 | 15 | 13.6 % |
arch t_star1 | ≥ 2 | 12 | 5 | 4.5 % |
arch trident | ≥ 3 | 3 | 5 | 4.5 % |
arch quiver_throwing | — | — | 5 | 4.5 % |
9.17 melee_weapons
A large list covering most one- and two-handed melee weapons. All 39 standard
weapons share chance 5 (magic ≥ 4 unless noted). Three weapons requiring only
magic ≥ 3 (club, stonehammer, stoneaxe) are available at slightly lower
difficulty. The list delegates to uncommon_weapons (10 tickets) and
rare_weapons (1 ticket) for exotic choices.
Total weight: 209
Standard entries (chance 5 each, magic ≥ 4 unless marked):
| Entry | magic req | Probability |
|---|---|---|
arch b_dagger | ≥ 4 | 2.4 % |
arch b_bsword_1 | ≥ 4 | 2.4 % |
arch b_bsword_2 | ≥ 4 | 2.4 % |
arch b_lsword | ≥ 4 | 2.4 % |
arch b_scimitar | ≥ 4 | 2.4 % |
arch b_ssword_1 | ≥ 4 | 2.4 % |
arch b_ssword_2 | ≥ 4 | 2.4 % |
arch b_sword_1 | ≥ 4 | 2.4 % |
arch b_axe1 | ≥ 4 | 2.4 % |
arch dagger | ≥ 4 | 2.4 % |
arch punch_dagger | ≥ 4 | 2.4 % |
arch shortsword_2 | ≥ 4 | 2.4 % |
arch t_dagger | ≥ 4 | 2.4 % |
arch shortsword | ≥ 4 | 2.4 % |
arch light_sword | ≥ 4 | 2.4 % |
arch falchion | ≥ 4 | 2.4 % |
arch sabre | ≥ 4 | 2.4 % |
arch scimitar | ≥ 4 | 2.4 % |
arch spear | ≥ 4 | 2.4 % |
arch lspear | ≥ 4 | 2.4 % |
arch sword | ≥ 4 | 2.4 % |
arch sword_2 | ≥ 4 | 2.4 % |
arch sword_3 | ≥ 4 | 2.4 % |
arch sword_4 | ≥ 4 | 2.4 % |
arch broadsword | ≥ 4 | 2.4 % |
arch broadsword_2 | ≥ 4 | 2.4 % |
arch club | ≥ 3 | 2.4 % |
arch mace | ≥ 4 | 2.4 % |
arch mace_2 | ≥ 4 | 2.4 % |
arch hammer | ≥ 4 | 2.4 % |
arch hammer_2 | ≥ 4 | 2.4 % |
arch stonehammer | ≥ 3 | 2.4 % |
arch axe | ≥ 4 | 2.4 % |
arch axe_2 | ≥ 4 | 2.4 % |
arch axe_3 | ≥ 4 | 2.4 % |
arch axe_4 | ≥ 4 | 2.4 % |
arch stoneaxe | ≥ 3 | 2.4 % |
arch morningstar | ≥ 4 | 2.4 % |
arch large_morningstar | ≥ 4 | 2.4 % |
Non-standard entries:
| Entry | magic req | chance | Probability |
|---|---|---|---|
arch poleaxe | ≥ 4 | 2 | 1.0 % |
arch magnifier | ≥ 4 | 1 | 0.5 % |
list uncommon_weapons | — | 10 | 4.8 % |
list rare_weapons | — | 1 | 0.5 % |
9.18 rare_weapons
Exotic and high-value weapons rarely found. brdaxe1 (broad axe) has the
highest share. dhaxe2 requires magic ≥ 6, making it one of the most
difficulty-gated weapons in the game. Sai, kama, and other eastern weapons
each have 1 ticket.
Total weight: 18
| Entry | magic req | chance | Probability |
|---|---|---|---|
arch brdaxe1 | ≥ 4 | 5 | 27.8 % |
arch sflail1 | ≥ 4 | 2 | 11.1 % |
arch dhaxe1 | ≥ 4 | 2 | 11.1 % |
arch shaxe1 | ≥ 4 | 2 | 11.1 % |
arch dhaxe2 | ≥ 6 | 1 | 5.6 % |
arch sai1 | ≥ 4 | 1 | 5.6 % |
arch sai2 | ≥ 4 | 1 | 5.6 % |
arch kama1 | ≥ 4 | 1 | 5.6 % |
arch kama2 | ≥ 4 | 1 | 5.6 % |
arch vlongsword | ≥ 4 | 2 | 11.1 % |
9.19 uncommon_weapons
Cultural and unusual weapons. Katana requires magic ≥ 4; nunchaku, taifu, and trident require ≥ 3; shovel and stake need only ≥ 2. Scythe and sickle have lower weight (2) than the rest.
Total weight: 42
| Entry | magic req | chance | Probability |
|---|---|---|---|
arch katana_1 | ≥ 4 | 5 | 11.9 % |
arch nunchacu_1 | ≥ 3 | 5 | 11.9 % |
arch nunchacu_2 | ≥ 3 | 5 | 11.9 % |
arch taifu_1 | ≥ 3 | 5 | 11.9 % |
arch shovel_1 | ≥ 2 | 5 | 11.9 % |
arch stake | ≥ 2 | 5 | 11.9 % |
arch scythe1 | ≥ 4 | 2 | 4.8 % |
arch sickle1 | ≥ 4 | 2 | 4.8 % |
arch t_star1 | ≥ 4 | 3 | 7.1 % |
arch trident | ≥ 3 | 5 | 11.9 % |
9.20 uncommon_artifacts
Named artifact weapons, armour, and accessories. Most entries share chance 5.
The three dragon mail variants (dragon_mail, green_dragon_mail, blue_dragon_mail)
are slightly rarer at chance 3. The amulet entry uses the artifact
keyword to force generation of the lifesaving artifact specifically.
Total weight: 99
| Entry | chance | Probability |
|---|---|---|
arch potion_shielding | 5 | 5.1 % |
arch mjoellnir | 5 | 5.1 % |
arch bonecrusher | 5 | 5.1 % |
arch firebrand | 5 | 5.1 % |
arch frostbrand | 5 | 5.1 % |
arch deathbringer | 5 | 5.1 % |
arch dragonslayer | 5 | 5.1 % |
arch skullcleaver | 5 | 5.1 % |
arch demonbane | 5 | 5.1 % |
arch sting | 5 | 5.1 % |
arch levitationboots | 5 | 5.1 % |
arch reflector | 5 | 5.1 % |
arch holy_shield | 5 | 5.1 % |
arch girdle_dam | 5 | 5.1 % |
arch dragon_mail | 3 | 3.0 % |
arch green_dragon_mail | 3 | 3.0 % |
arch blue_dragon_mail | 3 | 3.0 % |
arch dragon_shield | 5 | 5.1 % |
arch helmet_of_xrays | 5 | 5.1 % |
arch amulet (artifact: lifesaving) | 5 | 5.1 % |
arch elvenboots | 5 | 5.1 % |
9.21 random_magical
A broad magic-item loot list. restoration_potions leads at 24.5 % and
scroll_new (stack of 9) follows at 21.0 %, making these the two most
common outcomes. ring_spell is nearly impossible at 0.7 %.
Total weight: 143
| Entry | magic req | nrof | chance | Probability |
|---|---|---|---|---|
arch amulet | — | — | 10 | 7.0 % |
arch ring | — | — | 10 | 7.0 % |
list random_books | — | — | 10 | 7.0 % |
arch wand | — | — | 10 | 7.0 % |
arch staff | — | — | 5 | 3.5 % |
arch rod_light | — | — | 2 | 1.4 % |
arch scroll_new | — | 9 | 30 | 21.0 % |
list restoration_potions | — | — | 35 | 24.5 % |
arch gem | — | 1 | 5 | 3.5 % |
arch pearl | — | 8 | 5 | 3.5 % |
arch ruby | — | 2 | 5 | 3.5 % |
arch sapphire | — | 3 | 5 | 3.5 % |
arch emerald | — | 4 | 5 | 3.5 % |
arch ring_spell | — | — | 1 | 0.7 % |
list special_uncommon | ≥ 9 | — | 5 | 3.5 % |
9.22 rare_artifacts
Legendary named items. list NONE occupies 20 % of the weight, meaning one
in five rolls produces nothing. Each of the 16 actual artifacts has an equal
5 % weight, giving a 5/100 = 5.0 % chance per item when the list wins. All
artifacts in this list have no magic restriction — they are gated purely by
whatever magic requirement the calling entry imposed.
Total weight: 100
| Entry | chance | Probability |
|---|---|---|
list NONE | 20 | 20.0 % |
arch elven_bow | 5 | 5.0 % |
arch helmet_of_brilliance | 5 | 5.0 % |
arch holy_avenger | 5 | 5.0 % |
arch darkblade | 5 | 5.0 % |
arch excalibur | 5 | 5.0 % |
arch stormbringer | 5 | 5.0 % |
arch mournblade | 5 | 5.0 % |
arch defender | 5 | 5.0 % |
arch speedboots | 5 | 5.0 % |
arch girdle_str | 5 | 5.0 % |
arch girdle_con | 5 | 5.0 % |
arch girdle_strcon | 5 | 5.0 % |
arch gauntlets_str | 5 | 5.0 % |
arch gauntlets_dex | 5 | 5.0 % |
arch bracers_dex | 5 | 5.0 % |
arch gram | 5 | 5.0 % |
9.23 random_scroll
A scroll-focused list weighted so that single scrolls are far more common than
multi-scroll stacks. The five scroll_new entries at increasing nrof
with decreasing weight create a graduated rarity curve. The eleven weapon- and
armour-improvement scrolls each have only 1 ticket — they are very rare
individually, though their combined weight (11) is significant relative to the
total.
Total weight: 186
| Entry | nrof | chance | Probability |
|---|---|---|---|
arch scroll_new | 5 | 10 | 5.4 % |
arch scroll_new | 4 | 20 | 10.8 % |
arch scroll_new | 3 | 30 | 16.1 % |
arch scroll_new | 2 | 40 | 21.5 % |
arch scroll_new | 1 | 60 | 32.3 % |
arch prepare_weapon | — | 1 | 0.5 % |
arch improve_cha | — | 1 | 0.5 % |
arch improve_con | — | 1 | 0.5 % |
arch improve_damage | — | 1 | 0.5 % |
arch improve_dex | — | 1 | 0.5 % |
arch improve_enchantment | — | 1 | 0.5 % |
arch improve_int | — | 1 | 0.5 % |
arch improve_pow | — | 1 | 0.5 % |
arch improve_str | — | 1 | 0.5 % |
arch improve_weight | — | 1 | 0.5 % |
arch improve_wis | — | 1 | 0.5 % |
list random_knowledge | — | 7 | 3.8 % |
arch ench_armour | — | 3 | 1.6 % |
list random_read | — | 5 | 2.7 % |
9.24 random_wands
Used by shops and monster drops to pick a magic device. Wands dominate
overwhelmingly at 72.0 %. Staves are a distant second. rod_heavy and
ring_spell are extremely unlikely at under 1 % each.
Total weight: 132
| Entry | chance | Probability |
|---|---|---|
arch wand | 95 | 72.0 % |
arch staff | 30 | 22.7 % |
arch rod_light | 5 | 3.8 % |
arch rod_heavy | 1 | 0.8 % |
arch ring_spell | 1 | 0.8 % |
9.25 random_books
Used by shops and high-value drops. Cleric spell books are the most common
(23.5 %). All arcane school books (evocation, pyromancy, sorcery, summoning)
share equal weight at 17.6 % each. random_read (non-spell readable items)
is the rarest at 5.9 %.
Total weight: 85
| Entry | chance | Probability |
|---|---|---|
arch cleric_book | 20 | 23.5 % |
arch evoker_book | 15 | 17.6 % |
arch pyro_book | 15 | 17.6 % |
arch sorcerer_book | 15 | 17.6 % |
arch summoner_book | 15 | 17.6 % |
list random_read | 5 | 5.9 % |
9.26 random_read
Picks a generic readable item. Clamped books and scrolls share the highest weight (28.3 % each). Quartos are the rarest.
Total weight: 230
| Entry | chance | Probability |
|---|---|---|
arch tome | 45 | 19.6 % |
arch book_clasp | 65 | 28.3 % |
arch scroll | 65 | 28.3 % |
arch scroll_2 | 35 | 15.2 % |
arch quarto | 20 | 8.7 % |
9.27 random_stone
Generates stone and raw geological material. Field stone is the most common
(31.3 %). Gold nuggets (largenugget) are rare; small nuggets and mountain
stone are equal at 18.8 % each.
Total weight: 80
| Entry | nrof | chance | Probability |
|---|---|---|---|
arch mountain_stone | 3 | 15 | 18.8 % |
arch river_stone | 6 | 20 | 25.0 % |
arch field_stone | 6 | 25 | 31.3 % |
arch largenugget | 3 | 5 | 6.3 % |
arch smallnugget | 5 | 15 | 18.8 % |
9.28 random_inorganic
A top-level category picker for raw materials. Stones (38.8 %) and minerals
(34.0 %) are the dominant categories. Plain rock (rock2) fills the gap.
Ore is very rare at 2.9 %.
Total weight: 103
| Entry | chance | Probability |
|---|---|---|
list random_minerals | 35 | 34.0 % |
list random_stone | 40 | 38.8 % |
arch rock2 | 25 | 24.3 % |
list random_ore | 3 | 2.9 % |
9.29 random_minerals
Selects a mineral reagent for alchemy or crafting. Salt is the most abundant
(21.4 %). Gold nuggets (largenugget) are the rarest at 2.9 %.
Total weight: 70
| Entry | nrof | chance | Probability |
|---|---|---|---|
arch largenugget | 3 | 2 | 2.9 % |
arch smallnugget | 5 | 5 | 7.1 % |
arch gypsum | 3 | 10 | 14.3 % |
arch pyrite | 3 | 10 | 14.3 % |
arch cinnabar | 2 | 8 | 11.4 % |
arch salt | 5 | 15 | 21.4 % |
arch phosphorus | 4 | 10 | 14.3 % |
arch sulphur | 4 | 10 | 14.3 % |
9.30 random_spells
A compact list used to populate spell-carrying containers. A scroll_new
(stack of 3) is the most likely result. Wands, staves, and spell books share
the remaining weight.
Total weight: 35
| Entry | nrof | chance | Probability |
|---|---|---|---|
arch scroll_new | 3 | 15 | 42.9 % |
arch wand | — | 10 | 28.6 % |
arch staff | — | 5 | 14.3 % |
list random_books | — | 5 | 14.3 % |
9.31 random_talisman
Picks a talisman or ring. Plain rings are most likely at 50 %, amulets at
37.5 %. The talisman sub-list and special_uncommon each hold only
6.3 %.
Total weight: 80
| Entry | chance | Probability |
|---|---|---|
arch ring | 40 | 50.0 % |
arch amulet | 30 | 37.5 % |
list talisman | 5 | 6.3 % |
list special_uncommon | 5 | 6.3 % |
9.32 random_artifact
A simple two-entry picker that delegates entirely to sub-lists. Uncommon artifacts are twice as likely as rare ones.
Total weight: 15
| Entry | chance | Probability |
|---|---|---|
list uncommon_artifacts | 10 | 66.7 % |
list rare_artifacts | 5 | 33.3 % |
9.33 random_ore
Mining loot list. Rubble dominates at 24.8 %. Precious metals follow an inverse-rarity gradient from zinc (14.9 %) down to platinum (0.5 %). Stone and mineral sub-lists provide variety at 2.5 % and 2.0 % respectively.
Total weight: 202
| Entry | chance | Probability |
|---|---|---|
arch rubble | 50 | 24.8 % |
arch rock2 | 10 | 5.0 % |
arch zincore | 30 | 14.9 % |
arch copperore | 30 | 14.9 % |
arch leadore | 25 | 12.4 % |
arch tinore | 20 | 9.9 % |
arch ironore | 15 | 7.4 % |
arch silverore | 9 | 4.5 % |
arch goldore | 3 | 1.5 % |
arch platore | 1 | 0.5 % |
list random_stone | 5 | 2.5 % |
list random_minerals | 4 | 2.0 % |
9.34 uncommon_items
Miscellaneous unusual items. list NONE holds the largest single share
(37.1 %), meaning over one-third of rolls produce nothing — a deliberate
mechanism to keep these items infrequent. Horns and rods are the most likely
actual items. ring_spell is the rarest live outcome at 1.6 %.
Total weight: 62
| Entry | magic req | chance | Probability |
|---|---|---|---|
arch horn | — | 10 | 16.1 % |
arch horn2 | — | 10 | 16.1 % |
arch crown | ≥ 3 | 3 | 4.8 % |
arch rod_light | — | 10 | 16.1 % |
arch rod_heavy | — | 5 | 8.1 % |
arch ring_spell | — | 1 | 1.6 % |
list NONE | — | 23 | 37.1 % |
9.35 restoration_potions
The terminal potion list for restorative effects. Minor potions are most
common (42.9 %). Full potion_restoration and major potions share the
lowest weight at 14.3 % each.
Total weight: 35
| Entry | chance | Probability |
|---|---|---|
arch minor_potion_restoration | 15 | 42.9 % |
arch medium_potion_restoration | 10 | 28.6 % |
arch major_potion_restoration | 5 | 14.3 % |
arch potion_restoration | 5 | 14.3 % |
—
Generated from crossfire-crossfire-arch and crossfire-crossfire-server source.
