Working title 'tgame' is provisional. Top-level samples/ and docs/samples/ are gitignored; visual/art pipeline lives outside this repo.
25 KiB
Fold-ins: Brainstorm Session 2026-05-12
Loose notes on what shifted, expanded, or got added during the May 12 brainstorm. Not a spec. May not all make the game. Existing docs (00–16) stay as-is; this rolls in the deltas without rewriting them.
Strategic shifts
Platform: mobile → Steam-first
00-concept.md opens with "A mobile game." Working assumption now is Steam (PC) as primary. Mobile deferred or dropped. Reasons:
- Premium monetization is the default on Steam, the exception on mobile
- ~5–10× revenue per copy at comparable conversion rates
- Wishlist/Next Fest discovery system actually exists on Steam
- Existing design (drag-to-station, info-dense UI, reveal choreography) is structurally Steam-shaped; we were working around mobile constraints
- Pixel art is more welcome on Steam than mobile
- Steam Workshop is a force multiplier given the data-driven architecture
Mobile port stays possible later — offline-first / no-live-service architecture choices leave the door open.
Pacing: real-time idle → session-based, idle-within-session
Existing docs lean Melvor-style real-time idle. Steam shifts this to session-based, idle-within-session — expeditions resolve in in-session minutes, not real-world hours. Loop Hero / FTL shape. The "AFK" is within the session, not while the game is closed.
Numbers throughout existing docs (expedition durations, craft times, rank cadence) need re-scaling against in-session minutes, not real-world hours. Defer the actual rescaling to sim-driven tuning.
Monetization lane
Premium upfront, ~$10–15 on Steam, demo for Steam Next Fest. Off the table: gacha, energy timers, IAP-to-skip-friction, FOMO events.
Realistic envelope: $0–2k (flop) / $5–30k (modest indie success) / $50k+ (hit). Designing for the modest indie success lane.
Moral guardrail: the morning-after test
Articulated as a design constraint: would a player who put 30 minutes in last night wake up and feel fine about it? Not addicted, not wrung out, not "I don't know why I did that"? If a mechanic only works by failing this test, it's out. Pair with "always something shiny" — both apply.
Niche positioning (sharpened)
Was: "Melvor meets Darkest Dungeon." Now: "A crafting-guild idle with Wartales-style provisioning, CK3-style event streams, and open-ended expedition sessions you recall at will. Pixel-art, single-screen, Steam premium."
The Wartales/Battle Brothers provisioning lineage is the actual differentiator (see Consumables below). Nothing in the crafting-primary genre does this.
Stack and tooling (tentative — spike before committing)
Developer fluent in Python, C, C++, Rust, IEC61131, JS/TS — not C#. Strongly prefers terminal/code-editor workflows over GUI editors.
Leading candidates:
- TypeScript + Phaser (or PIXI) + Tauri — code-first, peak AI productivity for the developer's stack, web stack is natively brilliant at animated UI, Tauri ships small native binaries to Steam
- LÖVE + Lua — code-first, Balatro-tier shipping track record, smaller corpus
- pygame-ce — deepest Python familiarity, but framework grain doesn't match info-dense animated UI
Out for this project: Godot (GUI-editor primary grain), C# stacks (extra language), Bevy/Rust (compile-time iteration tax), C++/raylib (UI work in C++ is painful), Hazel (teaching engine).
Recommended spike before committing: one weekend in Phaser+TS+Tauri, one in LÖVE+Lua. Same toy each — single workshop screen, drag-an-ingredient-to-station, Master's Touch meter, one card reveal.
Data pipeline
User owns the visual asset pipeline (ComfyUI + Python scripts) — out of scope for tooling discussions.
The data pipeline:
- Source format: TOML files per domain (
data/materials/,data/recipes/,data/patrons/, etc.), git-versioned, text-editable - CSV as bulk-import escape hatch: for AI-generated or spreadsheet-brainstormed batches; converted to TOML once imported
- Validation: Pydantic schemas at the tooling layer
- Procedural expansion: templates × materials × quality bands × affixes → expanded item space (potentially 10k+ permutations)
- Runtime artifact: SQLite (same engine for content and save state)
- Simulator: Python initially; port to TS if/when stack settles there, so sim and game share logic
Strategic milestone: sim + recipe scope locked first; then game code. Lock the 30–60 hour content envelope by simulation before touching the runtime.
Progression model — substantial revision
05-economy-progression.md correctly rejected per-skill XP grind ("craft 300 daggers to level Smithing"). But it over-corrected — no visible quantified bars means players have nowhere for the "I'm almost there" feeling to live.
Multiple visible progression surfaces
| Surface | Visible bar | Advances by | Avoids grind because |
|---|---|---|---|
| Guild Rank (spine) | XP toward next rank | Orders + discoveries + masterworks + expeditions | Multiple sources; can't farm one |
| Recipe Library | % discovered (47/200) | First craft of a recipe | Repeats don't count |
| Material Catalog | Found (32/120) | New material drop | Repeats don't count |
| Patron Favor | Per-patron (8/10) | Fulfilling their orders | Bounded per patron |
| Engineer Career Arc | Apprentice → Journeyman → Master | First-Masterwork, first-Legendary, time-served | 3 stages, milestone-gated |
| Quality Records | Best so far per recipe | New quality band on that recipe | Bounded by recipe count |
| Region Map | % explored | Expeditions to new places | Discovery-gated |
A glance at the session opening shows multiple "almost there" hooks at once. None advance by repetition.
Capability stack — the positive constraint
A craft attempt's success depends on the sum of:
| Factor | Gates | Built by |
|---|---|---|
| Engineer career stage | Quality ceiling | Apprentice → Journeyman → Master, milestone-gated |
| Engineer traits | Modifiers (Lucky, Steady, Hasty, Drunk) | Hire pool quality |
| Station tier | Recipes attemptable at all | Crafted upgrades + materials |
| Tools equipped | Discipline-specific bonuses (Masterwork Smith's Hammer) | Crafted in-game |
| Materials provided | Output ceiling (Crude inputs can't yield Masterwork) | Expeditions, market, rewards |
| Target quality band | Difficulty multiplier | Player choice, opt-in |
Effective capability vs. recipe demand → outcome.
Attempt risk gradient (over-capability attempts)
| Mismatch | Outcome |
|---|---|
| Mild | Result drops one quality band below target; materials consumed |
| Moderate | Chance of total failure, material waste, tool damage |
| Severe | Engineer fatigue/injury, station damage, occasional cursed outcomes |
| Long-shot | Small chance of against-the-odds Masterwork — Library entry, story moment |
Recipe from expedition you're under-capability for? Burn the materials trying now, or save the scroll and build up? Either is a real decision.
Pillar additions
- Capability matters. Items, gear, stations, engineers, and materials compound systemically.
- Friction is real. Attempts above capability cost real things. Sends above capability risk real things.
- Progression visibility. Players always have 3+ visible bars they're proximate to advancing, each by varied play.
Expedition system — substantial expansion
04-expeditions.md treats expeditions as "AFK timer with procedural narrative report on return." Major shift.
Risk tiers with visible legibility
Risk is gradient, telegraphed before the player commits.
| Tier | Example | Failure modes | Stakes |
|---|---|---|---|
| 1 | Moo-Moo Meadows | Empty haul, minor scrape | Time only |
| 2 | Misty Hollow | Minor injury, scuffed gear | Days off-duty |
| 3 | Burned Hills | Serious injury, gear loss | Weeks off-duty |
| 4 | Ravenwood Crypt | Death, capture, permanent loss | Roster member gone |
| 5 | The Inverted Spire | Party wipe, story consequences | Multiple losses, rep hit |
Pacing principle: tier 1–2 frequent and chill, tier 4–5 are campaigns you prepare for. Before sending: visible math ("Dora vs. Ravenwood: 60% severe injury, 25% death, 85% return empty-handed."). Telegraphed deaths are story; surprise deaths are punishment.
Interactive event stream (the CK3 layer)
Expeditions surface decision/flavor moments into a queue (sidebar feed), not as modal interrupts. Player works them at their own pace.
Event mix per expedition:
- ~70% flavor pings — zero-choice texture ("Brom found clover honey, +1"). Cheap to author, constant pulse of life-happening-out-there. AI generates these in batches.
- ~25% light decisions — binary, low stakes
- ~5% substantive decisions / story moments — real branches, real stakes
Trait- and capability-gated dialog: this is where roster identity matters most. "Brom's Lucky trait reveals a third option." "Read the inscription (requires Lettered — none of your party has it)." Equipped gear changes available options.
Auto-resolve via character traits
If the player ignores an event too long, the party defaults to a trait-driven auto-choice. The auto-choice IS the character. Cowardly Dora retreats. Brave Brom pushes through. No nag pressure; character expression preserved.
Player-controlled return (significant shift)
| Pattern | Example | Feel |
|---|---|---|
| A. AFK timer | Melvor mobile | Set duration, get loot |
| B. Active mission | XCOM, Darkest Dungeon | Escort scripted party through run |
| C. Open-ended + player recall | This design | Adventurer lives in field, you call them home |
Pattern C is new for the crafting-guild genre. Adventurer remains in the field, generating events and loot, until the player recalls them. Closest analog: Stardew daytime exploration + CK3 event streams.
What this enables:
- Open-ended exploration — deep dives in a region searching for specific rare drops
- Time-as-resource — adventurer-hours budget across the roster
- Risk compounds with time — Tier-4 region kept-running is very dangerous
- Triage decisions when carry is full (the onyx example)
Forcing functions for return
Player-controlled recall, but with mandatory-return conditions:
- Fatal injury or near-death
- Out of rations
- Captured (rescue required, not recall)
- Patron deadline pressing on inventory needed at the guild
Death/loss mixed roll
When things go wrong: not always permadeath. Roll across:
- Permadeath (Darkest Dungeon — gone)
- Captured / ransomed (recoverable but expensive, time-pressured; possible side-quest)
- Long-term wounded (returns eventually, scarred — XCOM)
- Lost gear/inventory only (the run was a wash; person survived)
Variance keeps return moments narratively alive. Permadeath stays on the table for severe mismatches.
Carry capacity
Hybrid slots-with-weight-tiers:
- N normal slots, each 1 item
- Heavy items (large onyx, masterwork weapons, large recipe tomes) take 2 slots
- Bag/saddlebag/cart capacity is another crafted-item axis — cobbler crafts the Pack of Holding
Each rare find when carry is full is its own triage moment.
Consumables as core economic driver (new framing)
The expedition envelope. Every expedition is bounded by what the party brings:
- Rations → how long they stay (no food = short auto-return timer)
- Carry capacity (saddlebags, pack mules) → how much they bring back
- Survival kits (torches, ropes, antitoxins, climbing gear) → what zones they can survive in
- Combat consumables (potions, scrolls, bombs) → how many encounters they can stomach
Unprepped trio auto-returns in 5 minutes with rabbit pelts. Same trio with Dark Elven Lumbass Bread, Five-Alarm Chili, Sturdy Saddlebags, and healing draughts stays out an hour and brings back several times the haul.
What this fixes:
- Closes the economy loop. Materials → crafted consumables → expeditions burn them → expeditions yield materials. The economy was open at one end before.
- Tradeskill breadth gets structurally justified. Alchemy, Cooking, Leatherworking, Tailoring all feed expedition capability. Pure-smithing guild bottlenecks on expedition depth.
- Engineer roster specialization becomes strategic. "I need an alchemist before tier-3 viability" is a real gate.
- Pre-expedition planning is a real surface (provisioning UI) without a new mini-game.
- Everything crafted has a downstream destination. Nothing is dead loot.
Balance target: 2–4× net multiplier (prepped vs unprepped), not 10×. Sim finds the actual number. The user-facing feel of "way more loot with prep" can still be true at 3×.
Named character emergence and titles
A unification that emerged this session: all named characters in the world — patrons, engineers, adventurers, specialists — start generic and crystallize into named identities through specific gameplay moments. The player doesn't pick from a static roster on day one; they grow the cast through play.
Character lifecycle (unified across roles)
generic role → named identity → signature crafts/feats → arc evolution → legacy
"Apprentice "Miles Tannen, Rhinestone Love Handles, Reaches Master, Heirloom items
Leatherworker" Lucky Halfling Studded Doom-Boots, leaves for own bearing his name
Tanner of Sunken The Bag of Holding shop → becomes in the Library
Reach" "Lover's Embrace" a patron
The same model produces three patron origins as variations on one system, not three separate systems:
- Encountered patrons — Dorothy the Undead-Exploder, a rare encounter in Ravenwood Crypt. Survive the encounter; she takes interest in your guild; eventually commissions specialized arms.
- Groomed-from-roster patrons — Miles Tannen reaches Master tier; eventually opens his own shop in Goldshore; now sends orders to your guild rather than crafting in it.
- Reputation-unlocked patrons — At Guild Rank 5, Lord Aldric of Westmark notices you and begins commissioning.
Naming triggers (generic → named)
| Trigger | Character class | Example |
|---|---|---|
| Crit on a signature craft | Engineers, specialists | Apprentice → "Miles Tannen" on the saddlebags crit |
| Survival of a high-tier expedition | Adventurers | Returns alive from Ravenwood → "Dora the Undaunted" |
| Milestone count | Anyone | First Masterwork / First Legendary / 10 Fine crafts |
| Rare encounter in the field | Future patrons | Dorothy the Undead-Exploder |
| Discovery moment | Adventurers, specialists | First to find Adamantine; first to read a crypt inscription |
| Time-in-roster + activity | Slow-burn | "She's been with us since the beginning…" |
The trigger determines the flavor of the identity — crit triggers produce craft-signature names; survival produces adventure-signature names; discovery produces lore-signature names.
Procedural naming + signature items
Given input traits + heritage + triggering event, AI batches:
- A name with backstory fit ("Miles Tannen, Lucky Tanner of Sunken Reach")
- A signature variant of the craft ("Rhinestone Love Handles" replaces "Dusty Saddlebags" as his go-to)
- A short flavor blurb for the Library
Signature items are where whimsy compounds. Generic items are functional; signature items are characterful. Same stats, different soul. Players collect characters' signature crafts the way Pokémon trainers collect badges.
Titles (LotRO-style layer)
Each named character has:
- A name (set on crystallization)
- A pool of earned titles (accumulated through specific deeds)
- One displayed title (player's choice)
- A locked flag (set on death/retirement; freezes display state and item attributions)
Display format:
Miles Tannen, the Harebrained Lucky Halfling Tanner of Sunken Reach
Trigger taxonomy (whimsy + serious pair per achievement)
| Trigger type | Example | Whimsy variant | Serious variant |
|---|---|---|---|
| Quantitative count | Crafted 100 saddlebags | "The Saddle-Stuffed" | "The Provisioner" |
| Subject-specific | Collected 50 rabbit pelts | "The Harebrained" | "Keeper of Hares" |
| Quality milestone | First Legendary | "The Touched" | "The Brilliant" |
| Survival | Survived 10 Ravenwood runs | "The Twice-Wraithed" | "The Crypt-Tested" |
| Discovery | First to find Adamantine | "The Lucky Idiot" | "The Bold" |
| Patron | 20 orders for Lord Aldric | "Court Pet" | "Court Favorite" |
| Easter egg | Crafted at midnight | "The Night-Owl" | "The Vigilant" |
Each achievement seeds two title options. Player picks per character (or per earn, or with a default setting). Tone register flexes to the player.
Lost characters become legacy
When is_locked flips (death/retire):
- Display freezes. "Miles Tannen the Harebrained" stays that way even if future achievements would've promoted his title.
- Item attribution permanence. Rhinestone Love Handles crafted by Miles stay attributed to "Miles Tannen the Harebrained" forever. Legacy items carry their maker's identity as it was.
Dora's +7 Teddy Bear of Banish Undead, after she falls in Ravenwood, can be equipped on another adventurer — but it's never not Dora's bear. The death/loss mixed roll now carries item-narrative weight.
Why this is structurally significant
- Player agency in casting. Two players end up with entirely different rosters and stories. The cast isn't designed by the designer; it's grown by the player.
- Emergent narrative without authored prose. "Miles became Miles on day 8" — the player remembers because they were there. Cheap to produce, deeply meaningful.
- Investment compounds; losses sting more. Each named character is earned.
- AI is the engine. Procedural names, signature items, title pools, flavor blurbs — all perfectly AI-batched under a spec.
- Roster size constraint earns new purpose. Was a balance number; now a constraint forcing emotional investment. You can only develop so many; choose wisely.
- Customization without dark patterns. Title choice is expression, not gating. No premium title pack, no FOMO. Player agency in tone.
Data model sketch
Character {
id
procedural_name // set on crystallization
base_role // Apprentice Leatherworker, Recruit, etc.
heritage // Halfling, Dwarven, ...
traits // [Lucky, Steady, ...]
state // generic | named | retired | dead | legacy
earned_titles // [{title_id, earned_at, variant: whimsy|serious}]
current_title_id // the displayed title
is_locked // becomes true on death/retire; freezes display + item attributions
signature_items // [item_id, ...]
trigger_history // [crafts, expeditions, milestones — for title progress]
}
Item {
...
crafted_by_character_id
crafted_by_attribution_snapshot // captured at craft time; never updates
}
The sim has to model emergence rates — strategies that mass-recruit and burn through generics produce very different cast graphs than strategies that invest deeply in a few. Title-earning rates are a sim-tunable lever.
Tone reinforcement: whimsy is in scope, and a competitive advantage
10-tone.md already cites Machinarium + Quake (silly-meets-heavy). This session reinforces and sharpens:
- Dark Elven Lumbass Bread, Five-Alarm Chili, +7 Teddy Bear of Banish Undead, 90lb-of-arbitrary-weight onyx, Grobb Plaguebringer's spring potpourri
- Voice spans named items, named adventurers, named expeditions, expedition events, titles
- A thousand serious medieval crafting games exist; whimsy is the differentiator
- Lean in: not everything serious, not everything silly. Tonal range is the texture.
Tonal anchor: darker WoW × Shrek
Late-session reframing: the target tonal triangulation is "darker WoW crossed with Shrek." WoW was unafraid to put the grim plague-stricken-village quest right next to the goblin punt-yourself-from-a-slingshot quest. Shrek subverted fantasy seriousness while still earning real emotional beats. Both leaned into "we know this is silly, and also this matters." That's the range.
Tools of the voice:
- Play on words (Lumbass Bread, Plaguebringer's potpourri, Whirligig Crown)
- Pop-culture jabs in moderation — winks, not load-bearing references
- Anachronisms welcome (rhinestones, propeller hats, teddy bears, the absurd-weight onyx)
- Earnest emotional beats when they come — roster grief, character retirement, legacy items
Constraint: don't get carried away. The world is mostly serious; whimsy is the texture on top. If everything's a joke, nothing lands. If the joke surface is too thin, the whimsy stops being a register and becomes a tic.
Design tenet: optimization creates absurd outcomes, and we lean in
Most games hide stat-min-maxing behind transmog / glamour systems — "make it look the way you want." This game doesn't. Crafted gear identity overrides character aesthetic. If Miles Tannen's Whirligig Crown gives +12 Wisdom, your terrifying necromancer wears the propeller hat. The Archmage shows up in Lucky Bunny Slippers because they're BiS for that slot.
Why this matters as a design choice:
- Player optimization is honored, not hidden. The cost is visible silliness; that's the trade.
- Crafter identity persists in worn gear. "That's clearly Miles's hat" is part of why you remember Miles.
- Comedy emerges from the system, not from authored jokes. The propeller-hat-on-the-Archmage moment is funny because the player chose it for rational reasons.
- Signals the game has a sense of humor about itself — which makes the serious beats land harder when they arrive. The grief over Dora's death in Ravenwood works because the rest of the game has shown it can laugh.
Production characteristics (session synthesis)
Observations that emerged late in the session, worth capturing because they validate (or constrain) the production envelope:
Production feasibility
- Not asset-heavy. Everything is procedural — items, characters, signature variants, expedition events, titles, narrative blurbs. AI tooling handles the bulk; no hand-illustrated cutscenes or keyframed animations required.
- No bespoke animation pipeline. Shaders + code tricks (tweens, particles, reveal choreography) carry the visual layer. No animator hire, no rig system, no skeleton/IK work.
- No combat to simulate. Expedition resolution is dice + capability + traits + narrative events. No real-time combat, no melee/ranged math, no enemy AI. Enormous scope relief.
- No twitch mechanics, low skill ceiling. Master's Touch is opt-in skill-timing with auto-resolve. Players who can't or don't want timing aren't locked out.
- Young-player accessible. Whimsy + low skill ceiling + emotional investment lets the game work for kids without designing down. Adults get the same experience.
- The retention engine is care, not pressure. Roster grief, signature items, earned titles, patron arcs — emotional investment carries the long tail.
Worldbuilding stance: deep lore, shallow world
There is no walking around. No avatar in a town square. No environmental storytelling through level geometry. Lore lives entirely in:
- Item descriptions and flavor blurbs
- Expedition event text and character barks
- Patron and adventurer backstories that surface in event prompts
- Library entries for crafts, characters, regions
- Region descriptions and rumored encounters
This requires deep written content in narrow places, but no expansive world authoring. The game sits on something that could be a larger story — the world could have an overarching plot — but the design is intentionally shallow on the macro, rich on the micro. The player imagines the world from textures they encounter; the game doesn't insist on filling it in.
Right tradeoff for solo / AI-augmented production. World-walking would explode scope; lore in flavor text is AI-batchable and fits the established voice.
The texture, in one sentence
"Grobb Plaguebringer just returned from the depths of Ravenwood Crypt with essence of nightshade to put the final touches on his spring potpourri mastercrafted skill-up."
Named character (Grobb), earned title (Plaguebringer — serious variant on a grim subject), tier-4 expedition return (Ravenwood, with named drop), signature craft (spring potpourri), absolute whimsy on grim source material. If we ship 200 sentences with this texture, we have a game.
Still-open threads (parked for next session)
- Per-discipline capability vs. single engineer rank — breadth pillar suggests per-discipline (Master Smith AND Common Loom-worker), but UI/state complexity is real
- Per-recipe memory — does the guild remember masterworking the Falchion? Diminishing returns on familiar recipes vs. fresh thrill of new?
- Simulator structure — discussed inputs/outputs, haven't designed it
- Death/loss mixed-roll probabilities — directional decision made, specific roll weights not pinned
- Replayability shape — Steam expects 8–30 hr; NG+, ascension, sandbox, or "you've seen it"?