Files
sporel-module-vagrant-skeleton/content/stone_age.lua

154 lines
7.2 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- =====================================================================
-- content/stone_age.lua — T1-modder content pack: Stone-Age items + recipes.
--
-- PURE CONTENT. No engine wiring, no sprite/atlas plumbing — just the
-- authoring API `c` passed in by the module (see init.lua's content facade):
-- c.T{ id, name, desc, weight, vol, material={...}, affordance={...},
-- atlas="tc"|"stone", uv="<sprite-key>", scale? } -- define an item
-- c.R{ ...crafting.define_recipe def... } -- define a recipe
-- c.S{ template, x, y } -- place item in world
-- `c.T` auto-registers the crafting-panel icon from the item's own sprite.
--
-- A T1 modder adds Stone-Age content by editing THIS file only — never
-- init.lua. Drop a sibling `content/<name>.lua` + list it in init.lua's
-- CONTENT_PACKS to add a new pack.
--
-- Self-bootstrapping graph:
-- rock --knap--> sharp_stone --+--(tool)--> saw_planks (log -> 4 planks)
-- +--(head)--> stone_axe
-- plant_fiber x3 --twist--> cordage --(binding)--> stone_axe
-- stick --------------------------(haft)--------> stone_axe
-- =====================================================================
return function(c)
-- ---- items -------------------------------------------------------
-- World-gathered
c.T{ id = "log", name = "Log",
desc = "A heavy wooden log. Saw it into planks with a cutting edge.",
weight = 20, vol = 0.05, material = { wood = 1.0 },
atlas = "tc", uv = "log_pile1" }
c.T{ id = "sharp_stone", name = "Sharp Stone",
desc = "A knapped stone with a cutting edge. A tool — not consumed by sawing.",
weight = 1, vol = 0.0004, material = { stone = 1.0 },
affordance = { cutting = true }, atlas = "tc", uv = "spade" }
c.T{ id = "plant_fiber", name = "Plant Fiber",
desc = "A strand of tough plant fiber. Twist three into cordage.",
weight = 0.05, vol = 0.0002, material = { fiber = 1.0 },
atlas = "tc", uv = "sack1", scale = 0.6 }
-- Crafted outputs
c.T{ id = "plank", name = "Plank",
desc = "A sawn wooden plank.",
weight = 2, vol = 0.004, material = { wood = 1.0 }, -- light: not re-sawable (<5)
atlas = "tc", uv = "bench1" }
c.T{ id = "cordage", name = "Cordage",
desc = "A length of twisted plant-fiber cord.",
weight = 0.1, vol = 0.0003, material = { fiber = 1.0 },
atlas = "tc", uv = "sack1" }
c.T{ id = "stone_axe", name = "Stone Axe",
desc = "A hafted stone axe. Chops wood.",
weight = 1.8, vol = 0.0012,
material = { stone = 0.6, wood = 0.3, fiber = 0.1 },
affordance = { chopping = true }, atlas = "tc", uv = "spade" }
-- World-gathered (round-out)
c.T{ id = "branch", name = "Branch",
desc = "A long springy branch. Snap it into sticks.",
weight = 1.5, vol = 0.006, material = { wood = 1.0 },
atlas = "tc", uv = "log_pile1", scale = 0.85 }
c.T{ id = "tree", name = "Tree",
desc = "A standing tree. Chop it down for logs.",
weight = 400, vol = 1.0, material = { wood = 1.0 },
atlas = "tc", uv = "log_pile1", scale = 1.6 }
-- Crafted tools
c.T{ id = "stone_hammer", name = "Stone Hammer",
desc = "A stone lashed to a haft. Pounds and knaps.",
weight = 1.5, vol = 0.001,
material = { stone = 0.6, wood = 0.3, fiber = 0.1 },
affordance = { hammering = true }, atlas = "tc", uv = "spade" }
c.T{ id = "sharpened_stick", name = "Sharpened Stick",
desc = "A stick whittled to a point. A crude spear.",
weight = 0.3, vol = 0.0005, material = { wood = 1.0 },
affordance = { piercing = true }, atlas = "tc", uv = "log_pile1", scale = 0.9 }
-- ---- recipes -----------------------------------------------------
-- saw_planks: input matched by MATERIAL (mostly wood AND heavy), a light
-- plank fails weight>5. Needs a cutting TOOL (not consumed). ×4 output.
c.R{ id = "saw_planks",
inputs = { { match = { ["composition.wood"] = ">0.5", weight = ">5" }, count = 1 } },
tools = { { match = { ["affordance.cutting"] = true } } },
outputs = { { template = "plank", count = 4 } },
name = "Saw Planks",
description = "Saw a wooden log into four planks (needs a cutting edge)." }
c.R{ id = "knap_sharp_stone",
inputs = { { template = "rock", count = 1 } },
tools = { { match = { ["affordance.hammering"] = true } } },
outputs = { { template = "sharp_stone", count = 1 } },
name = "Knap Sharp Stone",
description = "Strike a rock with a hammerstone to flake off a sharp edge." }
c.R{ id = "twist_cordage",
inputs = { { template = "plant_fiber", count = 3 } },
outputs = { { template = "cordage", count = 1 } },
name = "Twist Cordage",
description = "Twist three plant fibers into a length of cordage." }
c.R{ id = "craft_stone_axe",
inputs = {
{ template = "sharp_stone", count = 1 }, -- head (consumed)
{ template = "stick", count = 1 }, -- haft
{ template = "cordage", count = 1 }, -- binding
},
outputs = { { template = "stone_axe", count = 1 } },
name = "Haft Stone Axe",
description = "Bind a sharp stone to a stick with cordage." }
-- Round-out recipes
c.R{ id = "craft_stone_hammer",
inputs = {
{ template = "rock", count = 1 },
{ template = "stick", count = 1 },
{ template = "cordage", count = 1 },
},
outputs = { { template = "stone_hammer", count = 1 } },
name = "Haft Stone Hammer",
description = "Lash a stone to a stick for a pounding tool (enables knapping)." }
c.R{ id = "break_branch",
inputs = { { template = "branch", count = 1 } },
outputs = { { template = "stick", count = 2 } }, -- multi-output from one branch
name = "Break Branch",
description = "Snap a branch over your knee into two sticks." }
c.R{ id = "chop_tree",
inputs = { { template = "tree", count = 1 } },
tools = { { match = { ["affordance.chopping"] = true } } },
outputs = { { template = "log", count = 2 } }, -- closes the loop: axe -> logs -> planks
name = "Chop Tree",
description = "Fell a tree with a chopping edge — yields two logs." }
c.R{ id = "sharpen_stick",
inputs = { { template = "stick", count = 1 } },
tools = { { match = { ["affordance.cutting"] = true } } },
outputs = { { template = "sharpened_stick", count = 1 } },
name = "Sharpen Stick",
description = "Whittle a stick to a point with a cutting edge." }
-- ---- world spawns (backpack sits at 350,400) ---------------------
c.S{ template = "log", x = 110, y = 400 }
c.S{ template = "sharp_stone", x = 110, y = 330 }
for i = 1, 3 do
c.S{ template = "plant_fiber", x = 50, y = 300 + (i - 1) * 28 }
end
c.S{ template = "branch", x = 50, y = 250 }
c.S{ template = "branch", x = 85, y = 250 }
c.S{ template = "tree", x = 200, y = 190 }
end