Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
95 commits
Select commit Hold shift + click to select a range
ea88345
fix(beta): support Schedule I 0.4.7
ifBars Sep 19, 2026
065c79e
ci(beta): refresh game assembly caches
ifBars Sep 19, 2026
1184221
ci(beta): compare API with shipped release
ifBars Sep 19, 2026
b4b6f34
fix(beta): restore Mono custom NPC initialization
ifBars Sep 19, 2026
9662d8e
Merge pull request #306 from ifBars/agent/beta-0.4.7
ifBars Sep 19, 2026
1a228f6
fix(avatar): restore beta portraits and preview poses
ifBars Sep 20, 2026
9d9d077
Merge pull request #307 from ifBars/agent/beta-047-avatar-rendering
ifBars Sep 20, 2026
90a43df
fix(NPC): initialize framework data for plain beta prefabs
ifBars Sep 22, 2026
6777955
chore(release): prepare S1API 3.2.1-beta.3
ifBars Sep 23, 2026
291d7de
Merge pull request #310 from ifBars/fix/issue-309-plain-npc-data
ifBars Sep 23, 2026
f45e96f
fix: tolerate f6 consume product event change
ifBars Sep 23, 2026
ada39a5
Merge pull request #311 from ifBars/fix/beta-f6-consume-product-event
ifBars Sep 23, 2026
64a60d2
chore(release): prepare S1API 3.2.1-beta.4
ifBars Sep 23, 2026
d0de210
docs(release): record f6 validation builds
ifBars Sep 23, 2026
2b49203
Merge pull request #313 from ifBars/release/3.2.1-beta.4
ifBars Sep 23, 2026
27ab79c
fix(Delivery): skip unused static dock occupant wrapping
ifBars Sep 23, 2026
a4a6b46
Merge pull request #316 from ifBars/fix/beta-gamepad-settings-hang
ifBars Sep 23, 2026
a5d9ab0
fix(NPC): let native Awake initialize custom contacts once
ifBars Sep 23, 2026
dee9219
Merge pull request #317 from ifBars/fix/beta-npc-postload-crash
ifBars Sep 23, 2026
573dc40
chore(release): prepare S1API 3.2.1-beta.5
ifBars Sep 23, 2026
39be958
Merge pull request #318 from ifBars/release/3.2.1-beta.5
ifBars Sep 23, 2026
d3008c4
fix(NPC): refresh message contact info on first load
ifBars Sep 24, 2026
d519981
fix(Lifecycle): detach native listeners on scene unload
ifBars Sep 24, 2026
2ced782
fix(NPC): preserve icon refresh when sender lookup fails
ifBars Sep 25, 2026
f1be386
fix(Lifecycle): retain pre-scene listener through menu reload
ifBars Sep 25, 2026
1c5df60
Merge pull request #322 from ifBars/fix/320-first-load-message-contact
ifBars Sep 25, 2026
9f191e2
Merge pull request #323 from ifBars/fix/321-lifecycle-reload-listeners
ifBars Sep 25, 2026
7c8e107
fix(NPC): preserve contact history through initial network spawn (#325)
ifBars Sep 25, 2026
374eccd
chore(release): bump beta version to 3.2.1-beta.6
ifBars Sep 25, 2026
9781191
docs(release): add 3.2.1-beta.6 notes
ifBars Sep 25, 2026
b29708b
Merge pull request #326 from ifBars/release/3.2.1-beta.6
ifBars Sep 25, 2026
07f04b3
feat: expose external phone and TV hosting contract
ifBars Sep 27, 2026
2db7aaf
fix(NPC): preserve contacts across native initialization and reload
ifBars Sep 27, 2026
508f8ef
fix(Hosting): refresh eligibility and resolve selected phone icons
ifBars Sep 27, 2026
db7f343
fix(NPC): rebind client conversations and repair missing registrations
ifBars Sep 27, 2026
e493834
fix(NPC): schedule client registration from native startup
ifBars Sep 27, 2026
c405f06
Merge pull request #328 from ifBars/feat/external-app-hosting-beta-5
ifBars Sep 27, 2026
d38542a
Merge pull request #329 from ifBars/fix/319-327-contact-lifecycle
ifBars Sep 27, 2026
d3b874d
chore(release): prepare S1API 3.2.1-beta.7
ifBars Sep 27, 2026
db1de39
Merge pull request #330 from ifBars/release/3.2.1-beta.7
ifBars Sep 27, 2026
b48d58e
fix: name the packaging-icon patch signature so it binds beside added…
r-melvin Oct 1, 2026
1aa75c1
fix: custom accessories get their own AvatarObject on 0.4.7
r-melvin Oct 1, 2026
7fee724
fix: NPC discovery scans mods built against any version of S1API
r-melvin Oct 1, 2026
e353ecf
fix: the contacts app's wait for custom NPCs survives a broken NPC in…
r-melvin Oct 1, 2026
08d0edb
fix: attach NPC data before ConfigurePrefab for dealers and suppliers…
r-melvin Oct 1, 2026
38ec844
docs(contributing): require issues before bug and feature PRs
ifBars Oct 2, 2026
6b9ebe7
Merge pull request #342 from ifBars/agent/issue-first-policy-beta
ifBars Oct 2, 2026
e6d4f2d
fix: preserve accessory tint and complete typed resource checks
ifBars Oct 2, 2026
adee163
chore: remove NPC registration debug logging
ifBars Oct 2, 2026
787e377
chore: trim redundant NPC data comments
ifBars Oct 2, 2026
6f9b7cb
chore: trim redundant patch target test comments
ifBars Oct 2, 2026
9ec0598
chore: trim redundant contacts test comment
ifBars Oct 2, 2026
4384643
Merge pull request #332 from r-melvin/fix/il2cpp-registry-typed-fallback
ifBars Oct 2, 2026
b92ffb7
Merge pull request #333 from r-melvin/fix/discovery-older-s1api-refer…
ifBars Oct 2, 2026
bd687d4
Merge pull request #334 from r-melvin/fix/supplier-dealer-npc-data-be…
ifBars Oct 2, 2026
d72d893
Merge pull request #336 from r-melvin/fix/packaging-icon-patch-signature
ifBars Oct 2, 2026
beed831
Merge pull request #337 from r-melvin/fix/contacts-wait-for-npcs
ifBars Oct 2, 2026
a08d22d
feat(saveables): expose public saveable base with legacy compatibility
ifBars Oct 2, 2026
50c7208
docs(abstraction): retain only registerable and saveable documentation
ifBars Oct 2, 2026
c3ec3a2
Merge pull request #344 from ifBars/feat/beta-saveable-namespace
ifBars Oct 2, 2026
12dd013
fix(rendering): restore beta item icon captures and requested size
ifBars Oct 4, 2026
e5e7621
fix(phone): report app discovery and initialization failures
ifBars Oct 4, 2026
0a14623
Merge pull request #345 from ifBars/fix/beta-f9-phone-icons
ifBars Oct 4, 2026
219243e
Merge pull request #346 from ifBars/fix/beta-phone-app-diagnostics
ifBars Oct 4, 2026
0e531f2
chore(release): prepare 3.2.1-beta.8 prerelease
ifBars Oct 4, 2026
f65ae40
Merge pull request #347 from ifBars/release/beta.8
ifBars Oct 4, 2026
b39b5dd
fix: select beta assemblies for documentation prerelease branches
ifBars Oct 4, 2026
24386da
Merge pull request #349 from ifBars/fix/docs-beta-release-assemblies
ifBars Oct 6, 2026
d5084d3
perf(reflection): keep derived-type scans until an assembly loads
r-melvin Oct 7, 2026
1a27db3
perf(npc): index scene objects instead of scanning for every custom NPC
r-melvin Oct 7, 2026
8c22c42
fix(products): keep packaging-content patches working on 0.4.7f11
r-melvin Oct 7, 2026
6e727b0
fix(npc): preserve scene lookup lifecycle semantics
ifBars Oct 8, 2026
ca4da6f
test(reflection): cover assembly load cache invalidation
ifBars Oct 8, 2026
daa4836
fix(npc): skip uninitialized native index identities
ifBars Oct 8, 2026
18c74c6
Merge pull request #353 from r-melvin/fix/f11-packaging-icon-batch
ifBars Oct 8, 2026
43154c1
chore: merge beta packaging compatibility fix
ifBars Oct 8, 2026
1bdfb8b
chore: merge beta packaging compatibility fix
ifBars Oct 8, 2026
c1d97cd
fix(avatar): freeze fallback mugshot rig initialization
ifBars Oct 8, 2026
349ad10
fix(npc): prepare customer data before client spawn
ifBars Oct 8, 2026
6052288
fix(avatar): retain rebound hip and animate workbench previews
ifBars Oct 8, 2026
061b508
Merge commit '349ad1097fbfa2b22dfec3784aadc1f357a54f35' into release/…
ifBars Oct 9, 2026
ffdf809
Merge commit '43154c1edf1b3c01c1651b07c5c6171f792fa310' into release/…
ifBars Oct 9, 2026
c8745ef
Merge commit '1bdfb8b9f5c975ef893c2b3b306fb066e2ae063c' into release/…
ifBars Oct 9, 2026
6663f8f
Merge pull request #358 from ifBars/fix/beta-il2cpp-reload-portraits
ifBars Oct 9, 2026
b40b4b3
Merge pull request #359 from ifBars/fix/beta-il2cpp-client-npc-init
ifBars Oct 9, 2026
821ee26
Merge pull request #354 from r-melvin/perf/scene-object-index
ifBars Oct 9, 2026
794595c
Merge pull request #355 from r-melvin/perf/derived-classes-cache
ifBars Oct 9, 2026
b3127b3
chore(release): prepare 3.2.1-beta.9 prerelease
ifBars Oct 9, 2026
196e852
Merge remote-tracking branch 'origin/beta' into release/beta.9
ifBars Oct 9, 2026
ab6cf97
docs(release): record passing Mono multiplayer reload
ifBars Oct 9, 2026
da16e2e
Merge pull request #360 from ifBars/release/beta.9
ifBars Oct 9, 2026
87478d3
docs(release): use GitHub mentions for contributor credits
ifBars Oct 9, 2026
5180c72
chore(release): promote Schedule I 0.4.7 support as 3.2.1
ifBars Oct 9, 2026
8c512da
docs: complete 3.2.1 release notes
ifBars Oct 9, 2026
08237df
fix(ci): use shipped API baseline for stable release PRs
ifBars Oct 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions .github/api-compat-suppressions.xml
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<Suppressions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<!--
Schedule I 0.4.6f11 removed ScheduleOne.DevUtilities.ExitAction. S1API 3.1.0
replaces the impossible native signature with S1API.PhoneApp.ExitAction so
phone apps retain one public API across Mono and IL2CPP.
Schedule I moved ExitAction between native namespaces across game updates.
S1API replaces the runtime-specific signature with S1API.PhoneApp.ExitAction
so phone apps retain one public API across Mono and IL2CPP.
-->
<Suppression>
<DiagnosticId>CP0002</DiagnosticId>
<Target>M:S1API.PhoneApp.PhoneApp.Exit(ScheduleOne.DevUtilities.ExitAction)</Target>
<Target>M:S1API.PhoneApp.PhoneApp.Exit(ScheduleOne.ExitAction)</Target>
</Suppression>
</Suppressions>
16 changes: 16 additions & 0 deletions .github/release-notes/3.2.1-beta.1.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
## Schedule I 0.4.7 beta compatibility

- Restored S1API startup on both the Mono `alternate-beta` and IL2CPP `beta` game 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](https://github.com/ifBars/S1API/issues/305).

## Downloads

- [Download S1API-Forked-3.2.1-beta.1.zip](https://github.com/ifBars/S1API/releases/download/v3.2.1-beta.1/S1API-Forked-3.2.1-beta.1.zip)
20 changes: 20 additions & 0 deletions .github/release-notes/3.2.1-beta.2.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
## 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](https://github.com/ifBars/S1API/issues/305).

## Downloads

- [Download S1API-Forked-3.2.1-beta.2.zip](https://github.com/ifBars/S1API/releases/download/v3.2.1-beta.2/S1API-Forked-3.2.1-beta.2.zip)
14 changes: 14 additions & 0 deletions .github/release-notes/3.2.1-beta.3.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
## 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`/`WithIdentity` path.

## 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](https://github.com/ifBars/S1API/issues/309).

## Downloads

- [Download S1API-Forked-3.2.1-beta.3.zip](https://github.com/ifBars/S1API/releases/download/v3.2.1-beta.3/S1API-Forked-3.2.1-beta.3.zip)
15 changes: 15 additions & 0 deletions .github/release-notes/3.2.1-beta.4.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
## Plain custom NPCs on Schedule I 0.4.7f6

- Fix both the legacy constructor and `ConfigurePrefab` path failing after f6 removed `ConsumeProductBehaviour.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](https://github.com/ifBars/S1API/issues/309) with [PR #311](https://github.com/ifBars/S1API/pull/311).

## Download

- [S1API-Forked-3.2.1-beta.4.zip](https://github.com/ifBars/S1API/releases/download/v3.2.1-beta.4/S1API-Forked-3.2.1-beta.4.zip)
15 changes: 15 additions & 0 deletions .github/release-notes/3.2.1-beta.5.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
## 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 `ConfigurePrefab` paths now let native `NPC.Awake` initialize 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](https://github.com/ifBars/S1API/issues/314) with [PR #316](https://github.com/ifBars/S1API/pull/316), and [issue #315](https://github.com/ifBars/S1API/issues/315) with [PR #317](https://github.com/ifBars/S1API/pull/317).

## Download

- [S1API-Forked-3.2.1-beta.5.zip](https://github.com/ifBars/S1API/releases/download/v3.2.1-beta.5/S1API-Forked-3.2.1-beta.5.zip)
20 changes: 20 additions & 0 deletions .github/release-notes/3.2.1-beta.6.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
## 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](https://github.com/ifBars/S1API/issues/320) through [PR #322](https://github.com/ifBars/S1API/pull/322).
- `GameLifecycle.OnLoadComplete` listeners 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](https://github.com/ifBars/S1API/issues/321) through [PR #323](https://github.com/ifBars/S1API/pull/323).
- Texts sent by custom phone contacts during `OnLoadComplete` survive the delayed NPC network spawn and are written to `NPCs.json` on an ordinary save. Fixes [#324](https://github.com/ifBars/S1API/issues/324) through [PR #325](https://github.com/ifBars/S1API/pull/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.6` source 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](https://github.com/ifBars/S1API/issues/319), a reported `VOEmitter` rejection 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-Forked-3.2.1-beta.6.zip](https://github.com/ifBars/S1API/releases/download/v3.2.1-beta.6/S1API-Forked-3.2.1-beta.6.zip)
18 changes: 18 additions & 0 deletions .github/release-notes/3.2.1-beta.7.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
## 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](https://github.com/ifBars/S1API/issues/319).
- Fixed duplicate Messages entries for custom contacts on the first load. Existing conversations and message history are retained through network initialization. Fixes [#327](https://github.com/ifBars/S1API/issues/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 through `SetIconSprite`. See [PR #328](https://github.com/ifBars/S1API/pull/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-Forked-3.2.1-beta.7.zip](https://github.com/ifBars/S1API/releases/download/v3.2.1-beta.7/S1API-Forked-3.2.1-beta.7.zip)
29 changes: 29 additions & 0 deletions .github/release-notes/3.2.1-beta.8.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
## 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](https://github.com/ifBars/S1API/pull/333).
- Restored item icon capture after the game's preview layer rename, including the Forklift & Pallets pallet icon. `IconFactory` now honors the requested image size and retains its default of 512 pixels. See [PR #345](https://github.com/ifBars/S1API/pull/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](https://github.com/ifBars/S1API/pull/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](https://github.com/ifBars/S1API/pull/332).
- Dealer and supplier NPCs now have framework data before `ConfigurePrefab`, allowing identity, icon, and voice configuration. See [PR #334](https://github.com/ifBars/S1API/pull/334).
- Packaging icon patches select the game's exact method signature, allowing them to bind alongside Polyfill's additional overload. See [PR #336](https://github.com/ifBars/S1API/pull/336).
- The contacts app skips NPCs whose IDs cannot be read instead of repeatedly failing while waiting for custom NPCs. See [PR #337](https://github.com/ifBars/S1API/pull/337).
- Clarified the supported use of the existing `Saveable` persistence base and `Registerable` infrastructure class without moving or changing either type. See [PR #344](https://github.com/ifBars/S1API/pull/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](https://github.com/r-melvin) for [#332](https://github.com/ifBars/S1API/pull/332), [#333](https://github.com/ifBars/S1API/pull/333), [#334](https://github.com/ifBars/S1API/pull/334), [#336](https://github.com/ifBars/S1API/pull/336), and [#337](https://github.com/ifBars/S1API/pull/337), and [ifBars](https://github.com/ifBars) for [#344](https://github.com/ifBars/S1API/pull/344), [#345](https://github.com/ifBars/S1API/pull/345), and [#346](https://github.com/ifBars/S1API/pull/346).

[Full changes since beta.7](https://github.com/ifBars/S1API/compare/v3.2.1-beta.7...v3.2.1-beta.8)

[Download S1API-Forked-3.2.1-beta.8.zip](https://github.com/ifBars/S1API/releases/download/v3.2.1-beta.8/S1API-Forked-3.2.1-beta.8.zip)
30 changes: 30 additions & 0 deletions .github/release-notes/3.2.1-beta.9.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
## Custom NPC loading

- Scene lookups for movement presets, map icons, and contact circles now reuse an internal index. Scene changes and native assignment invalidate it, and missing objects are searched again. See [PR #354](https://github.com/ifBars/S1API/pull/354).
- Derived-type discovery keeps ordinary assembly results until another assembly loads. Dynamic assemblies are still scanned on every call, and callers receive independent lists. See [PR #355](https://github.com/ifBars/S1API/pull/355).

These changes reduce repeated lookup work. A repeatable improvement in total loading time has not been established in maintainer testing.

## Portraits and client initialization

- Fixed blank custom NPC portraits after reload by retaining the rebound hip position in the owned fallback render rig. Portrait captures remain serialized and retain their settled-frame timing. Workbench preview clones can animate their pose controls again. See [PR #358](https://github.com/ifBars/S1API/pull/358), fixing [#356](https://github.com/ifBars/S1API/issues/356).
- Customer prefabs now have fallback data before a joining client's native `Awake`. Dealer conversion removes the replaced NPC component, preventing duplicate registration. Existing customer data and explicit configuration remain intact. See [PR #359](https://github.com/ifBars/S1API/pull/359), fixing [#357](https://github.com/ifBars/S1API/issues/357).
- Restored packaging icon patches on game beta 0.4.7f11. See [PR #353](https://github.com/ifBars/S1API/pull/353).

## Compatibility and validation

Existing public signatures, namespaces, save identifiers, and network payload formats are unchanged.

The combined release candidate passed 792 Mono and 766 IL2CPP contract tests. Live checks on game beta 0.4.7f11 with MelonLoader 0.7.3 covered 32 custom NPC types over two loads per runtime, producing 64 nonblank portraits per runtime with one native NPC component per object. Controlled gender/weight captures and workbench pose checks also passed on both runtimes.

Multiplayer validation uses two local peers with separate identities through a Steam emulator. Both Mono and IL2CPP host/client gameplay, portraits, customer initialization, and one-component registration passed the first load and a same-process reload/rejoin. Real Steam transport remains untested. Existing native Contacts warnings remain outside these fixes.

This is a GitHub-only prerelease for the Schedule I game beta.

## Contributors and links

Thanks to @r-melvin for [#353](https://github.com/ifBars/S1API/pull/353), [#354](https://github.com/ifBars/S1API/pull/354), and [#355](https://github.com/ifBars/S1API/pull/355), and @ifBars for [#358](https://github.com/ifBars/S1API/pull/358) and [#359](https://github.com/ifBars/S1API/pull/359).

[Full changes since beta.8](https://github.com/ifBars/S1API/compare/v3.2.1-beta.8...v3.2.1-beta.9)

[Download S1API-Forked-3.2.1-beta.9.zip](https://github.com/ifBars/S1API/releases/download/v3.2.1-beta.9/S1API-Forked-3.2.1-beta.9.zip)
Loading
Loading