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.
This commit is contained in:
flan
2026-07-15 03:48:54 +00:00
parent fcfb32fff7
commit 036facab29
+34 -2
View File
@@ -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