Releases: ifBars/S1API
Release list
S1API 3.2.1-beta.8
Phone apps and item icons
- Restored discovery of mods built against older S1API versions. This also restores Mods App on the current game beta. See PR #333.
- Restored item icon capture after the game's preview layer rename, including the Forklift & Pallets pallet icon.
IconFactorynow honors the requested image size and retains its default of 512 pixels. See PR #345. - Phone app discovery and initialization now report progress with normal logging. Missing constructors produce a warning, and initialization failures include the full exception and underlying cause while allowing other apps to initialize. See PR #346.
Other unreleased beta fixes
- Custom accessories now receive their own avatar objects and retain their texture and tint. Typed resource lookups reject incompatible assets at the same path. See PR #332.
- Dealer and supplier NPCs now have framework data before
ConfigurePrefab, allowing identity, icon, and voice configuration. See PR #334. - Packaging icon patches select the game's exact method signature, allowing them to bind alongside Polyfill's additional overload. See PR #336.
- The contacts app skips NPCs whose IDs cannot be read instead of repeatedly failing while waiting for custom NPCs. See PR #337.
- Clarified the supported use of the existing
Saveablepersistence base andRegisterableinfrastructure class without moving or changing either type. See PR #344.
Compatibility and validation
Existing public signatures, namespaces, save identifiers, and network payload formats are unchanged.
The combined release candidate passed 775 Mono and 749 IL2CPP contract tests. Live validation of the icon and phone diagnostics fixes passed on Mono 0.4.7f7 and IL2CPP 0.4.7f9. Mods App's home icon, manager screen, and open/close behavior, plus the Forklift & Pallets pallet icon, were checked on IL2CPP 0.4.7f9; those two consumer mods were not checked on Mono.
This is a GitHub-only prerelease for the Schedule I game beta. It does not publish to NuGet, Nexus Mods, or Thunderstore.
Contributors and links
Thanks to @r-melvin for #332, #333, #334, #336, and #337, and @ifBars for #344, #345, and #346.
Download
S1API 3.2.1-beta.7
Changes for Schedule I 0.4.7f6
- Fixed custom phone contacts being rejected after returning to the menu and loading again when their avatar body was culled. Fixes #319.
- Fixed duplicate Messages entries for custom contacts on the first load. Existing conversations and message history are retained through network initialization. Fixes #327.
- Client contacts now update their conversation registration after network spawn. Rebinding also restores missing registrations and preserves entries owned by other contacts.
- Added opt-in external hosting for phone and TV apps. Apps can create independent display sessions without moving their original device UI.
ExternalAppCatalog.Refresh(host)updates hosting eligibility, and the icon resolver includes file icons and sprites selected throughSetIconSprite. See PR #328.
Compatibility and validation
Existing public signatures, NPC save identifiers, and network payload formats are unchanged. External hosting is additive and requires app opt-in.
The combined candidate passed 740 Mono and 720 IL2CPP contract tests. The original contact fixes also passed live first-load, menu-reload, and saved-reload checks on both runtimes. Review follow-ups have build and contract coverage; additional live icon and two-peer checks were interrupted before their feature assertions and are not claimed as passing.
This is a GitHub-only prerelease for the game beta. It does not publish to NuGet, Nexus Mods, or Thunderstore.
Download
S1API 3.2.1-beta.6
Fixes for Schedule I 0.4.7f6
- Custom phone contacts now show the correct sender information on the first save load, including when the native contact lookup cannot find a sender yet. Fixes #320 through PR #322.
GameLifecycle.OnLoadCompletelisteners registered before entering the main scene are retained across a return to the menu and do not fire twice on the next load. Fixes #321 through PR #323.- Texts sent by custom phone contacts during
OnLoadCompletesurvive the delayed NPC network spawn and are written toNPCs.jsonon an ordinary save. Fixes #324 through PR #325.
Compatibility and validation
- No public S1API signatures, save identifiers, or network payloads changed.
- The contact and lifecycle fixes were reproduced and checked in the game on Mono and IL2CPP. For the conversation fix, three contacts retained their messages through spawn and save in both runtimes; a fresh IL2CPP load retained the saved history through another spawn and save.
- The
3.2.1-beta.6source builds without warnings or errors, with 724 Mono and 710 IL2CPP contract tests passing. - This is a GitHub-only prerelease for the game beta. It does not publish to NuGet, Nexus Mods, or Thunderstore.
Known issue
- #319, a reported
VOEmitterrejection on a second load, remains under investigation. It has not reproduced with the available local fixture and is not claimed as fixed here.
Download
S1API 3.2.1-beta.5
Fixes for Schedule I 0.4.7f6
- Opening Settings → Gamepad no longer hangs when a loading dock changes its assigned vehicle and no mod is listening for that event.
- Plain custom NPC contacts no longer crash shortly after a save loads. Both the legacy constructor and
ConfigurePrefabpaths now let nativeNPC.Awakeinitialize their data once.
Compatibility and validation
- No public S1API signatures, save identifiers, or network formats changed.
- The two-contact repro stayed in playable gameplay after load on 0.4.7f6 Mono (Steam build 25439857) and IL2CPP (25439817). The Gamepad panel opened on IL2CPP. Both contract suites passed.
- This is a GitHub-only prerelease for the game beta. It does not publish to NuGet, Nexus Mods, or Thunderstore.
- Fixes issue #314 with PR #316, and issue #315 with PR #317.
Download
S1API 3.2.1-beta.4
Plain custom NPCs on Schedule I 0.4.7f6
- Fix both the legacy constructor and
ConfigurePrefabpath failing after f6 removedConsumeProductBehaviour.onConsumeDone. - Keep the legacy event initialization for older game builds that still expose it.
Compatibility and validation
- No S1API public signatures, save identifiers, or network formats changed.
- Both contact paths registered after loading a save on local 0.4.7f6 Mono (Steam build 25439857) and IL2CPP (25439817) installs. The Mono and IL2CPP contract suites passed.
- This is a GitHub-only prerelease for the game beta. It does not publish to NuGet, Nexus Mods, or Thunderstore.
- Fixes issue #309 with PR #311.
Download
S1API 3.2.1-beta.3
Custom NPCs on the Schedule I 0.4.7 beta
- Fix plain custom NPCs failing to construct when the native template has no framework data object. This restores both the legacy four-argument constructor and the current
ConfigurePrefab/WithIdentitypath.
Compatibility and validation
- Public API signatures, save identifiers, and network payloads are unchanged.
- Both contact paths registered and were found after loading a save in local 0.4.7f5 Mono and IL2CPP beta builds. The Mono and IL2CPP contract suites passed. The reported 0.4.7f6 build was not available for local gameplay validation.
- This is a GitHub-only prerelease for the game beta. It does not publish to NuGet, Nexus Mods, or Thunderstore.
- Addresses issue #309.
Downloads
S1API 3.2.1-beta.2
Avatar rendering on the Schedule I 0.4.7 beta
- Restore generated NPC mugshots and accessory icons through a detached avatar and portrait camera.
- Keep portraits facing forward, with settled animation and appearance state. Remove inherited attachments and prevent player look targets, blinking, and distance impostors from affecting captures.
- Restore the NPC appearance workbench, including native appearance import, full-body framing, pose controls, and reset.
- Reset copied body-shape caches so newly applied clothing fits the preview body.
- Resolve legacy hair, clothing, face-layer, and accessory resources through typed Mono and IL2CPP APIs.
- Restore current player and active character-creator appearance getters.
Compatibility and validation
- Existing public method signatures and explicit NPC icon precedence are preserved.
- Built against the Schedule I 0.4.7f5 Mono and IL2CPP beta assemblies. Rendered captures were checked in both runtimes, including the requested accessory, forward-facing portraits, clothing, workbench framing, and pose reset.
- Updated the appearance-customization and NPC workbench documentation.
- This is a GitHub-only prerelease for the game beta. It does not publish to NuGet, Nexus Mods, or Thunderstore.
- Tracks issue #305.
Downloads
S1API 3.2.1-beta.1
Schedule I 0.4.7 beta compatibility
- Restored S1API startup on both the Mono
alternate-betaand IL2CPPbetagame branches. - Migrated dialogue, sleep/time, player-data synchronization, NPC movement, clothing, and character-creator integrations to the 0.4.7 native APIs.
- Adapted legacy avatar settings through the game's new naked-appearance and outfit pipeline.
- Kept removed avatar preview and accessory-mugshot helpers fail-safe while the replacement renderer is still in beta.
Compatibility and validation
- Built against Schedule I 0.4.7f5 Mono and IL2CPP assemblies.
- This is a GitHub-only prerelease for beta testing. It is not published to NuGet, Nexus Mods, or Thunderstore.
- Tracks issue #305.
Downloads
S1API 3.2.0
New Managed APIs
- Build customizable variants of native grid and surface furniture while preserving placement defaults, isolated materials, stored and ghost visuals, and generated icons (#264).
- Inspect an NPC's current building, awareness changes, and vehicle entry or exit events, and read native vehicle color metadata through managed wrappers (#265, #266, #267, #268).
- Declare customer, dealer, and supplier roles through NPC properties so prefab configuration follows the selected capabilities (#280).
- Discover blackjack, Ride the Bus, and slot-machine games; read immutable state snapshots; and subscribe to round and spin lifecycle events (#281).
- Create and query native temperature emitters with cross-runtime managed events, validation, snapshots, and unit helpers (#283).
- Inspect native trash containers, subscribe to content and level changes, and invoke the server-authoritative native bagging flow (#284).
- Attach configurable native interaction prompts to mod-owned objects with managed lifecycle callbacks, runtime setters, and disposal (#285).
- Discover placed jukeboxes, inspect immutable track and playback state, subscribe to changes, and use the native playback, volume, shuffle, repeat, synchronization, and track-selection controls (#286).
Fixes and Runtime Compatibility
- Hide dealer conversations until their relationship requirements are met, while keeping conversation hooks idempotent (#271).
- Remove the unusable Casino building identifier from the NPC building registry (#276).
- Finalize custom NPCs correctly on multiplayer clients, bridge customer contract events on IL2CPP, and tolerate the base game's removed region-unlock member (#277, #278, #279).
- Harden cross-wrapper event ownership and cleanup for awareness, vehicle, trash-container, and jukebox APIs, including IL2CPP delegate lifecycles and destroyed native objects (#266, #267, #284, #286).
Compatibility and Validation
- The 3.2.0 surface is additive relative to 3.1.15. Existing public contracts, stable identifiers, save schemas, and network payloads remain unchanged.
- New controls continue to use the game's native authority, replication, synchronization, and persistence paths; consumer mods remain responsible for their own multiplayer authorization where the native API does not provide it.
- Validated the release candidate with zero-warning Mono and IL2CPP builds, 707 passing Mono tests, 693 passing IL2CPP tests, 82.31% public API documentation coverage, and no ApiCompat breaks against 3.1.15. The hosted coverage analyzer remains a required PR gate.
- The milestone's furniture, NPC, casino, temperature, trash, interaction-prompt, and jukebox features received targeted Mono and IL2CPP runtime validation during development. No proprietary game assemblies, generated wrappers, saves, logs, or test probes are included in this release.
Contributors
- @Diffuin: native furniture variants, NPC building and event APIs, vehicle color metadata, temperature emitters, trash containers, jukebox controls, and the Casino building correction in #264, #265, #266, #267, #268, #276, #283, #284, and #286.
- @ifBars: integration and dual-runtime remediation across the milestone, dealer and custom-NPC compatibility fixes, NPC role properties, casino state APIs, and interaction prompts in #271, #277, #278, #279, #280, #281, and #285.
Release Links
S1API 3.1.15
Custom NPC Inventory Persistence
- Custom NPC primary inventories now initialize their native slot collection before saved items are restored, so items given to custom customers and dealers retain their identity, quantity, and slot position across save and reload (#261).
- Dealer overflow restoration remains separate from primary inventory hydration, and base-game dealers keep their existing load behavior (#261).
Custom NPC Relationships and Deals
- Custom NPCs now derive a stable native GUID from their existing persistent identity and register before accepted contracts are loaded. Newly scheduled custom-customer deals therefore resolve to the same NPC after a reload (#262).
- Saved relationship values and unlock state now survive deferred custom-NPC spawning, including explicit zero relationship values and both direct and recommendation unlock paths (#262).
- Loader phases reuse the prepared custom NPC instance and initialize inactive customer deal-attendance state before assigning restored contracts, preventing prefab defaults or incomplete runtime caches from replacing saved state (#262).
Compatibility and Validation
- Preserved public API shape, existing custom NPC identity IDs, save schemas, network payloads, dealer overflow behavior, and base-game NPC loading.
- Validated 3.1.15 with zero-warning Mono and IL2CPP builds, 575 passing Mono tests, 564 passing IL2CPP tests, documentation coverage, ApiCompat, and the hosted coverage analyzer.
- Verified live Mono and IL2CPP save-to-menu-to-reload flows for custom inventory contents, customer and dealer relationships, unlock state, and accepted-contract ownership.
- Contracts already saved with a pre-3.1.15 random custom-NPC GUID cannot be migrated because the native contract payload contains the customer GUID but not the custom NPC identity ID. Newly saved and future contracts use the stable identity.
Contributors
- @Diffuin: custom NPC inventory restoration and custom NPC deal and relationship persistence.
- @ifBars: dual-runtime remediation, live persistence validation, and 3.1.15 release preparation for #261 and #262.