-- ===================================================================== -- 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="", 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/.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