From 60093522f55e91f9e41bb40649ca0bf2bcbe955f Mon Sep 17 00:00:00 2001 From: calic Date: Tue, 28 Jul 2026 12:09:25 +0000 Subject: [PATCH] =?UTF-8?q?feat(vagrant):=20v0.18.0=20=E2=80=94=20Stone-Ag?= =?UTF-8?q?e=20round-out=20(stone=5Fhammer+knap-gate,=20chop=5Ftree,=20bre?= =?UTF-8?q?ak=5Fbranch,=20sharpen=5Fstick)=20in=20content=20pack?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 9 ++++++- content/stone_age.lua | 60 ++++++++++++++++++++++++++++++++++++++++++- manifest.module | 2 +- 3 files changed, 68 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 878018e..091d76f 100644 --- a/README.md +++ b/README.md @@ -8,11 +8,18 @@ callback, foot-body-orientation ("tactical twist"), scale-deformation walk cycle, and inheritance-decoupled foot sprites. End-to-end inventory pickup/drop demo: pick up a rock into a backpack container, drop it back into the world. -**Version:** 0.17.0 +**Version:** 0.18.0 **Module-ID:** vagrant-skeleton **Requires:** lib-core.input >=0.4.0, lib-core.camera >=0.3.0, lib-core.render >=0.2.0, lib-core.maps >=0.1.2, lib-core.puppet >=0.4.4, lib-core.interaction >=0.1.0, lib-core.composition >=0.3.0, lib-core.actor >=0.1.0, lib-core.inventory-list >=0.1.0, lib-core.panel >=0.2.0, lib-core.inventory-list-display >=0.1.0, lib-core.notify >=0.1.0, lib-core.notify-display >=0.1.0, lib-core.world-overlay >=0.1.0, lib-core.crafting >=0.3.0, lib-core.crafting-display >=0.2.0, lib-asset.prototype-subterrain >=0.2.0, lib-asset.prototype-tc-basics >=0.1.0 **Tags:** test-chamber, puppet, walking-sim, interaction +> **v0.18.0:** Stone-Age round-out (content pack) — `craft_stone_hammer` +> (rock+stick+cordage → hammering tool), which now **gates `knap_sharp_stone`** +> (was bare-handed); `chop_tree` (tree + chopping axe → 2 logs, closing the +> axe→log→plank loop); `break_branch` (branch → 2 sticks, multi-output); +> `sharpen_stick` (stick + cutting → sharpened_stick). Tool-gating verified +> (knap/chop fail without the right affordance). +> > **v0.17.0:** **T1-modder content packs.** Stone-Age items + recipes + world- > spawns moved OUT of `init.lua` into `content/stone_age.lua` — pure declarative > data (`c.T{}` item, `c.R{}` recipe, `c.S{}` spawn), loaded via a content facade diff --git a/content/stone_age.lua b/content/stone_age.lua index 22ec555..6d65ba7 100644 --- a/content/stone_age.lua +++ b/content/stone_age.lua @@ -54,6 +54,29 @@ return function(c) 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. @@ -66,9 +89,10 @@ return function(c) 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 to flake off a sharp-edged 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 } }, @@ -86,10 +110,44 @@ return function(c) 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 diff --git a/manifest.module b/manifest.module index b3156a5..2cc7383 100644 --- a/manifest.module +++ b/manifest.module @@ -1,6 +1,6 @@ { "id": "vagrant-skeleton", - "version": "0.17.0", + "version": "0.18.0", "kind": "module", "api": "^0.1", "ci_frames": 60,