# StixsworldHD — Ungodly AI, Staff, Crime & Economy Overhaul for **Two Point Museum** **Version:** 1.0.3 **Game:** Two Point Museum (base game + all DLC) **Loader:** BepInEx 6 (IL2CPP, x64) **Author:** StixsworldHD (StixsmasterHD4k) An ungodly, madly, vastly enhanced overhaul that rebuilds how a Two Point Museum *runs* — guest needs and behaviour, exhibit knowledge / buzz / prestige, expert research, staff wages and coverage, item upkeep, the whole economy, theft & crime — and bolts on four real-time "director/helper" systems that watch your museum and react every second. Everything is exposed through a documented config file **and** a built-in in-game settings window, every value has a gamer-friendly explanation with a sensible range, and the whole thing can be flipped back to 100% vanilla with a single switch — no restart required. This is the spiritual port of *StixsworldHD — Ungodly AI, Job, Epidemic & Pay Overhaul for Two Point Hospital*, re-engineered from the ground up for Museum's very different (DOTS/ECS, Latios-Framework, IL2CPP) internals. Every lever in here drives a **real** game system that was verified to exist in the shipping build — there are no placeholders and nothing is faked. --- ## 1. What this mod does At a high level it gives you total, safe control over six pillars plus four live systems: - **Guests** — how fast every need (food, drink, toilet, energy, entertainment, litter tolerance, environment) builds up, and how guests react (warning/urgent thresholds, how much each need matters, need capacity). - **Knowledge & Prestige** — exhibit knowledge level scaling, knowledge-rating gains, theme knowledge gains, and museum prestige gains. - **Research** — how quickly your experts push research/analysis forward. - **Staff** — a global wage multiplier, desired-salary scaling, a static movement-speed option, plus two real-time staff systems (coverage & auto pay-raises). - **Items & Upkeep** — exhibit/equipment wear speed. - **Economy** — global income multiplier, exhibit/room sell-value multiplier, a fixed ticket-price override, a one-time starting cash grant and a recurring monthly stipend. …and the four **Ungodly directors/helpers**: 1. **Dynamic Difficulty Director** — closed-loop rubber-banding that holds your museum at a target happiness. 2. **Staff Coverage Helper** — speeds staff up automatically when the museum gets busy/under-served. 3. **Crime & Security Helper** — reveals (and optionally evicts) disguised thieves through the game's own crime systems. 4. **Automatic Pay Raise Director** — keeps under-paid staff happy by topping their salary toward what they want. --- ## 2. Requirements - **Two Point Museum** (Steam), x64. - **BepInEx 6 (IL2CPP)** build — *bleeding-edge* BepInEx, **not** the BepInEx 5 line. The plugin targets the Il2CppInterop runtime and will not load on BepInEx 5. - A first launch with BepInEx already installed (so the `BepInEx/plugins` and `BepInEx/config` folders exist and the Il2Cpp interop assemblies have been generated). --- ## 3. Installation 1. **Install BepInEx 6 (IL2CPP x64)** into your Two Point Museum folder (the folder containing `Two Point Museum.exe`). After extracting, run the game **once** and let it sit at the menu for a minute — BepInEx generates its `interop` assemblies on that first run — then quit. 2. **Copy this mod in.** From this package, copy the `BepInEx` folder over your game's `BepInEx` folder so that you end up with: ``` Two Point Museum/ BepInEx/ plugins/ StixsworldHD-UngodlyAI-TPM/ StixsworldHD.UngodlyAI.TPM.dll config/ com.stixsworldhd.tpm.ungodlyai.cfg (created automatically on first run if absent) ``` The included `com.stixsworldhd.tpm.ungodlyai.cfg` is optional — drop it into `BepInEx/config/` to start from the fully-documented defaults, or just launch and the plugin will generate it for you. 3. **Launch the game.** Watch the BepInEx console / `LogOutput.log` for: ``` [Info :StixsworldHD ...] Ungodly AI, Staff, Crime & Economy Overhaul is online. Enjoy the chaos! ``` 4. **Open the settings window in-game with F6** (rebindable). > Uninstall = delete the DLL (and optionally the `.cfg`). Nothing is written to your save; the mod only > changes live, in-memory game values. --- ## 4. The in-game configuration window (F6) Press **F6** at any time (in a menu or in-museum) to open the **Ungodly control panel**. It is a fast, self-contained window drawn by the mod itself: - **Solid, opaque, readable** dark panel (no see-through clutter over your museum). - **Draggable** — grab the title bar to move it. - **13 section tabs** down the left; click to switch. - **Mouse-wheel scrolling** through the settings of the active tab. - Each setting shows a **control** plus a **plain-English explanation** and its **min–max range**: - on/off settings are **toggles**, - numbers use **− / +** steppers **and** a **type-in box** for an exact value (auto-clamped to range), - the Difficulty Director **mode** is a ◀ / ▶ cycler, - the menu key has a **Rebind** button (click it, then press any key). - A big **MOD ON / MOD OFF** master toggle lives in the title bar. - Footer buttons: **Save Now**, **Reset Section**, **Reset ALL**, **Close**. Changes apply **live** the instant you make them, and are **auto-saved** to the config file a second after your last edit (or immediately via *Save Now* / *Close*). > Why a hand-built window? Museum's IL2CPP build was aggressively stripped of Unity's high-level IMGUI > helpers (no sliders, no scroll-views, no list controls, and no run-time `GUIStyle`/`GUIContent`/`Texture2D` > constructors). This panel is built only from the primitives that survived, which is why it uses steppers > + type-in boxes instead of sliders. > > The window is toggled through the IMGUI event stream (not by polling `UnityEngine.Input`), so the F6 key > works whether the game uses the legacy Input Manager or the new Input System. On first run the BepInEx log > prints `[GUI] OnGUI is live …` — if you ever see *that* line but the panel won't open, your menu key is > simply bound to something the game also uses; rebind it in the `.cfg` (`ConfigMenuHotkey = F7`, etc.). --- ## 5. The configuration file `BepInEx/config/com.stixsworldhd.tpm.ungodlyai.cfg` is a standard BepInEx config file. Every entry carries: - a `##` gamer-friendly description, - its `# Setting type`, - its `# Default value`, - and its `# Acceptable value range` (or list of values). You can edit it with the game closed, or live in-game (the window and the file are the same data — they never drift apart, because both are generated from one shared schema). `1.0` almost always means "vanilla / unchanged". --- ## 6. Settings at a glance (13 sections, 67 settings) - **00 — General & Difficulty Director** — master switch, menu hotkey, "apply balance overrides" switch, and the full Dynamic Difficulty Director (mode, target happiness, band, aggression, update interval, max need/energy squeeze, max income swing, and which layers it may touch). - **01 — Guest Need Rates** — per-need build-up speed for Food/Hunger, Drink/Thirst, Toilet, Energy, Entertainment, Litter and Environment, plus an "all needs" master multiplier. - **02 — Guest Behaviour & Satisfaction** — warning-threshold, urgent-threshold, need-importance and need-capacity multipliers. - **03 — Knowledge, Buzz & Prestige** — enable switch, exhibit knowledge-level multiplier, knowledge-gain multiplier, theme-knowledge-gain multiplier, and prestige-gain multiplier. - **04 — Research & Studies** — enable switch and research-speed multiplier. - **05 — Staff Wages & Retention** — global wage multiplier, plus desired-salary scaling (enable + amount). - **06 — Staff Coverage & Movement** — optional static staff movement-speed multiplier (enable + amount). - **07 — Items, Maintenance & Hazards** — exhibit/equipment wear-speed multiplier (enable + amount). - **08 — Economy & Finance** — income multiplier, sell-value multiplier, ticket-price override (enable + price), one-time starting grant (enable + amount), monthly stipend (enable + amount). - **09 — Performance** — verbose logging toggle and the shared helper update interval. - **10 — Staff Coverage Helper** — the dynamic coverage system (enable, base boost, busy boost, guests-per-staff "busy" point, max boost). - **11 — Crime & Security Helper** — enable, auto-reveal, reveal interval, reveals-per-pass, auto-evict, suppress-raids. - **12 — Auto Pay Raise Director** — enable, update interval, raise threshold, overpay buffer, max raise per step, quiet mode. --- ## 7. The Dynamic Difficulty Director A closed control loop. On its interval it reads your museum's **real** KPIs — average guest happiness (falling back to museum rating, lightly blended with average staff happiness) — and converts the gap to your target into a single signed "intensity". That intensity is smoothed for stability and then mapped onto three live layers it can push: - **guest need decay** (makes needs build faster/slower), - **energy drain**, and - **museum income** (eases your wallet when it makes the museum harder, and vice-versa). Modes: - **Off** — the director does nothing; only your manual settings apply. - **Relax** — one-way: it will only ever *ease* the museum when guests are struggling; it never makes things harder. Ideal for casual/builder play. - **Adaptive** — rubber-bands up **and** down to hold average guest happiness inside your target band. - **Hardcore** — treats your target as a comfort *floor* and ratchets difficulty **up** the better you do, relenting only as you approach that floor. - **Custom** — uses your Target / Band / Aggression numbers exactly, both directions. You control the target, the dead-band, the aggressiveness, the update cadence, the maximum squeeze on needs and energy, the maximum income swing, and which of the three layers it is even allowed to touch. --- ## 8. The Ungodly Staff Coverage Helper Keeps a busy museum covered without forcing you to over-hire. On its interval it measures how under-served the museum is (guests per staff member) and gives **all staff** a real-time movement-speed boost that scales with that pressure — so they get where they're needed faster exactly when it matters. It only ever speeds staff **up**, is hard-capped for stability, and is re-asserted every pass so it survives the game's own recalculations. You set the base boost, the extra "busy" boost, the guests-per-staff point considered fully busy, and the maximum boost. (A simpler *static* speed multiplier also lives in section 06 for when you just want a flat change; the dynamic helper takes precedence when both are on.) --- ## 9. The Ungodly Crime & Security Helper Tips theft/crime challenges in your favour through the game's **own** `CrimeManager`. When enabled it: - **auto-reveals** disguised criminals/thieves a few per pass, so your guards can actually act on them instead of the thief blending in unnoticed (the single biggest anti-theft quality-of-life win), - can optionally **auto-evict** revealed criminals before they steal (off by default — many players prefer to let their guards make the catch), and - can optionally **suppress raids** by pinning the museum's crime level to its calmest setting. It does **nothing at all** when there's no crime present, so it's safe to leave on. You control the reveal cadence and how many are revealed per pass. --- ## 10. The Ungodly Automatic Pay Raise Director Real-time staff retention. On its interval it walks your staff, finds anyone paid below what they want (by more than a slack you set), and raises them toward their desired salary **plus** a small buffer using the game's own salary system. It **only ever raises** (never cuts), and each jump is clamped so your monthly wage bill grows smoothly rather than spiking. You set the interval, the "act when paid this far below desired" threshold, the overpay buffer, the per-step cap, and whether raises are silent. --- ## 11. Performance - All hot paths (the per-frame tick and every Harmony patch) read **pre-resolved plain fields** — no config lookups, no allocations, no boxing during play. - The directors/helpers run on **interval timers** (configurable), not every frame. - ScriptableObject need-definitions are located **once** and cached; only their multipliers are nudged. - Everything is wrapped in defensive guards so a missing lever on a future patch degrades gracefully (it logs once and is skipped) instead of stalling the game. - Turn on **Verbose logging** (section 09) only when diagnosing — it's quiet by default. --- ## 12. Compatibility - **Two Point Museum** base game **and all DLC** — the systems hooked are core managers/algorithms present across content. - Works alongside other BepInEx 6 plugins unless one fights for the same exact values (e.g. another mod that also rewrites guest need decay or staff salaries). - Save-safe: the mod never serialises anything into your save; it only changes live in-memory values, so removing it returns the game to stock behaviour. - Game updates: because every lever is resolved by name at runtime and guarded, a patch that renames or removes one system will simply disable *that* lever while the rest keep working. --- ## 13. Technical notes — what gets hooked Reconnaissance-first: every type/method/field below was verified to exist in the shipping IL2CPP build before a line of plugin code was written. - **Tick driver:** postfix on `CharacterManager.OnUpdate()` — captures the live manager, re-initialises on each new level, and drives all four directors/helpers in real time. - **Guest needs:** `GenericAttributeDefinition` ScriptableObjects (matched by name) — adjusts `_changeOverTimeMultiplier` (decay), `WarnThresholdValue`, `UrgentThresholdValue`, `Importance`, `MaxValue`. - **Director KPIs:** `MuseumStatsManager.GetStat(EMuseumStat…)` and `MuseumRatingManager.Rating`. - **Knowledge / prestige:** postfix on `ExhibitKnowledgeRatings.CalculateKnowledgeLevel`; prefixes on `ExhibitKnowledgeRatings.ModifyKnowledgeRating` and `ModifyThemeKnowledge`; prefix on `MuseumPrestige.Modify` (gains only — never amplifies penalties). - **Research:** prefix on `ResearchManager.Contribute(points, room)`. - **Economy:** `FinanceManager._incomeMultiplier`, `ApplyStaffWageMultiplier(...)`, `ModifyBalanceAsEarned(...)` (one-time grant via `Reward`, monthly stipend via `MonthlyGrant`), postfix on `OnTimelineMonthStart`; `TicketPriceManager.SetTicketPrice(...)`; postfixes on `RoomAlgorithms.GetRoomSellValue` and `GetRoomAndContentsSellValue`. - **Staff:** `StaffManager.Staff`; `StaffInstance.Salary` / `DesiredSalary` / `SetSalary(...)`; postfix on `StaffInstance.CalculateDesiredSalary()`; `CharacterInstance.NavSpeedMultiplierQualification` for coverage. - **Crime:** `CrimeManager.Criminals` / `RevealCriminal(...)` / `RemoveCriminal(...)` / `Level`. - **Item upkeep:** best-effort static `ECMaintenance.ChangeOverTimeMultiplier` (read by Burst jobs). GUI is a fully manual rect-based IMGUI (`GUI.Box/Label/Button/Toggle/TextField` + `GUIContent.Temp` + reused `GUI.skin` styles + the built-in white texture tinted for a solid background), injected as a MonoBehaviour via `ClassInjector`. --- ## 14. Changelog **1.0.3** — Title-bar readability fix. - The window header is now a taller bar with the title and subtitle on two clearly separated lines (the title was previously overlapping the subtitle). The title is also drawn slightly larger. **1.0.2** — GUI readability fix. - Setting descriptions are now measured with the font's real metrics and drawn as a single, correctly line-spaced block, so explanations no longer overlap each other or bleed into the next setting. - Widened the window and the text column for more breathing room; wrapping is now pixel-accurate to the panel width. **1.0.1** — GUI hotkey fix. - The F6 config window now toggles via the IMGUI event stream (`Event.current`) instead of polling `UnityEngine.Input`. On games that use Unity's new Input System the legacy `Input` API throws, which silently prevented the panel from opening; this path is input-system-agnostic and fixes that. - Added one-time `[GUI] OnGUI is live` / `[GUI] Update loop is live` log lines so it's obvious in the BepInEx log that the GUI component is ticking. **1.0.0** — Initial release for Two Point Museum (BepInEx 6 / IL2CPP). - Full port of the Hospital "Ungodly" architecture: engine-free shared config schema → BepInEx binder + offline `.cfg` generator → live runtime, with a hand-built in-game window. - 67 fully-working settings across 13 sections, every one backed by a verified real game lever. - Four real-time systems: Dynamic Difficulty Director, Staff Coverage Helper, Crime & Security Helper, Automatic Pay Raise Director. - Guest needs/behaviour, knowledge/buzz/prestige, research, staff wages/coverage, item upkeep and a full economy suite (income, sell-value, ticket price, starting grant, monthly stipend). - One-switch return to vanilla; live apply; auto-save; defensive guards throughout. --- ## 15. Credits Designed, reverse-engineered, written and built by **StixsworldHD (StixsmasterHD4k)**. Built on **BepInEx 6** and **Il2CppInterop**, patched with **HarmonyX**. Two Point Museum is © Two Point Studios / SEGA; this is an unofficial, save-safe fan modification and is not affiliated with or endorsed by them.