Schedule I
You are viewing a potentially older version of this package. View Latest Version
Install

Details

Date Uploaded
2 months ago
Downloads
1.1K
Size
205KB
Dependency string
DooDesch-Snitch-1.2.0

Snitch

A performance profiler for Schedule I - find out what's actually slow.

🛟 Need help or found a bug? Get support at support.doodesch.de.

Snitch measures the cost and state of NPCs, trash, quests, and - through a tiny no-op API - any other mod's systems. It ships with a movable, resizable multi-window in-game overlay (each mod gets its own panel), a combined log timeline, and a live web dashboard so you can see frame times, section costs, and entity-state distributions in real time, and make your mod (or vanilla gameplay) faster.

Version Game MelonLoader S1API

Live dashboard · Wiki / docs · Modder example · Support

Features

  • Frame time distribution + fps + GC pressure - the load-bearing, build-independent truth.
  • Section costs - time named code sections (yours, or vanilla hot paths like NPCMovement.Update).
  • State distributions - NPCs by movement/visibility, trash by physics state, quests by state, + your own.
  • Per-mod panels - each mod that reports data gets its own toggleable, movable, resizable panel (counters, state, text, buttons, toggles).
  • Log timeline - a combined, chronological view of every mod's log output, filterable per mod.
  • Ablation A/B - toggle a subsystem off and measure the real frame-time delta (causal "total cost").
  • Live web dashboard - opens straight to your local game over WebSocket; telemetry never leaves your PC.
  • Honest - every number self-certifies; Snitch even reports its own overhead.
  • Modder API - a zero-overhead no-op when Snitch isn't installed; no hard dependency.

Requirements

Requirement Notes
MelonLoader 0.7.x (IL2CPP)
S1API ifBars-S1API_Forked

Use it

Press F6 for the overlay (or snitch hud on), then snitch start (or the Start button in the Overview window). Drag windows by the title bar, resize from the bottom-right grip; open each mod's panel from the Overview's windows list. Or open the web dashboard at snitch.doodesch.de - it auto-connects and shows everything live. Console verbs: start, stop, status, frame, top, sections, states, counters, hud, panels, panel <id>, act, toggle, log, vanilla on|off, ablate <lever>, levers, report. Reports go to Mods/Snitch/runs/.

For modders

Your mod's OnUpdate etc. are auto-timed with zero code (<YourMod>.OnUpdate). For more, drop in Snitch.cs (or reference Snitch.Api.dll) - a no-op when Snitch isn't installed:

using Snitch.Api;   // Profiler, Panel, StateSnapshot
Panel p = Profiler.RegisterPanel("MyMod", "My Mod");             // your own panel in the overlay + dashboard
p.Counter("Queue", () => _q.Count, "items");                     // a gauge
p.Action("Flush", () => Flush());                                // a button (replaces a debug hotkey)
p.Toggle("Verbose", () => _v, x => _v = x);                      // an on/off control
using (Profiler.Sample("MyMod.Work")) { ... }                    // hand-time a sub-section

Or just name a class SnitchProbe with a static Register() - Snitch discovers and calls it automatically. Full example: ScheduleOne-SnitchExample.

Notes

ProfilerRecorder engine counters are inert in Schedule I's IL2CPP build, so Snitch relies on frame-time + GC and self-measured section timing. Profiling is local and safe in multiplayer; state-mutating features run host-only. Everything is idle until you snitch start.

Credits

Built by DooDesch on S1API.

Thunderstore development is made possible with ads. Please consider making an exception to your adblock.