ByTheBook
Adds the 'Private Eye License' sync disk to the Weapons Locker. Allows for canvasing crime scenes without trespassing.
CHANGELOG
0.3.0
! Breaking: Version 0.3.0 is NOT compatible with saves created on older versions (< 0.3.0). Please start a new game when upgrading to 0.3.0 or later.
- Core: Migrated the Private Eye sync disk to SOD.Common (v2.1.0) using the builder + event pipeline (install/upgrade/uninstall) and PoliceAutomat sale location.
- Compatibility: Preserved legacy DDS sync disk strings and inject them after Toolbox initialization to avoid early-initialization issues.
- Upgrades: Reworked effect toggles to a simple flag manager (GuardGuestPass / CrimeSceneGuestPass / CrimePursuitSocialCredit) driven by SOD.Common events.
- UI: Fixed duplicate disk entries in the Weapons Locker by deduplicating PoliceAutomat sync disks on every Toolbox.LoadAll (runs with a late Harmony priority).
- Dialog: Kept legacy DDS-driven Guard Guest Pass dialog/preset with success/failure responses and daily replenish; maintained on‑duty “Talk To” injection for enforcers; success roll and “always pass” upgrade behavior unchanged.
- Cleanup: Removed obsolete Sync Disk UI linker patches (UpgradesLinkerPatches.cs) that are no longer needed with SOD.Common registration.
- Packaging: Added Thunderstore dependency
Venomaus-SODCommon-2.1.0to the manifest. - Config: Renamed keys to
SyncDisk.private-eye-costandSyncDisk.guard-pass-max-chance-social-credit-leveland added knobsEnabledSideEffects.social-credit-penalty-divisorandEnabledSideEffects.social-credit-penalty-cap. All options are pre-bound so they appear immediately in BepInEx config. - Migration: One-time migration of legacy config keys (with automatic cleanup of old entries) guarded by a side-file marker in Savestore.
0.2.3
- Feature: On-duty interaction injection for Enforcers at active crime scenes. “Talk To” is always surfaced; “Inspect” is surfaced when present. Applies when the target is the call guard or in the response list and the call state is responding/arrived.
- Behavior: No new actions added or priorities changed — we only toggle
enabled/displayon existing slots and never touchspecialCase, priority, or input bindings. - UX: HUD text/icons (
UpdateInteractionText,UpdateInteractionIcons) are refreshed when we force visibility so the buttons appear immediately. - Matching: Action label matching prefers per-slot
overrideInteractionName, falling back to presetinteractionName; comparison is case/whitespace-insensitive (@"\s+"normalization). - Diagnostics: Safe snapshot/dump helpers with stable
Interactable.id; skip empty action maps to avoid spam. - Compatibility: Postfix on
Interactable.UpdateCurrentActions()to preserve vanilla & other mods’ action building; robustInteractableController → Interactableresolution; extra null guards. - Performance: Single O(n) scan of
currentActions; effectively negligible with logging muted.
0.2.1
- Stability: Sync Disk linkage hardening for PrivateEye (IL2CPP/Harmony); prevents rare NullReferenceExceptions in
SyncDiskElementController.Setup(...)by late-linking theSyncDiskPresetbefore the row renders. - Robustness: Keeps
upgradesQuickRefpopulated; relinks missing presets duringSetupQuickRefand just beforeUpdateUpgradesto handle load-order edges. - Safety: If the preset still can’t be resolved after late-link, the original
Setup(...)is skipped to avoid an NRE. - Internals: Resource scan now ignores hidden/internal objects; added extra null guards; quick-ref postfix uses a low Harmony priority to better cooperate with other mods.
- Utility:
BTB_UpgradeEffectRefresh.ForceRefresh()helper to triggerOnSyncDiskChange(true)after programmatic install/uninstall.
0.2.0
- Bugfix: the player should no longer become very tall and fall through the floor on the second upgrade of PrivateEye. (Fingers crossed. That one was weird)
- Bugfix: this mod's text should now render again after the latest game update.
- A new downside side-effect has been added to the Private-Eye sync disk. If you are persued while you have active fines, you will lose social credit.
- The amount of social credit you will lose is a small percentage of your current fines capping at 100 social credit.
- A player cannot go below 0 social credit.
- A configuration option has been added to the BepInEx config to be disable the new side-effect
- Mod Dependency on piepieonline's DDSLoader removed. Ported over necessary loading code. Shout out and thank you piepieonline!
0.1.0
- Previous functionality moved to the "upgrade 1" slot.
- Main Effect changed: The Enforcer guard on duty at a crime scene can be asked for a guest pass.
- Higher social credit affects the odds of success up to a 75% success rate.
- The "guard" is usually found standing against a wall after crime scene tape has been put up.
- A configuration option has been added to the BepInEx config to be able to change the price of the PrivateEye sync disk.
- A configuration option for the SocialCreditLevel for the max success rate of asking a guard for a pass has also been added.
0.0.3
- Fixed mod overwriting all other instances of sync disks.
- GuestPass will now generate upon walking into the crime scene. This allows it to work even if the sync disk was purchased after a murder was reported.
0.0.2
- Fixed folder structure of DDS content. SyncDisk text should now render.
0.0.1
- Initial Release