Heads up before the beta hits main: I put S1API 3.2.0 on the 0.4.7 open beta (Steam build 25404402, game 0.4.7f5) and diffed the game assemblies against 0.4.6f13 (build 24705572). Three patches fail at startup, and a good chunk of the wrapped surface moved underneath. Details below, all from a first-launch log plus a symbol diff of the two builds. Happy to share the full 148-row member cross-reference if it helps.
Environment
- MelonLoader 0.7.3, S1APILoader 2.5.0, S1API 3.2.0 (stable @ 7dc810c), S1MAPI 2.0.0 (no errors)
- Main menu only, no save loaded. Il2CppAssemblyGenerator: 885 methods and 3 fields not restored, 1,226 unstrip failures
- Diff: 52,297 to 55,139 symbols; 5,870 added, 3,028 removed, 468 with relationship changes
What fails at startup
1. NPCPatches.NPCHealth_Awake_Prefix throws on every NPC awake (S1API/Internal/Patches/NPCPatches.cs around line 2479)
System.MissingMethodException: Method not found: 'Void Il2CppScheduleOne.NPCs.NPCHealth.set_npc(Il2CppScheduleOne.NPCs.NPC)'.
at S1API.Internal.Patches.NPCPatches.NPCHealth_Awake_Prefix(NPCHealth __instance)
NPCHealth.npc (public field) is gone; it is now a private _npc. The health model also changed: Start(), AfflictedWithLethalEffect, REVIVE_DAYS, and set_Health(float) are removed; SetHealthData(NPCs.Framework.Health), ResetToDefault(), an onTakeDamage event, set_MaxHealth, and a SyncVar-backed _currentHealth are added. This is the loud one since it fires per spawn.
2. AvatarAccessoryPatches+AvatarApplyAccessorySettingsPatch.TargetMethod() returns null (AvatarAccessoryPatches.cs lines 34-37)
Avatar.ApplyAccessorySettings(AvatarSettings) no longer exists, and neither does the rest of the AvatarSettings-driven surface on Avatar: every Apply*Settings, LoadAvatarSettings, LoadNakedSettings, CurrentSettings, appliedAccessories, onSettingsLoaded, GetMugshot. AvatarFramework.MugshotGenerator and the whole AvatarFramework.Customization namespace are removed. Replacement is the new ScheduleOne.Avatar namespace: Avatar.Appearance (AvatarAppearance), AvatarObjectLibrary, Avatar.Tools.MugshotGenerator.GenerateMugshot(NakedAppearance, Outfit, Action<Texture2D>), NakedAppearanceLoader, OutfitLoader, BasicAvatarSettingsConverter. AvatarSettings survives as a shim with EquivalentNakedAppearance and EquivalentOutfit; Accessory gained AvatarObjectEquivalent. There is no single method to retarget this patch to.
3. CustomProductManifestPlayerPatches.RequestPlayerDataPrefix has no target (CustomProductManifestPatches.cs line 55, the nameof(Player.RequestPlayerData))
Player.RequestPlayerData(string), ReceivePlayerData(...), and both Load(PlayerData...) overloads are removed. Added: RequestPlayerData_Server(string, bool), SetPlayerData_Client(NetworkConnection, FullPlayerData), SetPlayerNameAndId_Client/_Server, SetPlayerLoaded_Server, OnLocalPlayerLoaded(), CurrentAppearance (PlayerAppearance), and a new PlayerScripts.FullPlayerData type replacing the PlayerData plus loose strings shape.
Other removals under wrapped surfaces (not hit in a main-menu session)
| Type |
Removed |
Added |
GameTime.TimeManager |
onSleepStart, onSleepEnd, IsSleepInProgress, HostSleepDone, WakeTime, StartSleep(), CheckSleepStart(), SetTimeAndSync, SkipForwardToTime |
new GameTime.SleepController with OnSleepStart/OnSleepEnd events and EPhase; ISleepEvent; SetTime_Server, SkipToTimeAndSync, Normalized24HourTime. CurrentTime, ElapsedDays, GetMinutesFrom24HourTime unchanged. UI.SleepCanvas removed. |
NPCs.NPCMovement |
public Agent, agentCurrentPath, agentCurrentSpeed, WalkSpeed, RunSpeed, MoveSpeedMultiplier, UpdateSpeed(), WarpToNavMesh(), walkResultCallback; nested NPCSpeedController.SpeedControl |
private _agent, _currentPath, SpeedController property, DefaultWalkSpeed, SetAgentSpeed, SetAgentAvoidancePriority, AgentDesiredVelocity, NavMeshAreaMask; new NPCs.SpeedControl, NPCSpeedPresets |
NPCs.NPC |
SendTextMessage(string), CreateMessageConversation() |
AssignConversationMessage(MSGConversation), CreateAndAssignDefaultMessageConversation(), CreateMessageConversationWhenLocalPlayerExists(), UnassignConversationMessage(), Gender |
Messaging.MSGConversation |
Sendables field |
private _sendables, SendPlayerMessage(SendableMessage, int, bool), GetSenderIcon(). currentResponses unchanged. IMessageEntity and ResponseCallback types removed; MessageContactInfo added |
Dialogue |
DialogueContainer type |
Dialogue.Conversation |
Clothing |
ClothingUtility (+ ClothingSlotData, ColorData), EClothingApplicationType |
ClothingConfiguration, ClothingSettings |
UI.CharacterCreator.* |
whole namespace |
new top-level CharacterCreator namespace |
Persistence.LoadManager |
138 symbols removed, 140 added |
needs its own read |
Quests |
Quest_TheDeepEnd |
none |
Removed types S1API still references by name: CharacterCreator, MugshotGenerator, ClothingUtility and its nested data types, EClothingApplicationType, DialogueContainer, NPCSpeedController.SpeedControl.
Verified unchanged: NPCManager.NPCRegistry, NPC.Avatar, NPC.SetVisible, Player.IsRagdolled, PlayerMovement.Teleport, CallManager.QueueCall, Phone.IsOpen, Business.OwnedBusinesses, Property.LoadingDocks, Property.EmployeeCapacity, Employee.IsAnyWorkInProgress, CurfewManager.OnUncappedMinPass, the Player arrest RPC, and all the employee work behaviour types.
New surfaces that might be worth wrapping
SpecialCustomers.* (26 types): SpecialCustomerManager, SpecialCustomerLeader, SpecialCustomerCamp, SpecialCustomerGroupPOI, group save data, activities, and the queuecustomergroup console command
Map.NPCEnterableBuilding: OnNPCEnteredBuilding, OnNPCExitedBuilding, GetOccupants()
GameTime.SleepController phases and events
Avatar.AvatarObjectLibrary and the Avatar.Creation editors (the patch notes say user-created cosmetics build on these later)
- New behaviours:
ComputerBehaviour, ConversationBehaviour, DancingBehaviour, GuitarBehaviour, MoveToAndActBehaviour, PhoneBehaviour, SittingBehaviour, RevingBehaviour, ProtestingBehaviour
Repro
Switch to the beta branch in Steam, launch with MelonLoader and S1API 3.2.0, reach the main menu, read MelonLoader/Latest.log. The two HarmonyInit failures show during S1API init; the set_npc exception appears as soon as NPC prefabs awake.
Diffs were produced offline with S1Atlas (https://github.com/madjagstudios/S1Atlas) against a local install; no game content redistributed. The beta branch of this repo (3.1.0-beta.9, July) predates all of this, so nothing there covers it yet.
Heads up before the beta hits main: I put S1API 3.2.0 on the 0.4.7 open beta (Steam build 25404402, game 0.4.7f5) and diffed the game assemblies against 0.4.6f13 (build 24705572). Three patches fail at startup, and a good chunk of the wrapped surface moved underneath. Details below, all from a first-launch log plus a symbol diff of the two builds. Happy to share the full 148-row member cross-reference if it helps.
Environment
What fails at startup
1.
NPCPatches.NPCHealth_Awake_Prefixthrows on every NPC awake (S1API/Internal/Patches/NPCPatches.csaround line 2479)NPCHealth.npc(public field) is gone; it is now a private_npc. The health model also changed:Start(),AfflictedWithLethalEffect,REVIVE_DAYS, andset_Health(float)are removed;SetHealthData(NPCs.Framework.Health),ResetToDefault(), anonTakeDamageevent,set_MaxHealth, and a SyncVar-backed_currentHealthare added. This is the loud one since it fires per spawn.2.
AvatarAccessoryPatches+AvatarApplyAccessorySettingsPatch.TargetMethod()returns null (AvatarAccessoryPatches.cslines 34-37)Avatar.ApplyAccessorySettings(AvatarSettings)no longer exists, and neither does the rest of theAvatarSettings-driven surface onAvatar: everyApply*Settings,LoadAvatarSettings,LoadNakedSettings,CurrentSettings,appliedAccessories,onSettingsLoaded,GetMugshot.AvatarFramework.MugshotGeneratorand the wholeAvatarFramework.Customizationnamespace are removed. Replacement is the newScheduleOne.Avatarnamespace:Avatar.Appearance(AvatarAppearance),AvatarObjectLibrary,Avatar.Tools.MugshotGenerator.GenerateMugshot(NakedAppearance, Outfit, Action<Texture2D>),NakedAppearanceLoader,OutfitLoader,BasicAvatarSettingsConverter.AvatarSettingssurvives as a shim withEquivalentNakedAppearanceandEquivalentOutfit;AccessorygainedAvatarObjectEquivalent. There is no single method to retarget this patch to.3.
CustomProductManifestPlayerPatches.RequestPlayerDataPrefixhas no target (CustomProductManifestPatches.csline 55, thenameof(Player.RequestPlayerData))Player.RequestPlayerData(string),ReceivePlayerData(...), and bothLoad(PlayerData...)overloads are removed. Added:RequestPlayerData_Server(string, bool),SetPlayerData_Client(NetworkConnection, FullPlayerData),SetPlayerNameAndId_Client/_Server,SetPlayerLoaded_Server,OnLocalPlayerLoaded(),CurrentAppearance(PlayerAppearance), and a newPlayerScripts.FullPlayerDatatype replacing thePlayerDataplus loose strings shape.Other removals under wrapped surfaces (not hit in a main-menu session)
GameTime.TimeManageronSleepStart,onSleepEnd,IsSleepInProgress,HostSleepDone,WakeTime,StartSleep(),CheckSleepStart(),SetTimeAndSync,SkipForwardToTimeGameTime.SleepControllerwithOnSleepStart/OnSleepEndevents andEPhase;ISleepEvent;SetTime_Server,SkipToTimeAndSync,Normalized24HourTime.CurrentTime,ElapsedDays,GetMinutesFrom24HourTimeunchanged.UI.SleepCanvasremoved.NPCs.NPCMovementAgent,agentCurrentPath,agentCurrentSpeed,WalkSpeed,RunSpeed,MoveSpeedMultiplier,UpdateSpeed(),WarpToNavMesh(),walkResultCallback; nestedNPCSpeedController.SpeedControl_agent,_currentPath,SpeedControllerproperty,DefaultWalkSpeed,SetAgentSpeed,SetAgentAvoidancePriority,AgentDesiredVelocity,NavMeshAreaMask; newNPCs.SpeedControl,NPCSpeedPresetsNPCs.NPCSendTextMessage(string),CreateMessageConversation()AssignConversationMessage(MSGConversation),CreateAndAssignDefaultMessageConversation(),CreateMessageConversationWhenLocalPlayerExists(),UnassignConversationMessage(),GenderMessaging.MSGConversationSendablesfield_sendables,SendPlayerMessage(SendableMessage, int, bool),GetSenderIcon().currentResponsesunchanged.IMessageEntityandResponseCallbacktypes removed;MessageContactInfoaddedDialogueDialogueContainertypeDialogue.ConversationClothingClothingUtility(+ClothingSlotData,ColorData),EClothingApplicationTypeClothingConfiguration,ClothingSettingsUI.CharacterCreator.*CharacterCreatornamespacePersistence.LoadManagerQuestsQuest_TheDeepEndRemoved types S1API still references by name:
CharacterCreator,MugshotGenerator,ClothingUtilityand its nested data types,EClothingApplicationType,DialogueContainer,NPCSpeedController.SpeedControl.Verified unchanged:
NPCManager.NPCRegistry,NPC.Avatar,NPC.SetVisible,Player.IsRagdolled,PlayerMovement.Teleport,CallManager.QueueCall,Phone.IsOpen,Business.OwnedBusinesses,Property.LoadingDocks,Property.EmployeeCapacity,Employee.IsAnyWorkInProgress,CurfewManager.OnUncappedMinPass, thePlayerarrest RPC, and all the employee work behaviour types.New surfaces that might be worth wrapping
SpecialCustomers.*(26 types):SpecialCustomerManager,SpecialCustomerLeader,SpecialCustomerCamp,SpecialCustomerGroupPOI, group save data, activities, and thequeuecustomergroupconsole commandMap.NPCEnterableBuilding:OnNPCEnteredBuilding,OnNPCExitedBuilding,GetOccupants()GameTime.SleepControllerphases and eventsAvatar.AvatarObjectLibraryand theAvatar.Creationeditors (the patch notes say user-created cosmetics build on these later)ComputerBehaviour,ConversationBehaviour,DancingBehaviour,GuitarBehaviour,MoveToAndActBehaviour,PhoneBehaviour,SittingBehaviour,RevingBehaviour,ProtestingBehaviourRepro
Switch to the
betabranch in Steam, launch with MelonLoader and S1API 3.2.0, reach the main menu, readMelonLoader/Latest.log. The two HarmonyInit failures show during S1API init; theset_npcexception appears as soon as NPC prefabs awake.Diffs were produced offline with S1Atlas (https://github.com/madjagstudios/S1Atlas) against a local install; no game content redistributed. The
betabranch of this repo (3.1.0-beta.9, July) predates all of this, so nothing there covers it yet.