| Milestone | State |
|---|---|
| M0 Grey box · M2 Verdict loop · M3 Contamination · M5 Day cycle | Complete |
| M1 Chemistry + tests | Complete bar CI (#18) |
| M4 Co-op | Complete; not yet played in a real two-instance session |
| D1 Heat-treatment domain · D2 Deliveries and customers | Complete |
| F1 Frontend, options, accessibility | Complete |
| M6 Art | Underway — the lab has a building, distinct instruments and a tutorial |
| M7 Content and balance · M8 Weird layer | Not started |
A single player can play a full contract end to end: samples arrive by truck, are unboxed, reconciled against a delivery note, prepped, run, filed, and resolved — with the run surviving a quit. It remains pre-alpha.
Oiled Up is a 1–4 player first-person co-op game about running a heat-treatment oil laboratory. Receive customer samples, choose and operate tests, interpret the results, and file a verdict before a bad quench bath ruins parts or starts a fire. Unnecessary shutdowns are costly too, so there is no safe default answer.
The project is built with Unity 6 and URP. It currently includes the playable lab workflow, deterministic chemistry, contamination and calibration systems, customer deliveries and note reconciliation, host-authoritative multiplayer, proximity voice, run save and continue, and a full front end.
See docs/DESIGN.md for the full design and technical rules.
-
Co-op has never been played. Cartons, notes and slips all replicate as of #80, and the host-only boundary is enforced by the reflection sweep in
NetworkViewTests— but no two-instance session has actually been run. Build a player, join the Editor, and watch a guest carry a carton in and open it. -
The EditMode suite is not routinely run, and this is the largest single risk in the project. #76 fixed the deadlock that made it unrunnable, but that fix is itself unvalidated and the suite is now around 220 tests, most of them never executed. Several assert against generator output nobody has run — the tutorial's fixed-seed first day especially. Everything is compile-checked and boundary-checked by reflection, which is not the same thing. Run
Residue > Build > Run EditMode Testsand readTemp/oiledup-editmode.txt; it appends a line per test as it goes, so a run that dies partway still says how far it got. -
#18 CI is deliberately off while this is a single-developer project — the local path works, it is just operated by hand. Revisit if a second person commits, or if
maingoes red unnoticed again.
Polish and accessibility (F1)
- No language ships but English. #55 made translation possible, not done: ~500 strings now carry ids and named arguments, and a test fails any new literal reaching a draw call. Actually translating is a separate job, and so is the font — the in-world screens raster a pixel font with no glyph coverage past Latin, and a 32-column CRT is its own problem.
- Art pass (M6), content and balance pass (M7), and the optional weird layer (M8).
The assemblies are named Residue.* after the working title and are staying that way
(#34, closed as not planned). That is a decision,
not outstanding work.
Track the details in GitHub Issues.
git lfs install
git clone git@github.com:miopowered/OiledUp.git
cd OiledUp
git lfs pullAdd the project in Unity Hub and open it with Unity 6000.5.9f1. After package
restore, use these menu commands:
Residue > Content > Rebuild DefinitionsResidue > Content > ValidateResidue > Art > Rebuild PaletteResidue > Build > Rebuild Greybox Lab
Open Assets/Scenes/Boot.unity and press Play. That is the scene a build starts
in, and the menu, the save slot and the lobby all wake up there — opening
Lab.unity directly skips them and starts a run with no way back to a menu.
Residue > Build > Run EditMode Tests, then read Temp/oiledup-editmode.txt. It
appends a line per test as the run goes, so a run that dies partway still says how
far it got. The Test Runner window works too.
Do not drive TestRunnerApi from the Unity MCP tool — see the trap documented in
CLAUDE.md, which deadlocks the Editor after every test has passed.
When changing balance data, edit
Assets/Editor/Content/ContentTables.cs, rebuild and validate the definitions,
then run the full EditMode suite. Do not edit generated .asset files by hand.
Assets/Scripts/Data/ Definitions
Assets/Scripts/Chemistry/ Generation and measurement
Assets/Scripts/Gameplay/ Lab interactions and simulation
Assets/Scripts/Net/ Multiplayer and replication
Assets/Editor/ Content and art tooling
Assets/Tests/EditMode/ Automated tests
docs/ Design, workflow, and CI notes
The host owns samples, measurements, machines, economy, and consequences. Clients request interactions and never receive sample ground truth.
Read docs/WORKFLOW.md and CLAUDE.md.
- Use one issue per branch and one branch per pull request.
- Commit Unity assets with their
.metafiles. - Keep generated content and scene files out of manual YAML edits.
- Preserve the host-only
SampleGroundTruthboundary. - Keep chemistry deterministic and scientifically consistent.