DonorKit

版本 v0.1.9·更新於 2026-09-06

The donor-scene harvest engine for Outward BepInEx mods: additively load any area, clone a live creature into a dormant template, and unload cleanly. Library dependency, installed automatically when a

模組介紹 作者原文

DonorKit

📖 Full documentation: DonorKit wiki page

The donor-scene harvest engine — "get me a live body for species X, from anywhere in the game".

Extracted from CompanionKit on 2026-07-26 (static-analysis wave, lane 5E) so SpawnKit no longer has

to depend on the pet library for its creature supply.

Requires: BepInEx 5 (BepInExPack_Outward), ForgeKit and NetKit — both hard

dependencies ([BepInDependency]), so BepInEx refuses to load DonorKit if either folder is missing

from BepInEx/plugins. NetKit is needed for the auto-warm room-left re-arm. No SideLoader;

DonorKit builds on a clean runner.

What it owns

  • DonorHarvest — the guarded cycle: additive load → freeze at sceneLoaded → payload →

unload → repair. Generic Func / Func payloads, so one load

can stock many species (light-probe cycles are the scarce resource).

  • DonorSceneTable (+ the embedded DonorScenes.txt) — the species→scene roster, pins,

identity resolution, and build-scene name matching. DonorScenes.txt is generated by

bwspecies build; see tools/BwSpeciesTool/Paths.cs.

  • DonorCreatureFinder — exact-then-substring live-donor lookup within a loaded scene.
  • The guards, each of which exists because the un-guarded version broke a real session:

DonorPhotonGuard (view-id collisions), DonorSaveGuard (mid-harvest saves, deferred via the

game's own SetSaveRequired re-arm), DonorSingletonRestore (the four Instance-hijack

restores), AmbienceGuard + DonorAudioRegistry (the persistent audio registries),

SoulSpotGuard (duplicate-UID throw mid-Awake), DonorDisplayRepair (skybox / display chain),

TerrainGuard (LOD render holes), DonorNetworkInitGuard (guest replica conversion).

  • SkeletonRig / RagdollRig — the rig surgery a dormant clone needs to render and ragdoll.
  • The expedition tier (lane 5E-2, 2026-07-26 — moved here from CompanionKit): ExpeditionHarvest

(the vanilla-loader round-trip state machine for region/town scenes too large to load additively),

ExpeditionOrchestrator (the expedition verb body, batch capture payload, in-place capture,

once-per-launch boot auto-warm), ExpeditionManifest (ck_expeditions.txt — the historical

filename is kept so existing installs keep their record), StorySense (the prologue/first-visit

story-safety reads). Config: [Expedition] in cobalt.donorkit.cfg. The expedition/

templateclear/expeditionreset/templateprobe verbs stay on CONSUMER channels (ck_cmd.txt +

BW twins) — templateclear's full reset must also re-arm CompanionKit's effigy gate, which only

the consumer can reach.

  • The K2 template store (TemplateStore + BodyTemplateStore, lane 5E-2): ONE store with

per-consumer KINDS. The companion-body kind (BodyTemplateStore) carries identity + captured

stats, eager-prunes, refuses substitutes on identity lookups, keeps unhealthy rigs; the spawn kind

(SpawnKit's SpawnTemplates layers on it) holds bare normalized GameObjects with opt-in LRU cap

eviction and rejects unrepairable rigs. The kinds share only the FABRIC (holder/registry/recency/

orphan-proof clear) — unifying the policies would change behavior, so they stay at their call

sites. E3 seams for third mods: TemplateStore.RegisterSpecies(key, scenes) (runtime donor-table

row) and TemplateStore.RegisterTemplate(key, dormantBody) (parks a body in the spawn kind

through SpawnKit's own normalization seam).

What it deliberately does NOT own

  • Puppet-shaped code (the 5E permanent-shim rule — a DonorKit→CompanionKit edge is forbidden):

BodyTemplateCache.PuppetFrom (template → CompanionBody via BodyFactory.BuildPuppet),

ClearAllAndForgetMisses (also resets the effigy harvest gate), and the stat capture itself —

the store calls back through BodyTemplateStore.StatCapturer, which CompanionKit wires to

AttributeCapture.From in its Awake.

  • The pure donor logic — DonorTable, DonorChain, RigSurgery, TerrainMaintenance, the

Expedition* planners — which stays in core/CompanionKit.Core. DonorTable cannot be split

from SpeciesTable/Species/Regions, and its file-mates SpeciesF

安裝與使用 安裝:BepInEx 外掛

  1. 本站下載的壓縮包就是模組本體,通常是 BepInEx 外掛(解壓後得到 .dll 或外掛資料夾)。
  2. 建議流程:用社群模組管理器(如 r2modman)選中本遊戲後匯入該模組,管理器會自動裝好 BepInEx 前置並處理依賴。
  3. 手動流程:先在遊戲目錄裝好 BepInEx 載入器,再把解壓出的 .dll 或外掛資料夾放進 BepInEx/plugins/。
  4. 啟動遊戲,BepInEx 控制台會列印載入日誌;確認這個模組出現在日誌裡即為安裝成功。

帶「前置依賴」的模組需要一併安裝,否則不會載入。功能開關通常在遊戲內或外掛自帶的設定檔裡調整。

前置依賴

下面這些內容需要先安裝,否則該模組不會生效:

BepInEx-BepInExPack_OutwardCeruleanCutlass-ForgeKitCeruleanCutlass-NetKit

檔案與校驗

檔案名稱
DonorKit-0.1.9.zip
檔案大小
217.8 KiB