From 036facab296f02b167e34d9f90780bdff85fea6c Mon Sep 17 00:00:00 2001 From: flan Date: Wed, 15 Jul 2026 03:48:54 +0000 Subject: [PATCH] roadmap: generic vessels + runtime contents (Noita-flask model) Hooch reframed per user directive: not a bespoke item but FP_Hooch the substance, in generic vessels whose contents are runtime state -- fill, ferment, pour, drink, mix. Staged: runtime substance -> drink-any-fluid -> contraband content tag -> pour+mix -> ferment-model overhaul (age+dilution+sealed/open+temperature+spoil, mirroring CompRottable). Any fluid drinkable with different consequences; blood is a substance; any drink can breed addiction at a per-fluid rarity, modified by mental health + circumstances. --- ROADMAP.md | 36 ++++++++++++++++++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/ROADMAP.md b/ROADMAP.md index ce23e2c..1ad319f 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -301,8 +301,30 @@ built on the existing `SubstanceDef` (data) + `CompVessel` (delivery) + `CompFer disease + humiliation in one throw. "Mix everything": the blend is a runtime list on the vessel, defaulting to the def's single substance when unmixed, so every existing vessel still works. -Staged so each ships green: **hooch → liquid-container fermentation → mixing.** The vessel data model -is built mixture-capable and site-aware from the start so none of it is a later refactor. +**Reframed 2026-07-15 (user directive): vessels are GENERIC, contents are RUNTIME.** Hooch is not a +bespoke item — it 1:1 models piss *except it is flammable*. A vessel is a generic container; what is in +it (piss, hooch, feces, a blend) is instance state that can be **filled, fermented, poured between +vessels, drunk, and mixed**. So there is no `FP_Weapon_Hooch`; there is `FP_Hooch` (a substance with a +`Flame` damageDef) and a `CompVessel` whose `substance` is now runtime. Any fluid is **drinkable with +different consequences** — a substance carries a *drink outcome* (hooch → alcohol, piss → sickness, +feces → disease) alongside its *throw* outcome. Staged, each green, piss harness guarding throughout: + 1. **Runtime substance on `CompVessel`** — instance field (default = def's substance), scribed; + throw/splash/label read it. Vessels become substance-agnostic. (Def names kept to avoid a + breaking rename; label shows contents at runtime — "jar of hooch".) + 2. **Drink any fluid, with different consequences** — `SubstanceDef.drinkOutcome`; vessels + ingestible, applying the current substance's consequence (hooch → alcohol high, piss → sickness, + feces → gut rot, **blood** → nutrition + a disturbing thought / possible disease). Every fluid is + a valid drink, just a worse or better idea. **Blood is a substance too** — a liquid like any + other, drinkable and throwable. And **any drink can breed addiction like a drug**: each + `SubstanceDef` carries an addiction *rarity* (hooch common, most fluids extremely rare), and the + per-drink roll is modified by mental health + circumstances (a despairing, mistreated pawn + addicts to things a content one never would) — same nature×nurture spine as propensity. + 3. **Contraband content tag** — a concealed vessel carries a generic content tag (Contraband stays + ignorant of `SubstanceDef`; the bridge interprets it), so "a hidden jar of hooch" redeems correctly. + 4. **Pour between vessels + mixing** — transfer contents (substance + age); a blend is a list; splash + and drink apply every constituent's effect. + 5. **Fermentation-model overhaul** — age + top-up dilution + sealed/open + temperature (mirror + `CompRottable`) + spoil threshold; applies to every vessel, piss included. **Potency model (corrected 2026-07-15): age + storage, NOT container size.** A liquid's potency is a function of how long it has fermented and how it is stored (a *sealed* vessel ripens and holds; an @@ -314,6 +336,16 @@ prisoner fills once and hides *ages to full potency*. So "a jar of old piss and both make sense — it is the usage pattern, not the vessel, that decides. Implementation: track age as a volume-weighted average, diluted on each add; sealed/open scales the ripen rate. +**Temperature + spoilage (2026-07-15): mirror vanilla food rot.** Fermentation is temperature-driven, +exactly like meat — warm speeds it, a freezer nearly halts it, and past a point it **spoils** (goes +from potent to ruined/maximally foul). Rather than invent this, reuse the vanilla mechanic: +`CompRottable` already tracks temperature-weighted rot progress for food. The ferment model should +lean on that same curve (or `GenTemperature`-driven accumulation) so "spoils like meat" is literally +the meat code path — a prisoner's stash left in a hot cell turns fast, one in a cold one keeps. This +makes the whole substance model a **fermentation-model overhaul** of `CompFerment` (age + dilution + +sealed/open + temperature + spoil threshold), sequenced AFTER the hooch item ships, since it applies +to every vessel — piss included — not just hooch. + ## Compatibility — the non-negotiable The suite must load and run cleanly alongside the **all-time most-subscribed Workshop mods**, not