Skip to content

items/items.ron

Every item: food, tools, clothing, bags, weapons. Read by the game’s rules: a change here changes how the game plays, and a world remembers the content it was made with.

File: assets/data/items/items.ron

Items: everything a survivor can carry. Schema: zombye_sim::items::ItemDef (validated on load; unknown fields are refused). All names and numbers are our own, using real-world weights and sizes so a new item’s numbers can be guessed without a table.

id lowercase letters, digits and _ (saves and loot tables name items by it)
category Food, Drink, Medical, Tool, Material, Clothing, Bag, Weapon, Light or Junk
weight_kg counts in full wherever it is carried (hands, pockets, bags, worn)
volume_l room it takes in pockets, bags and furniture (held and worn items take none)
stack how many share one slot (default 1)
tags for rules that recipes and actions check: needs_tin_opener, opens_tins, cuts,
rippable, fire, fuel, light_source, junk, bandage, clean, disinfects, ...
two_handed held in both hands (default false)
weapon Some("id") of a weapon in weapons.ron: the item swings like it. Every weapon there
(but bare hands) should have an item here; one without gets a plain 1 kg item.
food, drink Some((hunger: 0..1 restored, thirst: 0..1 restored (negative: makes you thirsty),
uses: goes, spoils_hours: Some(game hours) or None, poison: 0..1 chance of food
poisoning each go eaten as it is: raw meat and eggs, cook them first)).
medical Some((uses: n)). What it treats comes with #9 and #10 (by tag).
bag Some((capacity_l: room it adds, carried: Back | Shoulder | Hand, slow: 0..1
speed lost while carried))
clothing Some((covers: [Head, Torso, Arms, Hands, Legs, Feet], takes: [Face, HeadTop, Neck],
protection: 0..1, layer: Base | Mid | Outer, hood: false)). Two worn items can't share
a body part or a place they take on one layer. Accessories (glasses, hats, scarves)
take a place; a hood covers the head while nothing is on the head top.
model Some("name"): what the client draws while it's worn, held or on your back
(assets/models/wearables/<name>.glb); none (or no file): a grey-box in its colour.
light Some((radius_m, hours)): a light source (comes with night lighting).
color grey-box colour on the floor, linear-ish RGB 0..1

The file is a list of ItemDef, each in round brackets.

One kind of item. Weights in kg (they count in full wherever the item is carried), volumes in litres (room taken in pockets, bags and furniture). All numbers are ours.

Field Type What it is
id String
name String
category ItemCategory
weight_kg f32
volume_l f32
stack u16 How many share one slot.
tags Vec<String> For rules that recipes and actions check (opens_tins, rippable, fire, …).
two_handed bool Held in both hands.
one_hand bool A two-handed thing that can be swung in one hand while the other holds something, weaker and slower (crate::CombatTuning::one_hand_power). Only read when two_handed.
weapon Option<String> The weapon (id in weapons.ron) it swings as.
food Option<Consumable>
drink Option<Consumable>
medical Option<MedicalDef>
bag Option<BagDef>
clothing Option<ClothingDef>
light Option<LightDef>
model Option<String> The model the client draws while it’s worn, held or carried on the back: a wearable’s file name without .glb (assets/models/wearables/<model>.glb). None, or a model the client doesn’t have: a grey-box in its colour.
color (f32, f32, f32) Grey-box colour (linear-ish RGB 0..1).

What an item is, broadly: drives which slot it goes to and what using it does.

Value What it means
Food
Drink
Medical
Tool
Material
Clothing
Bag
Weapon
Light
Junk Everyday clutter: light and mostly useless.

Something eaten or drunk (food / drink). Hunger and thirst are on a 0..1 scale (taken off the need per go; negative makes it worse; see crate::needs).

Field Type What it is
hunger f32
thirst f32
uses u8 How many goes one item lasts.
spoils_hours Option<f32> Game hours until it goes off (None: keeps).
poison f32 Chance of food poisoning each go, eaten as it is (raw meat, raw eggs: cook them first, crate::fire). On top of going off.

A medical item. What it treats is in its tags (bandage, clean, disinfects, …); the treatments come with #9 and #10.

Field Type What it is
uses u8
Field Type What it is
capacity_l f32 Room it adds (litres).
carried BagCarry
slow f32 Share of speed lost while carrying it (an awkward strap), 0..1.

How a bag is carried: which slot it goes in.

Value What it means
Back
Shoulder
Hand In a hand (either).

Clothing and accessories: worn (crate::inventory::Place::Worn), two of them never sharing a body part or a WearSlot on one layer.

Field Type What it is
covers Vec<BodyPart> Body regions it covers (and protects).
takes Vec<WearSlot> Accessory places it takes (glasses the face, a hat the head top).
protection f32 Chance (0..1) a strike on a covered part only bruises; layers combine.
layer Layer
hood bool Has a hood: up over a bare head (it covers the head too), down while anything is worn on the head top (a hat can’t go on with a hood up, so putting one on pulls the hood down).

A region of the body clothing covers: both arms at once, say. Wounds land on finer parts (crate::health::Part, left and right apart), each in one of these.

Value What it means
Head
Torso
Arms
Hands
Legs
Feet

A place on the body an accessory takes, beside the regions clothing covers: glasses on the face, a hat on the head top, a scarf round the neck. Two worn items can’t take one on one layer.

Value What it means
Face
HeadTop
Neck

Which layer of clothing: two worn items can’t share a body part on the same layer.

Value What it means
Base
Mid
Outer
Field Type What it is
radius_m f32
hours f32 Game hours of light from one charge (batteries, a candle’s length).

104 entries. Columns are the fields short enough for a table; the rest are in the file below.

id name category color one_hand stack tags two_handed volume_l weight_kg
“tinned_beans” “Tin of beans” “Food” [0.55, 0.55, 0.58] false 6 [“needs_tin_opener”] false 0.4 0.45
“tinned_soup” “Tin of soup” “Food” [0.6, 0.35, 0.3] false 6 [“needs_tin_opener”] false 0.4 0.42
“tinned_fruit” “Tin of fruit” “Food” [0.75, 0.6, 0.3] false 6 [] false 0.4 0.43
“crackers” “Box of crackers” “Food” [0.8, 0.65, 0.4] false 4 [] false 0.8 0.25
“peanut_butter” “Jar of peanut butter” “Food” [0.6, 0.42, 0.25] false 4 [] false 0.4 0.4
“cereal” “Box of cereal” “Food” [0.85, 0.7, 0.3] false 2 [] false 2.5 0.5
“chocolate_bar” “Chocolate bar” “Food” [0.35, 0.2, 0.12] false 10 [] false 0.05 0.05
“crisps” “Bag of crisps” “Food” [0.85, 0.2, 0.2] false 6 [] false 0.6 0.1
“bread” “Loaf of bread” “Food” [0.78, 0.6, 0.38] false 2 [] false 2 0.5
“apple” “Apple” “Food” [0.7, 0.1, 0.08] false 8 [] false 0.2 0.18
“cheese” “Block of cheese” “Food” [0.92, 0.8, 0.35] false 4 [] false 0.25 0.25
“raw_chicken” “Raw chicken” “Food” [0.93, 0.78, 0.72] false 2 [“raw”] false 0.7 0.6
“cooked_chicken” “Cooked chicken” “Food” [0.78, 0.55, 0.3] false 2 [] false 0.7 0.5
“sausages” “Pack of sausages” “Food” [0.8, 0.5, 0.48] false 2 [“raw”] false 0.5 0.45
“cooked_sausages” “Cooked sausages” “Food” [0.55, 0.3, 0.2] false 2 [] false 0.5 0.4
“egg” “Egg” “Food” [0.95, 0.9, 0.8] false 12 [“raw”] false 0.08 0.06
“scrambled_eggs” “Scrambled eggs” “Food” [0.98, 0.85, 0.4] false 2 [] false 0.2 0.12
“dry_pasta” “Bag of pasta” “Food” [0.93, 0.83, 0.55] false 4 [] false 0.8 0.5
“cooked_pasta” “Pot of pasta” “Food” [0.95, 0.88, 0.62] false 1 [] false 1.2 1.1
“dry_rice” “Bag of rice” “Food” [0.96, 0.95, 0.9] false 4 [] false 0.6 0.5
“cooked_rice” “Pot of rice” “Food” [0.97, 0.96, 0.92] false 1 [] false 1.2 1.1
“hot_soup” “Hot soup” “Food” [0.7, 0.3, 0.2] false 1 [] false 0.4 0.42
“hot_beans” “Hot beans” “Food” [0.6, 0.35, 0.2] false 1 [] false 0.4 0.45
“water_bottle” “Bottle of water” “Drink” [0.55, 0.75, 0.9] false 4 [“refillable”] false 1 1.05
“empty_bottle” “Empty bottle” “Junk” [0.7, 0.8, 0.85] false 4 [“refillable”] false 1 0.05
“soda_can” “Can of soda” “Drink” [0.75, 0.15, 0.15] false 6 [] false 0.35 0.35
“juice_carton” “Carton of juice” “Drink” [0.95, 0.6, 0.15] false 3 [] false 1 1.05
“milk” “Bottle of milk” “Drink” [0.95, 0.95, 0.92] false 3 [] false 1 1.05
“plasters” “Box of plasters” “Medical” [0.85, 0.7, 0.6] false 5 [“plaster”] false 0.1 0.05
“gauze” “Gauze roll” “Medical” [0.95, 0.95, 0.95] false 5 [“bandage”, “clean”] false 0.15 0.08
“rag” “Rag” “Medical” [0.6, 0.55, 0.45] false 10 [“bandage”] false 0.1 0.05
“clean_rag” “Clean rag” “Medical” [0.85, 0.85, 0.8] false 10 [“bandage”, “clean”] false 0.1 0.05
“antiseptic” “Bottle of antiseptic” “Medical” [0.55, 0.3, 0.2] false 3 [“disinfects”] false 0.3 0.3
“painkillers” “Painkillers” “Medical” [0.9, 0.9, 0.95] false 5 [“painkiller”] false 0.05 0.05
“antibiotics” “Antibiotics” “Medical” [0.9, 0.85, 0.5] false 5 [“antibiotic”] false 0.05 0.05
“sewing_kit” “Sewing kit” “Medical” [0.6, 0.4, 0.6] false 1 [“stitches”] false 0.15 0.1
“tin_opener” “Tin opener” “Tool” [0.6, 0.6, 0.62] false 1 [“opens_tins”] false 0.1 0.15
“screwdriver” “Screwdriver” “Tool” [0.85, 0.75, 0.2] false 1 [] false 0.1 0.15
“scissors” “Scissors” “Tool” [0.2, 0.3, 0.7] false 1 [“cuts”] false 0.1 0.1
“saw” “Hand saw” “Tool” [0.65, 0.65, 0.68] false 1 [“saws”] false 1.2 0.6
“lighter” “Lighter” “Tool” [0.8, 0.2, 0.5] false 5 [“fire”] false 0.02 0.03
“cooking_pot” “Cooking pot” “Tool” [0.55, 0.56, 0.58] false 1 [“cookware”, “pot”] false 4 1.3
“firewood” “Firewood” “Material” [0.45, 0.32, 0.2] false 4 [“wood”, “fuel”] false 1.2 1.5
“newspaper” “Newspaper” “Junk” [0.82, 0.8, 0.74] false 5 [“junk”, “fuel”] false 0.4 0.3
“matches” “Box of matches” “Tool” [0.85, 0.3, 0.2] false 10 [“fire”] false 0.03 0.02
“duct_tape” “Roll of duct tape” “Tool” [0.55, 0.57, 0.6] false 4 [] false 0.3 0.3
“nails” “Box of nails” “Material” [0.45, 0.45, 0.47] false 5 [] false 0.2 0.5
“nail” “Nail” “Material” [0.55, 0.55, 0.57] false 100 [] false 0.004 0.01
“rope” “Rope” “Material” [0.7, 0.6, 0.4] false 2 [“restrains”] false 1.5 0.8
“cable_tie” “Cable tie” “Material” [0.12, 0.12, 0.13] false 10 [“restrains”, “ties_once”] false 0.01 0.01
“roller_blind” “Roller blind” “Tool” [0.85, 0.81, 0.7] false 1 [“blind”] false 2.5 1.1
“flashlight” “Flashlight” “Light” [0.15, 0.15, 0.17] false 1 [“light_source”] false 0.3 0.25
“batteries” “Batteries” “Light” [0.3, 0.5, 0.3] false 8 [] false 0.05 0.1
“candle” “Candle” “Light” [0.95, 0.92, 0.8] false 6 [“light_source”, “needs_fire”] false 0.1 0.1
“bed_sheet” “Bed sheet” “Material” [0.85, 0.85, 0.9] false 2 [“rippable”] false 1.5 0.6
“towel” “Towel” “Material” [0.4, 0.6, 0.75] false 2 [“rippable”] false 1.5 0.5
“log” “Log” “Material” [0.42, 0.3, 0.19] false 1 [“wood”, “log”, “fuel”] true 9 6
“thread” “Reel of thread” “Material” [0.85, 0.85, 0.85] false 10 [] false 0.02 0.02
“t_shirt” “T-shirt” “Clothing” [0.54, 0.29, 0.26] false 1 [“rippable”] false 0.5 0.15
“jumper” “Jumper” “Clothing” [0.24, 0.29, 0.38] false 1 [“rippable”] false 1.2 0.4
“hoodie” “Hoodie” “Clothing” [0.33, 0.38, 0.26] false 1 [“rippable”] false 1.5 0.5
“jeans” “Jeans” “Clothing” [0.29, 0.35, 0.45] false 1 [“rippable”] false 1.2 0.6
“leather_jacket” “Leather jacket” “Clothing” [0.25, 0.17, 0.13] false 1 [] false 3 1.6
“work_gloves” “Work gloves” “Clothing” [0.6, 0.48, 0.31] false 1 [] false 0.3 0.2
“trainers” “Trainers” “Clothing” [0.85, 0.84, 0.79] false 1 [] false 2 0.7
“work_boots” “Work boots” “Clothing” [0.35, 0.26, 0.19] false 1 [] false 3 1.4
“glasses” “Glasses” “Clothing” [0.05, 0.05, 0.06] false 1 [] false 0.1 0.03
“baseball_cap” “Baseball cap” “Clothing” [0.48, 0.23, 0.2] false 1 [] false 0.5 0.1
“beanie” “Beanie” “Clothing” [0.21, 0.23, 0.26] false 1 [“rippable”] false 0.3 0.08
“woolly_hat” “Woolly hat” “Clothing” [0.6, 0.45, 0.26] false 1 [“rippable”] false 0.5 0.12
“scarf” “Scarf” “Clothing” [0.42, 0.18, 0.17] false 1 [“rippable”] false 0.6 0.2
“dust_mask” “Dust mask” “Clothing” [0.86, 0.85, 0.82] false 5 [] false 0.1 0.01
“bandana” “Bandana” “Clothing” [0.54, 0.23, 0.2] false 1 [“rippable”] false 0.1 0.03
“balaclava” “Balaclava” “Clothing” [0.17, 0.17, 0.18] false 1 [“rippable”] false 0.3 0.08
“plastic_bag” “Plastic bag” “Bag” [0.83, 0.82, 0.78] false 10 [] false 0.05 0.02
“tote_bag” “Tote bag” “Bag” [0.7, 0.65, 0.52] false 1 [] false 0.5 0.2
“school_backpack” “School backpack” “Bag” [0.27, 0.38, 0.49] false 1 [] false 1 0.5
“duffel_bag” “Duffel bag” “Bag” [0.31, 0.34, 0.25] false 1 [] false 2 1
“hiking_pack” “Hiking rucksack” “Bag” [0.54, 0.33, 0.2] false 1 [] false 3 1.6
“kitchen_knife” “Kitchen knife” “Weapon” [0.75, 0.75, 0.78] false 1 [“cuts”] false 0.3 0.2
“claw_hammer” “Claw hammer” “Weapon” [0.45, 0.3, 0.2] false 1 [“hammers”, “pries”] false 0.5 0.6
“frying_pan” “Frying pan” “Weapon” [0.15, 0.15, 0.16] false 1 [“cookware”] false 2 1.2
“baseball_bat” “Baseball bat” “Weapon” [0.7, 0.55, 0.35] true 1 [] true 2.5 1
“golf_club” “Golf club” “Weapon” [0.75, 0.75, 0.8] true 1 [] true 2 0.4
“wooden_plank” “Wooden plank” “Weapon” [0.6, 0.45, 0.28] true 1 [“wood”, “fuel”] true 4 2
“crowbar” “Crowbar” “Weapon” [0.5, 0.15, 0.12] false 1 [“pries”] false 1.2 1.5
“hatchet” “Hatchet” “Weapon” [0.5, 0.36, 0.22] false 1 [“chops”] false 1 0.9
“fire_axe” “Fire axe” “Weapon” [0.75, 0.15, 0.1] false 1 [“chops”] true 4 2.5
“pistol” “Pistol” “Weapon” [0.16, 0.16, 0.18] false 1 [] false 0.6 0.9
“pistol_magazine” “Pistol magazine” “Tool” [0.2, 0.2, 0.22] false 1 [“ammo”, “magazine”] false 0.15 0.25
“pistol_rounds” “Pistol round” “Material” [0.72, 0.56, 0.25] false 50 [“ammo”] false 0.004 0.012
“hunting_rifle” “Hunting rifle” “Weapon” [0.36, 0.24, 0.14] false 1 [] true 6 3.4
“rifle_rounds” “Rifle round” “Material” [0.75, 0.6, 0.3] false 20 [“ammo”] false 0.01 0.025
“shotgun” “Shotgun” “Weapon” [0.2, 0.18, 0.16] false 1 [] true 6 3.2
“shotgun_shells” “Shotgun shell” “Material” [0.7, 0.14, 0.12] false 25 [“ammo”] false 0.03 0.045
“mug” “Mug” “Junk” [0.9, 0.9, 0.85] false 4 [“junk”] false 0.4 0.3
“magazine” “Magazine” “Junk” [0.8, 0.4, 0.5] false 5 [“junk”, “fuel”] false 0.3 0.2
“tv_remote” “TV remote” “Junk” [0.1, 0.1, 0.1] false 1 [“junk”] false 0.15 0.15
“picture_frame” “Picture frame” “Junk” [0.6, 0.5, 0.35] false 1 [“junk”] false 0.6 0.4
“pen” “Pen” “Junk” [0.1, 0.2, 0.6] false 10 [“junk”] false 0.01 0.01
“umbrella” “Umbrella” “Junk” [0.15, 0.15, 0.2] false 1 [“junk”] false 1 0.5
“baking_tray” “Baking tray” “Junk” [0.5, 0.5, 0.52] false 1 [“junk”, “cookware”] false 1.5 0.6
“alarm_clock” “Alarm clock” “Junk” [0.8, 0.3, 0.2] false 1 [“junk”] false 0.4 0.3
“cushion” “Cushion” “Junk” [0.5, 0.3, 0.45] false 1 [“junk”] false 3 0.4
The whole file as shipped
// Items: everything a survivor can carry. Schema: zombye_sim::items::ItemDef (validated on load;
// unknown fields are refused). All names and numbers are our own, using real-world weights and
// sizes so a new item's numbers can be guessed without a table.
//
// id lowercase letters, digits and _ (saves and loot tables name items by it)
// category Food, Drink, Medical, Tool, Material, Clothing, Bag, Weapon, Light or Junk
// weight_kg counts in full wherever it is carried (hands, pockets, bags, worn)
// volume_l room it takes in pockets, bags and furniture (held and worn items take none)
// stack how many share one slot (default 1)
// tags for rules that recipes and actions check: needs_tin_opener, opens_tins, cuts,
// rippable, fire, fuel, light_source, junk, bandage, clean, disinfects, ...
// two_handed held in both hands (default false)
// weapon Some("id") of a weapon in weapons.ron: the item swings like it. Every weapon there
// (but bare hands) should have an item here; one without gets a plain 1 kg item.
// food, drink Some((hunger: 0..1 restored, thirst: 0..1 restored (negative: makes you thirsty),
// uses: goes, spoils_hours: Some(game hours) or None, poison: 0..1 chance of food
// poisoning each go eaten as it is: raw meat and eggs, cook them first)).
// medical Some((uses: n)). What it treats comes with #9 and #10 (by tag).
// bag Some((capacity_l: room it adds, carried: Back | Shoulder | Hand, slow: 0..1
// speed lost while carried))
// clothing Some((covers: [Head, Torso, Arms, Hands, Legs, Feet], takes: [Face, HeadTop, Neck],
// protection: 0..1, layer: Base | Mid | Outer, hood: false)). Two worn items can't share
// a body part or a place they take on one layer. Accessories (glasses, hats, scarves)
// take a place; a hood covers the head while nothing is on the head top.
// model Some("name"): what the client draws while it's worn, held or on your back
// (assets/models/wearables/<name>.glb); none (or no file): a grey-box in its colour.
// light Some((radius_m, hours)): a light source (comes with night lighting).
// color grey-box colour on the floor, linear-ish RGB 0..1
[
// ---- Food ----------------------------------------------------------------------------------
(id: "tinned_beans", name: "Tin of beans", category: Food, weight_kg: 0.45, volume_l: 0.4, stack: 6, tags: ["needs_tin_opener"],
food: Some((hunger: 0.30, thirst: -0.02)), color: (0.55, 0.55, 0.58)),
(id: "tinned_soup", name: "Tin of soup", category: Food, weight_kg: 0.42, volume_l: 0.4, stack: 6, tags: ["needs_tin_opener"],
food: Some((hunger: 0.22, thirst: 0.08)), color: (0.6, 0.35, 0.3)),
(id: "tinned_fruit", name: "Tin of fruit", category: Food, weight_kg: 0.43, volume_l: 0.4, stack: 6,
food: Some((hunger: 0.15, thirst: 0.10)), color: (0.75, 0.6, 0.3)),
(id: "crackers", name: "Box of crackers", category: Food, weight_kg: 0.25, volume_l: 0.8, stack: 4,
food: Some((hunger: 0.18, thirst: -0.05)), color: (0.8, 0.65, 0.4)),
(id: "peanut_butter", name: "Jar of peanut butter", category: Food, weight_kg: 0.4, volume_l: 0.4, stack: 4,
food: Some((hunger: 0.35, uses: 4)), color: (0.6, 0.42, 0.25)),
(id: "cereal", name: "Box of cereal", category: Food, weight_kg: 0.5, volume_l: 2.5, stack: 2,
food: Some((hunger: 0.25, uses: 3)), color: (0.85, 0.7, 0.3)),
(id: "chocolate_bar", name: "Chocolate bar", category: Food, weight_kg: 0.05, volume_l: 0.05, stack: 10,
food: Some((hunger: 0.06)), color: (0.35, 0.2, 0.12)),
(id: "crisps", name: "Bag of crisps", category: Food, weight_kg: 0.1, volume_l: 0.6, stack: 6,
food: Some((hunger: 0.08, thirst: -0.03)), color: (0.85, 0.2, 0.2)),
(id: "bread", name: "Loaf of bread", category: Food, weight_kg: 0.5, volume_l: 2.0, stack: 2,
food: Some((hunger: 0.30, uses: 3, spoils_hours: Some(48.0))), color: (0.78, 0.6, 0.38)),
(id: "apple", name: "Apple", category: Food, weight_kg: 0.18, volume_l: 0.2, stack: 8,
food: Some((hunger: 0.08, thirst: 0.04, spoils_hours: Some(120.0))), color: (0.7, 0.1, 0.08)),
(id: "cheese", name: "Block of cheese", category: Food, weight_kg: 0.25, volume_l: 0.25, stack: 4,
food: Some((hunger: 0.20, uses: 2, spoils_hours: Some(48.0))), color: (0.92, 0.8, 0.35)),
// ---- Food to cook (recipes.ron: over a lit campfire or a working stove) ----------------------
// Raw meat and eggs can be eaten as they are, at a good chance of food poisoning.
(id: "raw_chicken", name: "Raw chicken", category: Food, weight_kg: 0.6, volume_l: 0.7, stack: 2, tags: ["raw"],
food: Some((hunger: 0.30, uses: 2, spoils_hours: Some(36.0), poison: 0.6)), color: (0.93, 0.78, 0.72)),
(id: "cooked_chicken", name: "Cooked chicken", category: Food, weight_kg: 0.5, volume_l: 0.7, stack: 2,
food: Some((hunger: 0.45, uses: 2, spoils_hours: Some(48.0))), color: (0.78, 0.55, 0.3)),
(id: "sausages", name: "Pack of sausages", category: Food, weight_kg: 0.45, volume_l: 0.5, stack: 2, tags: ["raw"],
food: Some((hunger: 0.25, uses: 2, spoils_hours: Some(72.0), poison: 0.35)), color: (0.8, 0.5, 0.48)),
(id: "cooked_sausages", name: "Cooked sausages", category: Food, weight_kg: 0.4, volume_l: 0.5, stack: 2,
food: Some((hunger: 0.35, uses: 2, spoils_hours: Some(48.0))), color: (0.55, 0.3, 0.2)),
(id: "egg", name: "Egg", category: Food, weight_kg: 0.06, volume_l: 0.08, stack: 12, tags: ["raw"],
food: Some((hunger: 0.05, spoils_hours: Some(240.0), poison: 0.15)), color: (0.95, 0.9, 0.8)),
(id: "scrambled_eggs", name: "Scrambled eggs", category: Food, weight_kg: 0.12, volume_l: 0.2, stack: 2,
food: Some((hunger: 0.18, spoils_hours: Some(12.0))), color: (0.98, 0.85, 0.4)),
// Dry, it keeps for ever and does little for you; boiled in a pot of water it's a meal.
(id: "dry_pasta", name: "Bag of pasta", category: Food, weight_kg: 0.5, volume_l: 0.8, stack: 4,
food: Some((hunger: 0.06, thirst: -0.06)), color: (0.93, 0.83, 0.55)),
(id: "cooked_pasta", name: "Pot of pasta", category: Food, weight_kg: 1.1, volume_l: 1.2, stack: 1,
food: Some((hunger: 0.35, thirst: 0.04, uses: 3, spoils_hours: Some(36.0))), color: (0.95, 0.88, 0.62)),
(id: "dry_rice", name: "Bag of rice", category: Food, weight_kg: 0.5, volume_l: 0.6, stack: 4,
food: Some((hunger: 0.05, thirst: -0.06)), color: (0.96, 0.95, 0.9)),
(id: "cooked_rice", name: "Pot of rice", category: Food, weight_kg: 1.1, volume_l: 1.2, stack: 1,
food: Some((hunger: 0.33, thirst: 0.04, uses: 3, spoils_hours: Some(36.0))), color: (0.97, 0.96, 0.92)),
(id: "hot_soup", name: "Hot soup", category: Food, weight_kg: 0.42, volume_l: 0.4, stack: 1,
food: Some((hunger: 0.26, thirst: 0.12, spoils_hours: Some(8.0))), color: (0.7, 0.3, 0.2)),
(id: "hot_beans", name: "Hot beans", category: Food, weight_kg: 0.45, volume_l: 0.4, stack: 1,
food: Some((hunger: 0.36, thirst: -0.02, spoils_hours: Some(8.0))), color: (0.6, 0.35, 0.2)),
// ---- Drink ---------------------------------------------------------------------------------
(id: "water_bottle", name: "Bottle of water", category: Drink, weight_kg: 1.05, volume_l: 1.0, stack: 4, tags: ["refillable"],
drink: Some((thirst: 0.5, uses: 2)), color: (0.55, 0.75, 0.9)),
(id: "empty_bottle", name: "Empty bottle", category: Junk, weight_kg: 0.05, volume_l: 1.0, stack: 4, tags: ["refillable"],
color: (0.7, 0.8, 0.85)),
(id: "soda_can", name: "Can of soda", category: Drink, weight_kg: 0.35, volume_l: 0.35, stack: 6,
drink: Some((thirst: 0.25, hunger: 0.03)), color: (0.75, 0.15, 0.15)),
(id: "juice_carton", name: "Carton of juice", category: Drink, weight_kg: 1.05, volume_l: 1.0, stack: 3,
drink: Some((thirst: 0.35, hunger: 0.05, uses: 3, spoils_hours: Some(96.0))), color: (0.95, 0.6, 0.15)),
(id: "milk", name: "Bottle of milk", category: Drink, weight_kg: 1.05, volume_l: 1.0, stack: 3,
drink: Some((thirst: 0.35, hunger: 0.08, uses: 3, spoils_hours: Some(72.0))), color: (0.95, 0.95, 0.92)),
// ---- Medical -------------------------------------------------------------------------------
(id: "plasters", name: "Box of plasters", category: Medical, weight_kg: 0.05, volume_l: 0.1, stack: 5, tags: ["plaster"],
medical: Some((uses: 8)), color: (0.85, 0.7, 0.6)),
(id: "gauze", name: "Gauze roll", category: Medical, weight_kg: 0.08, volume_l: 0.15, stack: 5, tags: ["bandage", "clean"],
medical: Some((uses: 3)), color: (0.95, 0.95, 0.95)),
(id: "rag", name: "Rag", category: Medical, weight_kg: 0.05, volume_l: 0.1, stack: 10, tags: ["bandage"],
medical: Some((uses: 1)), color: (0.6, 0.55, 0.45)),
(id: "clean_rag", name: "Clean rag", category: Medical, weight_kg: 0.05, volume_l: 0.1, stack: 10, tags: ["bandage", "clean"],
medical: Some((uses: 1)), color: (0.85, 0.85, 0.8)),
(id: "antiseptic", name: "Bottle of antiseptic", category: Medical, weight_kg: 0.3, volume_l: 0.3, stack: 3, tags: ["disinfects"],
medical: Some((uses: 10)), color: (0.55, 0.3, 0.2)),
(id: "painkillers", name: "Painkillers", category: Medical, weight_kg: 0.05, volume_l: 0.05, stack: 5, tags: ["painkiller"],
medical: Some((uses: 12)), color: (0.9, 0.9, 0.95)),
(id: "antibiotics", name: "Antibiotics", category: Medical, weight_kg: 0.05, volume_l: 0.05, stack: 5, tags: ["antibiotic"],
medical: Some((uses: 7)), color: (0.9, 0.85, 0.5)),
(id: "sewing_kit", name: "Sewing kit", category: Medical, weight_kg: 0.1, volume_l: 0.15, tags: ["stitches"],
medical: Some((uses: 6)), color: (0.6, 0.4, 0.6)),
// ---- Tools ---------------------------------------------------------------------------------
(id: "tin_opener", name: "Tin opener", category: Tool, weight_kg: 0.15, volume_l: 0.1, tags: ["opens_tins"], color: (0.6, 0.6, 0.62)),
(id: "screwdriver", name: "Screwdriver", category: Tool, weight_kg: 0.15, volume_l: 0.1, color: (0.85, 0.75, 0.2)),
(id: "scissors", name: "Scissors", category: Tool, weight_kg: 0.1, volume_l: 0.1, tags: ["cuts"], color: (0.2, 0.3, 0.7)),
(id: "saw", name: "Hand saw", category: Tool, weight_kg: 0.6, volume_l: 1.2, tags: ["saws"], color: (0.65, 0.65, 0.68)),
(id: "lighter", name: "Lighter", category: Tool, weight_kg: 0.03, volume_l: 0.02, stack: 5, tags: ["fire"], color: (0.8, 0.2, 0.5)),
// A pot boils pasta and rice; a pot or a pan (or a baking tray) cooks the rest (tag cookware).
(id: "cooking_pot", name: "Cooking pot", category: Tool, weight_kg: 1.3, volume_l: 4.0, tags: ["cookware", "pot"], color: (0.55, 0.56, 0.58)),
// Firewood: the fuel a campfire is built from (planks, magazines and newspapers burn too).
(id: "firewood", name: "Firewood", category: Material, weight_kg: 1.5, volume_l: 1.2, stack: 4, tags: ["wood", "fuel"], color: (0.45, 0.32, 0.2)),
(id: "newspaper", name: "Newspaper", category: Junk, weight_kg: 0.3, volume_l: 0.4, stack: 5, tags: ["junk", "fuel"], color: (0.82, 0.8, 0.74)),
(id: "matches", name: "Box of matches", category: Tool, weight_kg: 0.02, volume_l: 0.03, stack: 10, tags: ["fire"], color: (0.85, 0.3, 0.2)),
(id: "duct_tape", name: "Roll of duct tape", category: Tool, weight_kg: 0.3, volume_l: 0.3, stack: 4, color: (0.55, 0.57, 0.6)),
(id: "nails", name: "Box of nails", category: Material, weight_kg: 0.5, volume_l: 0.2, stack: 5, color: (0.45, 0.45, 0.47)),
// Loose nails, out of a box (a recipe): what boarding up a window or door uses (build.ron).
(id: "nail", name: "Nail", category: Material, weight_kg: 0.01, volume_l: 0.004, stack: 100, color: (0.55, 0.55, 0.57)),
// Restraints (#73): `restrains` ties a survivor's hands; `ties_once` is used up, and has to be cut off.
(id: "rope", name: "Rope", category: Material, weight_kg: 0.8, volume_l: 1.5, stack: 2, tags: ["restrains"], color: (0.7, 0.6, 0.4)),
(id: "cable_tie", name: "Cable tie", category: Material, weight_kg: 0.01, volume_l: 0.01, stack: 10, tags: ["restrains", "ties_once"], color: (0.12, 0.12, 0.13)),
// A roller blind, rolled up: fitted from inside to a window or a glass door (Shift+F, or its menu), it hides the glass when down.
(id: "roller_blind", name: "Roller blind", category: Tool, weight_kg: 1.1, volume_l: 2.5, tags: ["blind"], color: (0.85, 0.81, 0.7)),
// ---- Light ---------------------------------------------------------------------------------
(id: "flashlight", name: "Flashlight", category: Light, weight_kg: 0.25, volume_l: 0.3, tags: ["light_source"],
light: Some((radius_m: 12.0, hours: 6.0)), color: (0.15, 0.15, 0.17)),
(id: "batteries", name: "Batteries", category: Light, weight_kg: 0.1, volume_l: 0.05, stack: 8, color: (0.3, 0.5, 0.3)),
(id: "candle", name: "Candle", category: Light, weight_kg: 0.1, volume_l: 0.1, stack: 6, tags: ["light_source", "needs_fire"],
light: Some((radius_m: 3.0, hours: 4.0)), color: (0.95, 0.92, 0.8)),
// ---- Materials -----------------------------------------------------------------------------
(id: "bed_sheet", name: "Bed sheet", category: Material, weight_kg: 0.6, volume_l: 1.5, stack: 2, tags: ["rippable"], color: (0.85, 0.85, 0.9)),
(id: "towel", name: "Towel", category: Material, weight_kg: 0.5, volume_l: 1.5, stack: 2, tags: ["rippable"], color: (0.4, 0.6, 0.75)),
// A length of trunk from a felled tree (zombye_sim::trees): sawn into planks or split into
// firewood (recipes.ron). Heavy and bulky: a bag, or both hands.
(id: "log", name: "Log", category: Material, weight_kg: 6.0, volume_l: 9.0, two_handed: true, tags: ["wood", "log", "fuel"], color: (0.42, 0.3, 0.19)),
(id: "thread", name: "Reel of thread", category: Material, weight_kg: 0.02, volume_l: 0.02, stack: 10, color: (0.85, 0.85, 0.85)),
// ---- Clothing ------------------------------------------------------------------------------
(id: "t_shirt", name: "T-shirt", category: Clothing, weight_kg: 0.15, volume_l: 0.5, tags: ["rippable"],
clothing: Some((covers: [Torso], protection: 0.05, layer: Base)), model: Some("t_shirt"), color: (0.54, 0.29, 0.26)),
(id: "jumper", name: "Jumper", category: Clothing, weight_kg: 0.4, volume_l: 1.2, tags: ["rippable"],
clothing: Some((covers: [Torso, Arms], protection: 0.15, layer: Mid)), model: Some("jumper"), color: (0.24, 0.29, 0.38)),
(id: "hoodie", name: "Hoodie", category: Clothing, weight_kg: 0.5, volume_l: 1.5, tags: ["rippable"],
clothing: Some((covers: [Torso, Arms], protection: 0.15, layer: Mid, hood: true)), model: Some("hoodie"), color: (0.33, 0.38, 0.26)),
(id: "jeans", name: "Jeans", category: Clothing, weight_kg: 0.6, volume_l: 1.2, tags: ["rippable"],
clothing: Some((covers: [Legs], protection: 0.25, layer: Base)), model: Some("jeans"), color: (0.29, 0.35, 0.45)),
(id: "leather_jacket", name: "Leather jacket", category: Clothing, weight_kg: 1.6, volume_l: 3.0,
clothing: Some((covers: [Torso, Arms], protection: 0.45, layer: Outer)), model: Some("leather_jacket"), color: (0.25, 0.17, 0.13)),
(id: "work_gloves", name: "Work gloves", category: Clothing, weight_kg: 0.2, volume_l: 0.3,
clothing: Some((covers: [Hands], protection: 0.35, layer: Base)), model: Some("work_gloves"), color: (0.6, 0.48, 0.31)),
(id: "trainers", name: "Trainers", category: Clothing, weight_kg: 0.7, volume_l: 2.0,
clothing: Some((covers: [Feet], protection: 0.2, layer: Outer)), model: Some("trainers"), color: (0.85, 0.84, 0.79)),
(id: "work_boots", name: "Work boots", category: Clothing, weight_kg: 1.4, volume_l: 3.0,
clothing: Some((covers: [Feet, Legs], protection: 0.5, layer: Outer)), model: Some("work_boots"), color: (0.35, 0.26, 0.19)),
// ---- Accessories (clothing that takes a place on the body: Face, HeadTop, Neck) -------------
(id: "glasses", name: "Glasses", category: Clothing, weight_kg: 0.03, volume_l: 0.1,
clothing: Some((takes: [Face], layer: Base)), model: Some("glasses"), color: (0.05, 0.05, 0.06)),
(id: "baseball_cap", name: "Baseball cap", category: Clothing, weight_kg: 0.1, volume_l: 0.5,
clothing: Some((covers: [Head], takes: [HeadTop], protection: 0.03, layer: Outer)), model: Some("baseball_cap"), color: (0.48, 0.23, 0.2)),
(id: "beanie", name: "Beanie", category: Clothing, weight_kg: 0.08, volume_l: 0.3, tags: ["rippable"],
clothing: Some((covers: [Head], takes: [HeadTop], protection: 0.04, layer: Outer)), model: Some("beanie"), color: (0.21, 0.23, 0.26)),
(id: "woolly_hat", name: "Woolly hat", category: Clothing, weight_kg: 0.12, volume_l: 0.5, tags: ["rippable"],
clothing: Some((covers: [Head], takes: [HeadTop], protection: 0.05, layer: Outer)), model: Some("woolly_hat"), color: (0.6, 0.45, 0.26)),
(id: "scarf", name: "Scarf", category: Clothing, weight_kg: 0.2, volume_l: 0.6, tags: ["rippable"],
clothing: Some((takes: [Neck], protection: 0.0, layer: Outer)), model: Some("scarf"), color: (0.42, 0.18, 0.17)),
// Masks (#92): over the nose and mouth, a layer above glasses (so both go on), one at a time.
(id: "dust_mask", name: "Dust mask", category: Clothing, weight_kg: 0.01, volume_l: 0.1, stack: 5,
clothing: Some((takes: [Face], protection: 0.0, layer: Mid)), model: Some("dust_mask"), color: (0.86, 0.85, 0.82)),
(id: "bandana", name: "Bandana", category: Clothing, weight_kg: 0.03, volume_l: 0.1, tags: ["rippable"],
clothing: Some((takes: [Face], protection: 0.01, layer: Mid)), model: Some("bandana"), color: (0.54, 0.23, 0.2)),
(id: "balaclava", name: "Balaclava", category: Clothing, weight_kg: 0.08, volume_l: 0.3, tags: ["rippable"],
clothing: Some((covers: [Head], takes: [Face, HeadTop], protection: 0.05, layer: Mid)), model: Some("balaclava"), color: (0.17, 0.17, 0.18)),
// ---- Bags ----------------------------------------------------------------------------------
(id: "plastic_bag", name: "Plastic bag", category: Bag, weight_kg: 0.02, volume_l: 0.05, stack: 10,
bag: Some((capacity_l: 8.0, carried: Hand)), model: Some("plastic_bag"), color: (0.83, 0.82, 0.78)),
(id: "tote_bag", name: "Tote bag", category: Bag, weight_kg: 0.2, volume_l: 0.5,
bag: Some((capacity_l: 12.0, carried: Shoulder)), model: Some("tote_bag"), color: (0.7, 0.65, 0.52)),
(id: "school_backpack", name: "School backpack", category: Bag, weight_kg: 0.5, volume_l: 1.0,
bag: Some((capacity_l: 20.0, carried: Back)), model: Some("school_backpack"), color: (0.27, 0.38, 0.49)),
(id: "duffel_bag", name: "Duffel bag", category: Bag, weight_kg: 1.0, volume_l: 2.0,
bag: Some((capacity_l: 40.0, carried: Hand, slow: 0.1)), model: Some("duffel_bag"), color: (0.31, 0.34, 0.25)),
(id: "hiking_pack", name: "Hiking rucksack", category: Bag, weight_kg: 1.6, volume_l: 3.0,
bag: Some((capacity_l: 50.0, carried: Back)), model: Some("hiking_pack"), color: (0.54, 0.33, 0.2)),
// ---- Weapons (combat numbers in weapons.ron) -------------------------------------------------
(id: "kitchen_knife", name: "Kitchen knife", category: Weapon, weight_kg: 0.2, volume_l: 0.3, tags: ["cuts"], weapon: Some("kitchen_knife"), color: (0.75, 0.75, 0.78)),
(id: "claw_hammer", name: "Claw hammer", category: Weapon, weight_kg: 0.6, volume_l: 0.5, tags: ["hammers", "pries"], weapon: Some("claw_hammer"), color: (0.45, 0.3, 0.2)),
(id: "frying_pan", name: "Frying pan", category: Weapon, weight_kg: 1.2, volume_l: 2.0, tags: ["cookware"], weapon: Some("frying_pan"), color: (0.15, 0.15, 0.16)),
(id: "baseball_bat", name: "Baseball bat", category: Weapon, weight_kg: 1.0, volume_l: 2.5, two_handed: true, one_hand: true, weapon: Some("baseball_bat"), color: (0.7, 0.55, 0.35)),
(id: "golf_club", name: "Golf club", category: Weapon, weight_kg: 0.4, volume_l: 2.0, two_handed: true, one_hand: true, weapon: Some("golf_club"), color: (0.75, 0.75, 0.8)),
(id: "wooden_plank", name: "Wooden plank", category: Weapon, weight_kg: 2.0, volume_l: 4.0, two_handed: true, one_hand: true, tags: ["wood", "fuel"], weapon: Some("wooden_plank"), color: (0.6, 0.45, 0.28)),
(id: "crowbar", name: "Crowbar", category: Weapon, weight_kg: 1.5, volume_l: 1.2, tags: ["pries"], weapon: Some("crowbar"), color: (0.5, 0.15, 0.12)),
(id: "hatchet", name: "Hatchet", category: Weapon, weight_kg: 0.9, volume_l: 1.0, tags: ["chops"], weapon: Some("hatchet"), color: (0.5, 0.36, 0.22)),
(id: "fire_axe", name: "Fire axe", category: Weapon, weight_kg: 2.5, volume_l: 4.0, two_handed: true, tags: ["chops"], weapon: Some("fire_axe"), color: (0.75, 0.15, 0.1)),
// ---- Guns, their rounds and magazines (#72; numbers in weapons.ron's `ranged`) -----------------
// A gun or a magazine has its rounds in it (they don't stack); loose rounds do. Using the gun in
// your hand reloads it, using a magazine in your pocket fills it.
(id: "pistol", name: "Pistol", category: Weapon, weight_kg: 0.9, volume_l: 0.6, weapon: Some("pistol"), color: (0.16, 0.16, 0.18)),
(id: "pistol_magazine", name: "Pistol magazine", category: Tool, weight_kg: 0.25, volume_l: 0.15, tags: ["ammo", "magazine"], color: (0.2, 0.2, 0.22)),
(id: "pistol_rounds", name: "Pistol round", category: Material, weight_kg: 0.012, volume_l: 0.004, stack: 50, tags: ["ammo"], color: (0.72, 0.56, 0.25)),
(id: "hunting_rifle", name: "Hunting rifle", category: Weapon, weight_kg: 3.4, volume_l: 6.0, two_handed: true, weapon: Some("hunting_rifle"), color: (0.36, 0.24, 0.14)),
(id: "rifle_rounds", name: "Rifle round", category: Material, weight_kg: 0.025, volume_l: 0.01, stack: 20, tags: ["ammo"], color: (0.75, 0.6, 0.3)),
(id: "shotgun", name: "Shotgun", category: Weapon, weight_kg: 3.2, volume_l: 6.0, two_handed: true, weapon: Some("shotgun"), color: (0.2, 0.18, 0.16)),
(id: "shotgun_shells", name: "Shotgun shell", category: Material, weight_kg: 0.045, volume_l: 0.03, stack: 25, tags: ["ammo"], color: (0.7, 0.14, 0.12)),
// ---- Junk: everyday clutter (light, mostly useless; some taken apart later) ---------------------
(id: "mug", name: "Mug", category: Junk, weight_kg: 0.3, volume_l: 0.4, stack: 4, tags: ["junk"], color: (0.9, 0.9, 0.85)),
(id: "magazine", name: "Magazine", category: Junk, weight_kg: 0.2, volume_l: 0.3, stack: 5, tags: ["junk", "fuel"], color: (0.8, 0.4, 0.5)),
(id: "tv_remote", name: "TV remote", category: Junk, weight_kg: 0.15, volume_l: 0.15, tags: ["junk"], color: (0.1, 0.1, 0.1)),
(id: "picture_frame", name: "Picture frame", category: Junk, weight_kg: 0.4, volume_l: 0.6, tags: ["junk"], color: (0.6, 0.5, 0.35)),
(id: "pen", name: "Pen", category: Junk, weight_kg: 0.01, volume_l: 0.01, stack: 10, tags: ["junk"], color: (0.1, 0.2, 0.6)),
(id: "umbrella", name: "Umbrella", category: Junk, weight_kg: 0.5, volume_l: 1.0, tags: ["junk"], color: (0.15, 0.15, 0.2)),
(id: "baking_tray", name: "Baking tray", category: Junk, weight_kg: 0.6, volume_l: 1.5, tags: ["junk", "cookware"], color: (0.5, 0.5, 0.52)),
(id: "alarm_clock", name: "Alarm clock", category: Junk, weight_kg: 0.3, volume_l: 0.4, tags: ["junk"], color: (0.8, 0.3, 0.2)),
(id: "cushion", name: "Cushion", category: Junk, weight_kg: 0.4, volume_l: 3.0, tags: ["junk"], color: (0.5, 0.3, 0.45)),
]