Collab session notes/2026-08-11 Early-game spine and gear quality

From BTScape Wiki
Jump to navigation Jump to search

Synthesized by an AI from a live Tyler ↔ Bembi design conversation on 2026-08-11. A record of what was discussed, not settled design — session notes, not canon.

The conversation drew on a code mirror roughly three weeks stale, and several things discussed as future work had already landed. The discussion below is left as it was said; where it rests on a premise the current code contradicts, an inline Update note says so, and Code state at time of writing gathers what actually exists.

Session covering cave-mouth art, a first early-game gameplay loop, recipe structure, item quality/wear, and how the three combat styles relate to Pneuma.

Cave mouths

Cave entrances get a hand-authored entrance kit rather than procedural mouth geometry. The shell/void machinery already produces the hole; what generation cannot produce is a good silhouette, since anything derived from tile corners looks like tile corners. A handful of meshes, rotated and non-uniformly scaled, beats a procedural mouth we would spend a long time tuning — and this is already what the caves/overhangs/cliffs initiative calls for.

Update: the shell's inward-facing rock walls were switched off on 2026-08-10 — AddShellColumn short-circuits behind a WallsEnabled flag, and the four ShellMeshTests asserting wall geometry are skipped rather than deleted so the math stays restorable. Ceiling occlusion is untouched; each roofing sheet's own underside slab handles that. So a mouth's silhouette is more of the kit's job now, not less.

  • The kit should come in a small set of fixed tile footprints (one-, two-, three-tile wide) so void painting has known shapes to match, instead of every mouth being a bespoke vertex-nudging job.
  • Entrance meshes should use the same rock material as the cliff/shell, or the seam between authored and generated rock will pop.
  • Entrance objects are pure dressing and non-blocking. Walkability is server-side (the void tile, the cave floor surface, the flanking walls); the mesh must be generous enough that the authored hole never clips through it.

Noted in passing: the surface placement tool needs work, and the cutaway view wants to be independent of edit mode. A minimap (deferred when caves were built) is now urgent — Bembi got genuinely lost inside his own cave.

Update — cutaway: two separate mechanisms share that word. The runtime cutaway (CutawayController, the dissolve that keeps the player visible under a roof) is already play-only and independent of edit mode. The one Edit Mode gates is the authoring cut (AuthoringCut: "Enabled is the whole gate. Edit Mode owns it; play is untouched and runtime cutaway keeps its own policy"). Cave darkness is separately clamped off while Edit Mode is active, so authoring stays lit.

Update — minimap: one already exists. It shipped 2026-06-30, so the mirror had it, and on 2026-08-08 it was made z-aware (protocol bumped to 72): it resolves tiles through the same TryGetTileIdAtZ the hover/spell/paint tools use, at the player's own z, so it shows the level you are standing on rather than the terrain overhead. That change also gave both maps real tile textures and the minimap scroll-wheel zoom. Its rendering is editor-unverified. The open work is confirming it reads well underground, not building one.

Early-game spine

Nothing in the game currently takes time — cooking and smelting resolve as fast as you can click, so there is no loop, only a button that converts inventory. Server-side action durations on gathering and processing are the prerequisite for any early-game content: they turn existing content into a session, and they are cheap next to authoring gear.

Update: gathering already takes server time. harvest.lua runs start_activity with an interval — 5 ticks between yields, 4 yields a session, a 150-tick respawn by default — and that activity is what drives the sustained Skilling animation. It is processing that is instant, by construction: process_recipe resolves the whole transaction in the one interaction that clicked the recipe, with no session. The prerequisite is real but narrower — durations on processing.

Chosen spine (both participants): mine → smelt → smith a bronze set → the cave enemy that needs it. It leans on the caves and smithy that already exist and makes gear the sink.

Update: the mine and smelt halves now exist in code. Copper, tin, iron and coal ore items and vein objects, a mining skill, and (since 2026-08-10) a smelter object turning ore into bronze_bar and iron_bar. The smith half does not exist in any form: no anvil object type, no smithing skill (skill_types/ holds hunting, mining and woodcutting), and no bronze set beyond bronze_helmet. Whether a smithy building stands in the live world is a separate question from whether a smithing mechanic exists; none does.

  • Tune the enemy first — unwinnable in starting kit, fair in bronze — and let the ore/bar economy fall out of its time-to-kill, rather than the reverse.
  • Depth over breadth: one loop taken all the way to a sink, plus one gate that says "you're not ready yet", beats a full leather-and-bronze matrix.

Recipes

Recipes move out of individual objects into a recipe manager. A recipe is inputs, outputs, and non-consumed requirements (catalyst / tool / station).

Update: recipes stopped being a Lua handler per object on 2026-08-10. An object type now carries data processor_recipes{id, label, inputs, outputs} — whose id doubles as a reserved action id that auto-runs the conversion, mirroring how shop_id/"trade" works; it is validated at load and executed by world/processing.rs. The smelter and the campfire both run on it. That makes this section's proposal concrete rather than speculative. What the schema has no room for today is exactly the rest of the proposal: the station tag, and any non-consumed requirement at all (catalyst, tool, skill, held item). No recipe has a fuel input to omit either — bronze is one copper plus one tin, iron is one iron ore.

  • A recipe should name a station tag, with objects declaring which tags they satisfy — campfire and range both claim cook, furnace claims smelt, a portable forge added later claims it without touching any recipe.
  • Superheat-style effects are a separate recipe with the same output and no fuel input, gated by a spell. This is why gating wants to be a small list of conditions on the recipe (tool, skill, tag, item held) rather than the recipe living inside one object.
  • Multi-component crafting is attractive because it interconnects systems: a sword is blade (forged with the tang as one piece) plus fittings plus a wrapped grip. The leather grip feeds Bembi's cow/tanning loop into the smithing spine. Two or three components per item is enough — stop short of a per-item minigame, which is fun for twenty swords and misery for two hundred.

Update: the cow NPC landed 2026-08-10 with art, stats and a 2×2 footprint, but an empty loot_table and no actions, and there are no hide, leather or tanning content types anywhere. The cow/tanning loop is art so far.

Quality and wear

Quality lives on equipment only, never on materials. A bar carrying its own quality number stops stacking, and per-item tracked ore is bad for both the wire and the player. One-per-slot items you actually look at can carry state for free.

Update: nothing in the item schema or the wire protocol carries quality, wear, durability or repair today — this is greenfield. What equipment does carry is armor, strength, accuracy, affinity_mods per damage type, equip_slot across eight slots, and two_handed.

Quality and wear are two different numbers.

  • Quality is the inherent property of the piece — what a smith invested into it. It only ever moves up, when someone reworks the piece. Repair never raises it.
  • Wear is condition. Drops come off corpses heavily worn, so a bandit's sword needs a smith and a bar before it is worth carrying — looting feeds smithing instead of replacing it.

Presentation: quality shown as words (tattered … masterwork), Terraria-style, whatever the internal representation.

Smith skill produces better quality on a curve with diminishing returns — exponential effort for linear gain — so top smiths make masterwork and everyone else makes serviceable. Proficiency should be emergent: making longswords repeatedly nudges your longsword curve specifically, which is what makes a player known for something. Maintenance can be done by players or bought from an NPC smith.

The reason RuneScape smithing is inert is that drops outclass crafted gear and everyone can make everything at level. The fix is crafted gear as the primary low-end source, with monsters dropping materials and damaged pieces. Combined with reworkable quality, the bronze set you made at hour one is still what you carry at hour ten, only better — so gear is made in handfuls, slowly, and upgraded repeatedly, not extruded by the hundred.

Wear as an item sink

Wear earns its place as an item sink, not as realism. If it exists it should be honest: pieces eventually break for good rather than hovering near death on perpetual maintenance. Durability that ticks down merely from swinging is a tax players resent and buys nothing the damaged-drop already provides. The sink should bite hardest on looted junk and lightest on a piece you have reworked repeatedly, so supply pressure lands on the bandit's sword rather than on your investment.

Tiers, ores and regions

Metal tiers should be relevant progression — bronze worn for a real stretch, not breezed past in ten minutes.

  • Overlap but never leapfrog: masterwork bronze beats tattered iron and loses to plain iron. Quality has teeth at the low end without letting anyone grind bronze forever.
  • Bronze is copper plus tin, which gives regional identity for free and without invented ore names — the starter set is the first thing that makes you travel or trade, not something you make off the boat. Eve-style fantasy ore ladders were considered and rejected as confusing.
  • Iron then arrives as easier to source but harder to work, giving smith skill something to bite on.

Update: copper-plus-tin is already how the smelter's bronze recipe reads, and iron is already the cheaper single-input recipe. Neither has a skill requirement, because recipes cannot express one.

Combat styles and pneuma

The RuneScape combat triangle is out. Strengths and weaknesses belong to elements and damage types (blunt, stab, bleed, poison, and more), not to style-beats-style.

Update: a damage-type registry already exists — damage_types.json holds pure, fire, water, earth, air and void — so blunt, stab, bleed and poison would be new keys of an existing kind rather than a new mechanism. NPCs carry authored affinities (incoming-damage multipliers per type) and equipment carries affinity_mods, so the resistance side of this is already wired end to end.

A weapon is a vessel for pneuma. It may have an affinity, but which element you put through it is your choice. Imbuing should be an action — cost some pneuma, last a while or a number of hits — rather than a permanent property, or element becomes a build slot and you end up carrying four swords. Staves and wands remain in the game as vessels that are simply better at it.

Update: a weapon's element is a static per-type field today (ItemTypeDef.damage_type, "the attacker's own default" when absent). Making imbuing an action means moving element out of type data into per-wielding state — a wire and persistence change, not a content one. The vessel framing is taken further on Reclamation.

This keeps element reactive in the moment while gear stays the plan you made an hour ago. Four elements × three styles never becomes twelve roles, because element is not something you pick at character build time.

Styles differ by how you spend attention, and by their tempo with pneuma:

  • Melee — commitment; in its face, steady output, decisions about positioning and when to spend. Spends pneuma in chunks up front, then swings.
  • Ranged — upkeep; managing distance and ammo, punished for standing still. Spends per shot on ammo prepared in advance, so it can pre-craft pneuma at a bench. Arrows as pneuma storage also gives the crafting loop a consumable.
  • Magic — burst and swing; big single actions on a resource that runs dry.

Armour differentiation without an encumbrance system: penalties against the style the armour is not for — metal blunts bow accuracy and pneuma throughput, leather neutral and cheap, robes trade protection for casting. This makes Bembi's leather something you wear to shoot things rather than worse bronze.

Update: items already carry attack_style ("melee", "ranged", "magic"), but it is documented as presentation and categorization only — it "doesn't gate any combat mechanic yet" — and per-style defender evasion (e.g. "melee armor" making melee attacks less accurate) is already named there as the planned follow-up. That planned follow-up is this bullet. Style and element are already orthogonal in the schema, exactly as this section wants: a flaming sword is melee+fire.

No swapping equipment in combat (WoW-style out-of-combat only). It makes gear a decision rather than a macro, keeps PvP legible, and the server already owns equip.

Update: the server does own equip — is_equipment/equip_slot across eight slots (head, chest, legs, boots, gloves, back, hand, offhand), with the "Equip" action auto-added and two-handed items vacating the offhand. There is no in-combat gate on it yet.

Code state at time of writing

Checked against the repository on 2026-08-11, the day after the session. Commit dates are the authors' local dates as recorded in git.

Landed after the mirror was taken, before or during the session:

  • Processor recipes (2026-08-10) — ObjectTypeDef.processor_recipes, a data-driven item conversion whose recipe id doubles as its action id, validated at load, run by world/processing.rs. Ships with a smelter (bronze_bar, iron_bar) and campfire cooking. Resolves atomically in one interaction, with no duration and no requirement beyond holding the inputs.
  • Z-aware minimap and world map (2026-08-08, protocol 72) — the maps show the topmost stacked face, and the minimap resolves at the player's own z, so a cave level is visible instead of the terrain above it. Real tile textures on both; scroll zoom on the minimap. Rendering is editor-unverified.
  • Cave rock-shell walls disabled (2026-08-10) — behind a WallsEnabled flag; ceiling occlusion untouched.
  • Cow NPC (2026-08-10) — art, stats, 2×2 footprint, empty loot table.

Already present, and older than the mirror:

  • A minimap (2026-06-30).
  • Gathering durations — harvest.lua's start_activity, with tool gating, per-tick yields, loot-table rolls, XP, depletion and respawn.
  • The damage-type registry (pure, fire, water, earth, air, void), NPC affinities, and equipment affinity_mods.
  • attack_style on items, presentation-only.
  • Server-owned equip across eight slots.
  • Two distinct cut mechanisms: the runtime cutaway (play, always available) and the authoring cut (Edit Mode only).

Not present in any form:

  • Smithing — no anvil object type, no smithing skill, no bronze set past bronze_helmet.
  • Quality, wear, durability or repair, on items or on the wire.
  • Hide, leather or tanning content.
  • Recipe requirements of any kind — no station tag, no tool/skill/catalyst gate, no fuel input.
  • Physical damage types (blunt, stab, bleed, poison).
  • Any duration on processing.
  • An entrance kit.

Open questions

  • Whether "I'll tank it, you handle the poison" implies party roles. The existing Combat page says flatly there are none, with cooperation coming from covering matchups. Preparation-by-gear ("one person can stand there today") is not the same as a tank role, but the two need separating deliberately.
  • What a bow actually does with pneuma beyond imbued ammo — a channelled shot, something else. Magic's relationship to the element wheel is obvious; melee and ranged still need theirs written down.
  • Whether quality overlap across tiers is a flat rule or per-slot.
  • Personal realms / player housing came up and was left alone — Bembi's concern is that it becomes a Garrison, i.e. lots to do somewhere other players aren't.
  • What "a weapon is a vessel" commits to. Pneuma's Law I gives that word a specific meaning: a structure that circulates pneuma and is thereby alive — "fill a vessel and it wakes; drain it and it goes still." Taken at face value an imbued weapon is animate for as long as it is charged, which is the soul-of-the-sword idea and may be the point rather than a problem. Pursued on Reclamation, along with what restores a worn piece. Pneuma also places elemental-ness in the medium rather than the pneuma, so "which element you put through it" is more precisely which medium the pneuma is bound in.
  • How physical damage types sit against the element square. Combat's settled core is four elements countering on the diagonal, with countering as an action rather than a multiplier. Blunt, stab, bleed and poison need a stated relationship to that, not just a shared registry entry.
  • Nothing was written to Combat this session. The vessel line and the quality-vs-wear split are the two candidates when someone wants them recorded.