skills/schedule1/SKILL.md
--- name: schedule1 description: Modding Schedule 1 (TVGS, IL2CPP Unity + MelonLoader + Harmony). Authoritative on Schedule 1 game specifics: engine type, MelonLoader/Il2CppInterop references, eMployee mod root-cause findings, vanilla CookRoutine + StartMixingStationBehaviour internals, certainty-tracking discipline. Mod code lives in [`abix-/Schedule1Mods`](https://github.com/abix-/Schedule1Mods) (the `EmployeeReset` sidecar is the current shipped mod). Not for playing the game. user-invocable:
npx skillsauth add abix-/claude-blueprints skills/schedule1Install this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Per-game modding skill for Schedule 1 (TVGS). Engine is Unity IL2CPP: mods load via MelonLoader and patch via Harmony. This is a fundamentally different runtime from the UE5 + UE4SS games (Grounded 2, Outworld Station): no UE4SS, no ueforge, no Rust cdylib. Mods are C# DLLs (.NET 6) referencing the IL2CPP-interop assemblies that MelonLoader generates from the game's IL2CPP metadata.
Repo: abix-/Schedule1Mods. Current shipped mod: EmployeeReset
(a sidecar that fixes two chemist bugs caused by the
community eMployee v2.2.4 mod).
| Path (repo-relative) | What lives there |
| ------------------------------------------ | ----------------------------------------------------- |
| README.md | Mod inventory + build instructions + status table |
| EmployeeReset/EmployeeReset.csproj | Project file; refs MelonLoader / 0Harmony / Il2CppInterop |
| EmployeeReset/src/Mod.cs | The mod. MelonMod class, Harmony patches, F8 hotkey |
| EmployeeReset/README.md | User-facing install/config + technical notes |
| docs/employee-mod-bug-analysis.md | Full root-cause analysis of two stuck-chemist bug classes (line-cited into eMployee.dll v2.2.4 + Schedule 1 0.4.5f2) + upstream patch proposal |
| docs/ingredient-gate-fix-plan.md | Implementation plan for the ingredient-availability fix (predicate design, Harmony wiring, validation matrix) |
| docs/certainty-tracking.md | Verification matrix: which claims are empirically proven vs hypothesis; what evidence closes each gap |
Il2CppInterop.MelonLoader/ next to
the game exe; mods go in <game-root>/Mods/.0Harmony.dll shipped with
MelonLoader). Use [HarmonyPatch(...)] + Prefix / Postfix /
Transpiler.net6.0.0.4.5f2.2.2.4.cargo deploy doesn't apply here (that's the UE4SS world). Build
# from a mod's folder, e.g. EmployeeReset/
dotnet build -c Release
# output DLL: bin/Release/net6.0/<ModName>.dll
# copy to: <game-root>/Mods/
The csproj defaults to a Steam install path and exposes a
GameDir MSBuild property: override on the CLI for non-default
installs:
dotnet build -c Release -p:GameDir="D:\Games\Schedule I"
References resolve from $(GameDir)/MelonLoader/net6/ and
$(GameDir)/MelonLoader/Il2CppAssemblies/. The repo does NOT
vendor IL2CPP assemblies (license + per-version drift); a local
MelonLoader install is required to build.
Two distinct chemist failure modes, both caused by the
community eMployee mod v2.2.4. Read
docs/employee-mod-bug-analysis.md before changing anything
-- it carries the line-cited root cause and the upstream patch
proposal.
NullReferenceException at
StartMixingStationBehaviour+<<StartCook>g__CookRoutine|13_0>d.MoveNext
fires every ~30 s after save load while a chemist is wedged.
Root cause: eMployee's ResetEmployeeCore doesn't stop
coroutines. The vanilla CookRoutine keeps running with stale
station state; its MoveNext dereferences fields the reset
nuked.
Fix in EmployeeReset: hard-disable the eMployee Postfix that
re-registers the broken reset path; provide our own reset that
calls StopCook() first.
Vanilla CookRoutine yields on a condition (next ingredient
available) that becomes unreachable mid-cook. eMployee's
AUTO-RESET fires three times then abandons; chemist stays
wedged.
Fix in EmployeeReset: Harmony postfix on
StartMixingStationBehaviour.CanCookStart that gates the
predicate on ingredient availability. The canonical gate is
"check input slot quantity via GetMixQuantity": discovered
via cross-reference to vanilla's own ProduceMore path, which
does exactly that check before queueing.
The canonical gate (from docs/employee-mod-bug-analysis.md
"For the eMployee mod author"): a predicate that returns
bool CanCookStart iff every required input slot has
GetMixQuantity(...) >= required. Approaches rejected and why
are documented in the same section: do NOT reimplement those
without re-reading the analysis.
F8 triggers a comprehensive reset that:
CookRoutine instances.The reset is deliberately scoped wider than eMployee's:
the analysis (Fix 3) shows the narrow reset is what made
eMployee give up after 3 retries.
docs/certainty-tracking.md is the mandatory verification
matrix. Each claim about vanilla game internals carries:
The discipline exists because IL2CPP reverse-engineering produces plausible-but-wrong claims constantly (cpp2il recovers signatures, not bodies; Harmony patches that compile fine still miss IL2CPP boxing/unboxing layers). Never assert a vanilla behaviour from cpp2il alone: always pair with at least one in-game observation OR a dnSpy citation against the MelonLoader- generated Il2CppInterop assemblies.
When working on a new symptom:
docs/certainty-tracking.md with the new evidence
before patching.CanCookStart is the canonical example: vanilla
computes a bool, we AND it with our ingredient check.try { ... } catch { /* fall back */ } and log the failure,
rather than throwing. docs/employee-mod-bug-analysis.md
"Field-name resilience" has the canonical pattern.<<StartCook>g__CookRoutine|13_0>d)
are the IL2CPP-mangled form of the C# compiler's coroutine
closures. They're version-stable for a given vanilla version
but can shift on update; defensive Harmony attribute patterns
in Mod.cs show how to handle that.| Item | Status | Detail |
| ----------------------------------- | -------------- | ------------------------------------------------- |
| Engine known | yes | Unity IL2CPP |
| Mod loader installed | yes | MelonLoader (per user) |
| Il2CppInterop assemblies | yes | from MelonLoader generation |
| Game version under analysis | yes | 0.4.5f2 |
| eMployee version under analysis | yes | 2.2.4 |
| Symptom A fix | verified once | one in-game test |
| Symptom B fix (ingredient gate) | built | awaiting in-game verification |
| Certainty tracking discipline | active | docs/certainty-tracking.md |
The repo is named Schedule1Mods plural deliberately: room
for additional sidecar mods. Each new mod gets its own subdir +
.csproj, copies the build pattern from EmployeeReset, and
adds a row to the top-level README.md status table.
docs/employee-mod-bug-analysis.md before changing the
employee fixes: it's the spec.docs/certainty-tracking.md whenever a new claim is
asserted about vanilla. Hypotheses are tracked; assertions are
evidence-cited.ueforge skill here: the
ueforge skill is for UE4SS Rust mods, not MelonLoader C# mods.development
YAML standards for config files, Ansible playbooks, k8s manifests, GitHub Actions, docker-compose, and any project config. Built from the YAML 1.2 spec, yamllint defaults, and the practical pitfalls (Norway problem, type coercion, anchor gotchas).
development
--- name: ueforge description: ueforge framework: the base layer every UE4SS Rust mod in the Grounded2Mods workspace builds on. Authoritative on the composition model (Effect/Trigger/Skill), the Def/Registry/Instance/Controller pattern, hot reload, discovery, hardening doctrine, and the five framework modules (rpg, stacks, difficulty, inventory, damage). Use when writing or modifying code under `ueforge/` in [abix-/Grounded2Mods](https://github.com/abix-/Grounded2Mods), or when promoting a patte
tools
TypeScript and JavaScript standards. Sourced from [abix-/chromium-extensions](https://github.com/abix-/chromium-extensions) (Hush + filter-anything-everywhere). Use when writing TS/JS, including browser extension bootstrap shims, MV3 service workers, and small web frontends.
development
Pattern for an embedded HTTP control plane in a long-running process (game mod, simulator, GUI app, daemon) that exposes ALL runtime state plus the ability to drive ANY in-process operation. The first thing to build in a new project. It enables research, investigation, prototyping, and TDD. Use when starting any modding/embedding/long-running-process project, when adding observability or test surfaces to an existing one, or when answering "how do I see/poke this thing at runtime".