Status

This page says how finished the framework is. It then lists what 0.12.0-beta and 0.10.0-beta added, for modders who want to see which calls are new.

In short

  • This is a beta. The latest release is 0.12.0-beta. A call can change before version 1.0, so a mod you build now may need small fixes later. The API reference lists the changes planned for 1.0.
  • Only Obenseuer 0.5.08 (Steam build 25969064) is supported. On another game version the framework still starts and logs a warning, but a feature group that depends on changed game code can be turned off.
  • Extensive testing has not been done yet. The framework has been written against the game’s own code, and each feature has had basic checks, but not long play sessions.
  • Some parts are marked experimental. They work, but expect rough edges: quests, dialogue and law (the Story API), Steam and lobby helpers for co-op (Net), mod NPCs, NPC appearance, the debug trace, the tutorial and computer files.

What changed in 0.12.0-beta is in the changelog.

What is new in 0.12.0-beta

Version 0.12.0-beta adds the calls below on top of 0.10.0-beta. It also carries the 0.11.x work, which was never released on its own. Each line names the main calls and links to its API page. The changelog has the full details.

Developer tools

  • Developer menu: DevMenu adds a window (F8 or the omf_dev console command) with quest, state and mod tools. DevMenu.AddSection adds your own card, AddWatch adds live values, and SaveIsDevModified tells whether a save was changed through the menu. It is off by default. See Developer menu.
  • No clip: a toggle on the menu’s Player card, next to God mode. See Developer menu.
  • Patch overloads: CorePatcher.Patch has four overloads that take a transpiler. See Framework helpers.
  • Doc coverage check: tools/check-doc-coverage.py fails when a config key, limit or settable property is missing from the docs. See Debug.

Inventory, storage and crafting

  • Ingredients from your containers: InventorySources.Register makes your containers count for the furniture workbench and renovation orders. See Inventory sources.
  • Crafting sources: CraftingSources.Register takes a priority and a per-slot filter, SetPriority and SetSlotFilter change them, and Consumed reports what a craft took. See Crafting sources.
  • Storage window: StoragePanel.AddButton and RemoveButton add your own button. See Storage panel.
  • Recipe lists: RecipeFilter.Add hides recipes from a crafting list, and Matches helps search it. See Recipe filter.
  • Unloaded scenes: UnloadedStorage reads a storage in a scene the player is not in and queues a take or give for the next load. See Unloaded storage.
  • Containers: Containers.IsTenantOwned, IsInPlayerTenement, IsPlayerOwned, IsNotNpcOwned, ApartmentOf and IsLocked. See Inventory.
  • Fix: Inventory.Take counts what it removed and gives it back if it fell short. See Inventory.

Quests and dialogue

  • Quest control: QuestAuthoring.Restart, Reset, JumpTo, SetTitle, SetDescription, Remove and Checkpoint. QuestDefinition.Next chains a follow-up quest, and QuestAuthoring.HandIn takes items all or nothing. See Quest authoring.
  • Quest reads and events: Quests.Rewound, Quests.State and Quests.Counter. The core_quest console command restarts a quest or finishes an objective. See Quest authoring.
  • Dialogue: Dialogue.AddBranch takes an onPicked callback and waits for an anchor that is not loaded yet, and AddQuestTopic adds a quest topic. See Dialogue authoring.

New Game screen and difficulty

  • New Game options: NewGameOptions registers toggles, choices, whole numbers and, with RegisterFloat, stepped numbers. The rows show on every difficulty, and Events.NewGameStartedInfo carries the chosen values. See New Game options.
  • Difficulty presets: GameDifficulty.Register, SetPreset, ClearPreset and ActivePreset offer a difficulty of your own. See Difficulty presets.

Saves, scenes and world

  • World props: WorldProps places a model, primitive, furniture, light or anchor in any scene and brings it back on every load. See World props.
  • Saves: SaveData.Flush writes one store at once, SaveSlots.CurrentFolder gives the loaded slot’s folder, and Events.BeforeSave, AfterSave and AfterLoad carry the save folder. See Game save data.
  • Mod NPCs and relationships: ModNpcs.MoveTo moves a loaded person of your mod, and Relationships.SetDisposition sets a score and its target together. See Mod NPCs.
  • Loaded framework mods: FrameworkMods.Loaded() lists the framework mods that started. See Loading.
  • Scene looks: SceneLooks.ApplyToSkeleton puts a look on a humanoid body’s own skeleton, with SyncPose, SetAutoPose, RigOf and Describe. See Scene looks.

Phones, banking and hints

  • Mod phone numbers: Phones.Add, Remove and Clear give a mod number that answers and starts a conversation you wrote. See Phones.
  • Account freezing: Banking.IsFrozen, Freeze and Unfreeze. See Banking.
  • Hints and key prompts: Hud.ShowHint and ShowPrompt draw the framework’s own panels, with HintStyle and PromptStyle to use the game’s hint box or tutorial pop-up instead. Two settings in the Mods menu turn them off. See Hud.

Input and Mods menu

  • Keyboard hold: InputCapture holds the game’s keys back while your mod needs the keyboard. See Input capture.
  • Menu: UiState.IsTyping, a confirm flag on ModMenuActions.Register, and controller and keyboard support, descriptions, Reset buttons and a scrollbar in the classic Mods menu. See Mod menu.

What is new in 0.10.0-beta

Version 0.10.0-beta adds the calls below on top of 0.9.0-beta. Each line names the main calls and links to its API page. The changelog has the full details.

Player and survival

  • Timed waits: PlayerState.Wait runs a wait with WaitOptions and reports the in-game minutes that really passed. IgnoreNeeds and NoPassOut change what the wait allows. See Player.
  • Bed time panel: PlayerState.PickTime shows the bed’s time panel with a mod title, then calls onConfirm or onCancel. See Player.
  • God mode and frozen needs: PlayerState.GodMode, SetGodMode, NeedsFrozen and SetNeedsFrozen, with one setting per mod, so two mods do not undo each other. See Player.
  • Damage and breakdowns: Survival.InterceptDamage scales or cancels damage, and Survival.Breakdown cancels each breakdown step. RemoveCrossed, RemoveDamage and Consumables.Remove remove handlers. See Player.
  • Custom skills: CustomSkills adds up to 64 skills per mod to the character panel, saved per save, with level-up banners. See Custom skills.
  • Movement: PlayerMovement.SetRunMultiplier, Crouch, StandUp, LockLook, UnlockLook and LockLookAt, and versions of the speed multipliers that take your mod id. See Player movement.
  • Camera and screen: CameraView.SetFirstPersonBody and ClearFirstPersonBody, ScreenFx.SetFovOverride and ClearFovOverride, and versions of FadeToBlack and FadeIn that take your mod id. See Player and Screen FX.
  • Weapons: Weapons.SetHitFactor and ClearHitFactors, the Weapons.Hit event and Weapons.EquippedLeft. See Weapons.
  • Travel: Travel.AddEntrypoint and RemoveEntrypoint, tracked for each mod. See Player.
  • Wait stations: WaitStations.All, CanUse, Use and the Finished event, and new WaitStationInfo fields. See Player.

NPCs, characters and animals

  • NPCs in scenes: Npcs.InScene lists every NPC in the loaded scenes, with a Present flag. See NPCs.
  • NPC movement: NpcMovement holds, moves, patrols and stands live NPCs per mod. See NPC movement.
  • NPC actions: NpcActions.FollowPlayer, StopFollowing, Say, Comment, LookAtPlayer, LookAt, StopLooking, StartDialogue and ChangeLevel. See NPC actions.
  • Mod NPC copies: ModNpcs.Spawn for a session copy, and ModNpcs.SpawnSaved for one that comes back after each load. See Mod NPCs.
  • Mod NPC routines: ModNpcRoutines.Set for a weekly routine, WalkTo, Wander, Patrol, Sit, Sleep and Stop orders, and Remove, Clear, Current and the StepChanged event. See Mod NPC routines.
  • NPC appearance: NpcAppearance reads and sets meshes and materials by name, with Restore, ShapeKind and SetBlendShape. See NPC appearance.
  • Characters: Characters.Saved() lists the save characters on the main menu. See Characters.
  • Robbers: Robbers adds aggro, rob, negotiate and aloof, and the Robbed event. See Robbers.
  • Animal stats and tame: Animals.All fills hunger, max hunger, age and full-grown age. AnimalActions.SetTame sets an animal tame, and the choice is kept across a load. See Animals and Animal actions.
  • Animal orders: AnimalActions sits, sleeps, hunts and runs live animals per mod, and SleepPermanently holds one asleep. See Animal actions.

Items, inventory and containers

  • Held models: ItemRegistry.SetHeldModel, and ItemDefinition.WieldTemplateId to borrow another item’s held model. See Registry.
  • Models as meshes: ModelHandle.CreateMesh and CreateMaterials for objects that are not items. See Registry.
  • Missing items: a stack from a mod that is not installed shows as “Missing item”. ItemRegistry.MissingItems, RemoveMissingItems and RemoveAllMissingItems list or clear them, and CanDefine tells whether Define is allowed. See Registry.
  • Consumables: ItemConsumables.Get and Set change an item’s consumable numbers, saved with the save. Clear removes them. See Item consumables.
  • Item givers: ItemGivers.All, SetEmpty, Respawn and the Gave event. See Item givers.
  • Stacks: StackActions gives, drops and pours stacks with a quality, owner or liquid. See Stack actions.
  • Held items: PlayerInventory.EquipHeld and UnequipHeld. See Inventory.
  • Containers: the Containers.Opened and Closed events, FindByGuid, GuidOf and TakeStack, and ItemStackInfo.Slot. See Inventory.
  • World items: WorldItems.IdOf, Find, Remove, ExpiryMinutes, SetExpiryOverride and ClearExpiryOverride, and Spawn.Item with an out object. See World items.
  • Task items: TaskItems.Add, Remove, Has and the Changed event. See HUD.

Crafting, plants and power

  • Recipes: the Recipes.Unlocked event, Recipes.Unlock, CanCraftAt, MeetsSkill and IsAvailable, and new RecipeInfo fields. See Recipes.
  • Crafting stations: CraftingStations.Start, Stop, Pause and Resume, and CraftingStationInfo gains Id, Modifiers, RecipeTypes and HasNaturalLight. See Crafting stations.
  • Craft speed and quality: CraftingSpeed.SetSpeedFactor and CraftingQuality.SetQualityFactor, per mod, with Clear. See Crafting stations.
  • Crafting sources: CraftingSources lets stations take ingredients from extra containers. See Crafting sources.
  • Inventory sources: InventorySources lets the furniture workbench and contractor renovations take ingredients from extra containers. See Inventory sources.
  • Growing stations: GrowingStations lists stations and occupied spots, and sets pause and rot. See Growing stations.
  • Plants: PlantActions.HarvestSpot, SetRotting and SetFullGrownAge, and the other plant calls by id. Plants.Fruits, PlantInfo.ReadyFruit and the Plants.Picked event. See Plant actions and Recipes.
  • Fuel: FuelTypes.All and Get, with burn time and refuse rules. See Fuel.
  • Power devices: the PowerDevices.FuelRanOut event, StoredCharge, MaxCharge, IsBurning and BurnTimeFactor on PowerDeviceInfo, and battery FuelLevel and MaxFuel. See Power devices.
  • Recycling: the Recycling.Recycled event and Recycling.All. See Recycling.
  • Breakables: the Breakables.Smashed event. See Breakables.

Economy, shops and trade

  • Player shops: PlayerShops.Ensure and Release, prices by item id, Sell, Storages, Registers, TakeEarnings, AddEarnings, Earnings and the Sold event. PlayerShopInfo.ManagerGuid and ApartmentInfo.ManagerGuid give the GUID that Ensure takes. See Player shops.
  • Traders: Traders.Buy and Sell trade without the trade screen. SetMoney, Restock, SetPriceFactors and Get manage the trader. See Traders.
  • Base shops: BaseShops.Buy, Sell, Bought and Sold, with their result types. See Base shops.
  • Market stalls: MarketShopInfo.Price and Currency. See Market shops.
  • Money: Cash.Oc and Cash.Rm read the balances. See Economy.
  • Banking: Banking.ExchangeQuote, ExchangeRate and Exchange, between OC and RM. See Economy.
  • Mail: the Mail.Sent event, MailInfo.IsNote, Body and Sender, and Mail.Inbox(MailKind.Letter) reads letters. See Economy.
  • Mailboxes and parcels: Mailboxes.TakeMail takes the receive mail, and ParcelLockers.Claim claims a locker’s packages. See Mailboxes and Parcel lockers.
  • Mail schedules: MailSchedules.Senders, SendNow and SendRandom. See Mail schedules.
  • Legal services: LegalServices lists and queues actions, reads the debt, and raises Queued and Completed. See Economy.
  • Casino: the Casino.Scratched and Casino.Doubled events, and payout factors from Casino.SetPayoutFactor, Contests.SetPayoutFactor and CardGames.SetPayoutFactor. See Casino, Contests and Card games.
  • Contests: Contests.OpponentTolerance and GiveUp. See Contests.
  • Tenants: Tenants.Rent, tenement income, upgrade and clean levels, TriggerEvent and OpenRentScreen. See Tenants.

World, time and weather

  • Clock: WorldClock.Now returns a WorldTime, and WorldClock.SetDate and IsAvailable are new. GameTime.IsDaytime is the game’s day rule. See World.
  • Time control: TimeControl.SetTimeScale, ClearTimeScale, In, Cancel, MinutePassed and SecondsPassed. See Time control.
  • Weather: WorldWeather.SetThunder, SetZone and ClearZones for local weather zones. See World.
  • Sky: WorldSky.Set, Clear and Current override fog, light, sky and stars per mod. See World sky.
  • Water: WorldWater.Volumes and SetVolume, IsPlayerUnderwater, the PlayerSubmerged and PlayerSurfaced events, and BreathTicks, MaxBreathTicks and ResetBreath. See World.
  • Radiation: WorldRadiation.DoseRate, DosimeterOn, DosimeterCharge and DosimeterEquipped. See World.
  • Landmarks: Landmarks.Create, Mark, Remove, Clear and Place, which keep markers across saves, and All, Has, Unlock and the Added event. See Landmarks.
  • Drones: Drones.Nodes, AirNodeInfo and the Drones.NodePassed event. See Drones.
  • Trains: the Trains.Crashed event, TrackTrainInfo.WagonType and CargoGuid, and TrainActions.SetEngine, SetTargetSpeed, Brake, Couple and Release. See Trains and Train actions.
  • Spawners: Spawners.SetRespawnTiming, RespawnTime, the timing fields on SpawnerInfo, SetRespawn, TriggerNow and the Spawned event. See Spawners.
  • Levels: Levels.ChangeTo changes scene by name, and All, Get, SetLocked, Use and the Changing event handle level changers. See Levels.
  • Ladders: Ladders.All, Get, IsPlayerClimbing and SetBlocked. See Ladders.
  • Blast sites: BlastSites.All, Get and the Detonated event. See Blast sites.
  • Scene logic: SceneLogic.Relays, Fire, SetEnabled and the Fired event, and SceneState for branches, counters, states, sequences and timers. See Scene logic and Scene state.
  • Surfaces: Surfaces.All, Get, SetWallpaper, Remove and the Changed event. See Surfaces.
  • Tanks: Tanks.All, Get, Set, Empty, SetLocked and the Changed event. The writers refuse the main water source. See Tanks.
  • Sleep: SleepEvents.PlayerInSafeArea and SafetyFactor. See Sleep events.

Housing, furniture and doors

  • Furniture blueprints and flatpacks: FurnitureRegistry.DefineBlueprint, GiveBlueprint, IsBlueprintKnown and GiveFlatpack, with BlueprintDefinition inputs, time and skill. See Furniture.
  • Furniture in the world: BlueprintDefinition.Pools, FurnitureRegistry.MailBlueprint and AddFlatpackLoot. See Furniture.
  • Placing and moving: Building.Place (with requireKnown), Building.Remove by GUID or item, Building.Move, Find, Managers, Catalog, PrefabOf and IsKnownFurniture. See Housing.
  • Placed piece fields: FurnitureItem gains Rotation, ChildRotation, Skin, AltPrefab, ManagerGuid, ParentObject, AttachedObject and Object. See Housing.
  • Building areas: Building.CurrentArea, the AreaEntered and AreaExited events, and BuildAreaInfo. See Housing.
  • Evictions: Housing.StartEviction, CancelEviction, DefaultEvictionHours, the EvictionStarted and EvictionCancelled events, and the eviction fields on ApartmentInfo. See Housing.
  • Apartments: ApartmentInfo.Type gives an ApartmentType (Small, Medium, Large, Shop or Unknown when the game gives the apartment no type). See Housing.
  • Doors and level changers: DoorInfo.Position and StandPosition, LevelDoorInfo.Position, StandPosition and SpawnPosition, and Doors.OpeningTimes and SetOpeningTimes. See Doors.

Story, quests, dialogue and law

  • Quests: QuestAuthoring creates quests with objectives through the game’s task system, so they save with the game. An objective can start hidden and be revealed later, and Quests.Ready is the place to create quests. A finished quest cannot be reopened. See Quest authoring.
  • Dialogue authoring: DialogueAuthoring adds conversations for the session. See Dialogue authoring.
  • Dialogue choices: Dialogue.AddResponse, RemoveResponse and RemoveAll add player choices to a game conversation. A choice takes an insert position and a link priority. See Story.
  • Law: Law.HasStolenGoods, StolenGoodsValue, and Law.Clear(CrimeKind) to clear one kind of crime. LawActions pays fines, bribes and confiscates. See Law actions.
  • Police: Pursuit.CallPolice, which can be severe or ignore distance. See Pursuit.
  • Surveillance: Surveillance.IsPlayerWitnessed tells whether a camera or witness sees the player now. See Surveillance.
  • Start choices: StartChoices.Selected, Has, Relationship and the Chosen event for the new-game picks. See Start choices.

Phones, UI and menus

  • Phone lines: PhoneLines.All, Ring, StartCall, IsBusy, Ringing, IsRinging, RingingNumber, Answer and Decline, and the CallStarted and CallEnded events. See Phone lines.
  • Computer desk: ComputerDesk.SetWallpaper. See Computer desk.
  • Tooltip: Hud.ShowTooltip and HideTooltip. See HUD.
  • HUD and crosshair: Hud.HideGameUi and ShowGameUi, and HideCrosshair and ShowCrosshair, each counted per mod. See HUD.
  • Main menu: MainMenuButtons.Add with a mod id overload, SetControlsEnabled and IsOpen. See Main menu.
  • Pause screen: the UiState.PauseOpened and PauseClosed events, and PauseEventsAvailable. See UI state.
  • Difficulty: GameDifficulty.SetFactor and Clear scale a difficulty multiplier per mod. See HUD.
  • Settings: GameSettings.SetFov and ClearFov, ToggleSprint, ToggleCrouch, GameDisplay.Brightness and RunInBackground, and ModKeybind.Up. See Settings.
  • Music and sound: Instruments.PlaySong, StopSong, HoldNote, StopHold, and the GuitarPlayed and GuitarCommented events. GuitarCommented now also fires for plain barks. Sounds.SetMixerVolume sets a mixer volume for the session. See Instruments and Audio.
  • WebUi: WebUi.SuspendAll and ResumeAll let a mod hide thread-mode popups, for example while the Steam overlay is open, and [Debug] WebUiMode picks thread, composition or windowed hosting. See WebUi.

Saves

  • Save data: SaveData.Bind returns a SaveSlot<T> whose Value is never null, and SaveData.Peek reads another mod’s data from disk before a load. See Game save data.
  • Object saves: SaveData.Capture, Apply, CaptureByGuid, ApplyByGuid and SelfCheck, and SaveData.Folder. See Game save data.

Net and multiplayer

  • Lobby: Lobby.Owner, IsHost, OwnerChanged, IsRefused, MemberName and Leave(gameTag). See Net.
  • Steam: Steam.OverlayEnabled. See Net.
  • Packets: Net.Dropped counts packets dropped from a full receive queue. See Net.
  • Blobs: NetBlob.Send, Received, Finished, Progress and Cancel, for up to 16 MB sent to one lobby member. See Net.

Modding tools and framework helpers

  • Debug master switch: [Debug] Master traces framework calls, events, saves and loads to the debug log, and TraceFilter narrows it. It is off by default. See Debug.
  • Debug self-checks: [Debug] ModelSelfCheck, RegistrySelfCheck, FloorItemsSelfCheck, CoreModSelfCheck, SaveDataSelfCheck, SaveJsonSelfCheck, KeyChordSelfCheck and FrameworkModsSelfCheck. See Debug.
  • Debug probes: [Debug] PlayerShopProbe, the core_jsonprobe command (with [Debug] JsonProbeCommand on), WebUiFocusDiag for focus loss, and WebUiExclusiveThread to test thread mode in exclusive fullscreen. See Debug. The scenelooks command (with [Debug] SceneLooksCommand on) prints the scene look index and reads the installed game files only. See Scene looks.
  • Mods menu action: the framework’s own Settings page has a Scene looks section with a Run scene looks checks button. It runs the same checks as the scenelooks command for the loaded scene, needs no [Debug] flag and no console, and shows the character and root counts on the menu status line and the full text in the log. See Scene looks.
  • Framework helpers: CoreMod.For(plugin) returns one handle per mod, with Save<T>, Key and the patch helpers. See Framework helpers.
  • Patch helpers: CorePatcher.Prefix, Postfix and Finalizer find their target by name or by Type[]. See Framework helpers.
  • Run once loaded: Events.WhenReady runs an action now, or on the next load. See Framework helpers.
  • World objects: WorldObjects.FindByPath and PathOf. See World objects.
  • Locks: Locks.SetLockpickable, Difficulty and SetDifficulty. See Interaction.
  • Per-mod settings: calls with an owner argument (your mod id) keep one setting per mod, so one mod cannot undo another. See Multiple mods.
  • Starter: the Starter/ folder in the repo is a first mod that builds with dotnet build and finds the game for you. See First mod.

BepInEx 5 and loaders

  • BepInEx 5 build: the framework and WebUi zips each hold a BepInEx 5 build next to the BepInEx 6 build. BepInEx loads the one that matches. See BepInEx 5 and BepInEx 6.
  • Packaging: the packaging guide shows how a mod ships a BepInEx 5 build next to its BepInEx 6 build in one zip. See Packaging.

Changed

  • WebUi is an optional module, ObenseuerCore.WebUi.dll. Mods that use WebUi depend on it and reference that DLL. Without it, the Mods menu uses the classic window. See WebUi.
  • The WebTheme setting moved to the module’s config file, and WebMenuSelfCheck moved there too and is not carried over. See WebUi.
  • WebUi pages and frames can no longer create a Worker, because a worker could open sockets outside the lockdown. A mod id that does not fit the host rules gets an h-- host, so its web storage starts empty. See WebUi.
  • Mods built for BepInEx 6 use a SemVer range in BepInDependency, such as ">=0.11.0". BepInEx 5 needs a plain version, such as "0.11.0". See Packaging.
  • The preloader, ObenseuerCore.Preloader.dll, is an optional patcher that is not in the zips. It builds for BepInEx 6 and, with -p:Loader=BepInEx5, for BepInEx 5. Copy the BepInEx 6 build from preloader\bin\ or the BepInEx 5 build from preloader\bin\be5\ to BepInEx\patchers\ObenseuerCore\ to use it.
  • The Starter build no longer copies the DLL into the game folder. Add -p:DeployToGame=true to copy it. See First mod.
  • Traders: Sell is all or nothing, like Buy. A trade cannot start inside another trade, and cash writes, mail sends, PlayerInventory.Give and Take, and Traders.SetMoney and Restock are refused while one runs. See Traders.
  • BankLedger.IsAvailable needs only the game changes for accounts, and a missing interest, debt, scam or legal change no longer turns the ledger off. See Economy.
  • WorldClock.SetTimeOfDay refuses a time earlier than the current game time. See World.
  • WorldWeather.Set throws ArgumentException for a negative index or transition, even when no weather system is ready. See World.
  • CustomSkills.Register throws for a maxValue above 1,000,000, and MailSchedules.SendRandom throws for a max above 100. See Custom skills and Mail schedules.
  • The item-ID calls, such as give, spawn, shop stock, containers and mail, read the catalogue directly. An ID that is not in the catalogue is refused. See Registry.
  • FurnitureItem.Id now gives a vanilla piece its addressable path instead of null, and Building.FurniturePlaced fires for build-mode placements. See Housing.
  • The lobby checks the game version and build, and refuses a joiner on another one. See Net.
  • Net reads packets for up to 2 ms a frame, and at most 4 per sender reach handlers each frame. Extra packets wait in a queue for their sender. See Net.
  • Save data is written with Newtonsoft.Json. A file it cannot read falls back to JsonUtility, once per mod. See Game save data.
  • Save-file classes such as BankLedgerData and FurnitureManifest are no longer public. Mods never used them. See API reference.
  • Survival OnCrossed, InterceptDamage and Consumables.Intercept ignore a repeat registration by the same mod, and Cancel wins. Dialogue.Intercept, Law.Intercept, SleepEvents.Intercept and Survival.Breakdown use the same cancel rule. See Multiple mods.
  • Each group of related game changes now has its own feature group, so a game method that is missing turns off only its own events. See World and Housing.

Fixes are listed in the changelog.

BepInEx 5 and BepInEx 6

The framework runs on BepInEx 5.4.23 or later (Mono, x64) and on BepInEx 6 Unity.Mono (x64, be.788, the tested build). The framework zip and the WebUi zip each hold two builds, one for BepInEx 6 and one for BepInEx 5, and BepInEx loads the one that matches.

Testing

These areas have been written against the game’s code and checked, so they are the most likely to work. They have not had long play sessions:

  • Housing and building: Building, Housing, FurnitureItem.
  • Items and crafting: ItemRegistry, Recipes, Crafting, Recycling, TaskItems, Containers.
  • Money and shops: Banking, Mail, BaseShops, MarketShops.
  • Player: PlayerState, PlayerMovement, Characters, Weapons, Travel, UiState.
  • NPCs and animals: Animals, NpcActions, Pursuit, Law, Quests.
  • World: GameTime, WorldWeather, WorldWater, WorldRadiation, WorldItems, WorldLocation, Levels, Spawners, Drones, Landmarks, PowerDevices, FuelTypes, Plants, SleepEvents.
  • Game menus and settings: MainMenuButtons, GameSettings, StartChoices, Hud, WaitStations.
  • Net and Steam: Lobby, Net, NetBlob, Steam.
  • Save data: SaveData.
  • Other: Casino, Contests, PhoneLines, ParcelLockers, BlastSites, Breakables, Ladders, WebUi, CorePatcher, CoreLog, Survival.

What to do if something fails

  1. Note the game build from the first line of BepInEx\logs\ObenseuerCore.log.
  2. Attach that log and your mod’s own log to the bug report. See FAQ.
  3. Report it on the GitHub issues page.

This site uses Just the Docs, a documentation theme for Jekyll.