4.7 KiB
Factorio Mod — Deterministic Quality System (design notes)
Personal project (Mike). Status: DESIGN / pre-build. Not started building. Companion:
factorio-mod-anatomy.md(how a 2.0 mod is structured). Resume by reading both files. Next concrete step = the feasibility check (bottom).
Concept (the pitch)
Replace Factorio 2.0's RNG quality with a deterministic, cost-based one. Vanilla raises quality by chance (quality modules roll a %-chance for a better output; recycler upcycling loops the same gamble). Mike doesn't like the dice. Instead: raise quality by spending more resources through a dedicated machine — guaranteed, no chance.
Locked decisions (2026-06-23)
-
Full replacement. Remove the chance element entirely; the new machine is the ONLY way up.
-
Keep vanilla quality tiers + their perks UNTOUCHED. Normal → Uncommon → Rare → Epic → Legendary, with vanilla's stat bonuses (Legendary machine faster, Legendary module stronger, etc.). Those bonuses live in vanilla's
qualityprototypes + the engine, so the design is to leave the quality prototypes alone and only change how a tier is obtained. Perks inherited free. -
The Refinery machine runs deterministic per-tier-step recipes:
N × (item @ tier K) → 1 × (item @ tier K+1) [+ byproduct]. (Mike's example: copper plates → a better copper plate via a "modified recycler/refiner.") -
Cost = escalating + compounding resource expense (no RNG). Mike's curve: "tier 2 is 3×, tier 3 is 4× that, and so on" → per-step ratios 3 / 4 / 5 / 6:
Step Per-step ratio Total Normal-equivalents Normal → Uncommon 3× 3 Uncommon → Rare 4× 12 Rare → Epic 5× 60 Epic → Legendary 6× 360 Exact numbers TBD; ratios to be startup settings for tuning.
Open decisions (to settle next)
- Quality modules: remove entirely (cleanest) vs leave inert (exist, do nothing — less likely to break other mods). Either way their RNG bonus is neutralized (which also kills recycler upcycling, same mechanic). — UNDECIDED.
- Byproduct (slag): keep a light byproduct you must reprocess/void (adds factory friction; Mike liked this earlier) vs pure-cost (input ratio is the whole balance). Lean: keep light, settings-dialable to zero. — UNDECIDED.
- Exact cost numbers — TBD (curve shape agreed, magnitudes not).
- Item scope — auto-generate refine recipes for all quality-eligible items (intermediates + machines + modules + equipment), gate categories via settings. Start curated (plates/gears/ circuits) then expand? — lean auto-gen, gated.
- Refinery details — one generic machine vs tiered/category machines; does the Refinery's OWN quality speed it up (nice recursive incentive)? — UNDECIDED.
- Extra cost dimensions — energy/time scaling per tier, or a catalyst/reagent (a "flux" item or fluid) for a second supply chain. Deferred (adds depth + complexity).
Implementation approach (sketch)
- Data-stage recipe generation: loop over
data.rawquality-eligible items and emitrefine_<item>_<K>_to_<K+1>recipes automatically → scales to modded items, no hand-writing. - New prototypes: a
Refineryentity (could reuse the recycler model/graphics); if byproduct kept, aslagitem + a disposal/reprocess recipe (slag → small base material at energy cost). - Neutralize RNG: zero out (or remove) quality-module quality bonus; audit + neutralize any other vanilla/Space-Age quality sources (asteroid crushing / mining quality) so nothing rolls a random tier.
- Dependencies: requires
quality;space-ageoptional (handle its extra quality sources).
FOUNDATION TO VERIFY FIRST (load-bearing — do before building)
- Can a 2.0 recipe deterministically output a HIGHER quality than its ingredients? i.e. a
recipe with explicit
qualityon ingredients (Normal) and on results (Uncommon), with NO RNG. Believed yes (recipe prototype supports per-ingredient/per-resultquality) — must confirm against lua-api.factorio.com prototype docs. - Cleanest way to neutralize quality-module RNG (and thus recycler upcycling), and the full list of vanilla/Space-Age quality sources to disable.
Run via Grok (ask-grok.sh); Gemini CLI auth is currently broken on GURU-5070 (see errorlog —
needs interactive gemini re-login).
Tooling / references
- API docs:
lua-api.factorio.com— prototype docs (data stage) are separate from runtime docs. - VS Code + FMTK (Factorio Modding Tool Kit) extension for prototype + runtime autocomplete.
- Wiki tutorial:
wiki.factorio.com/Tutorial:Modding. Portal:mods.factorio.com.