BossMakerAPI
Server-authoritative API for custom How to Fish bosses with phases, abilities, vanilla boss UI and FishNet multiplayer.
By SkyLiN3
CHANGELOG
Changelog
0.10.3 — custom-boss hit and kill feedback
-
Refresh the BossMakerAPI publication icon. The separately installed Devourer content package now uses an English DLL/folder name and its own refreshed icon. The framework's gameplay contracts and boss definitions are not changed by artwork.
-
Prepare separate English API/content releases and refresh the distributed creator packaging recipe. Release DLLs omit debugging metadata with machine-local paths; gameplay code and public identities are unchanged by this packaging cleanup.
-
Defer supported custom-boss hit/kill feedback to the server-confirmed accepted hit and actual-death result. Feedback receipts never apply damage again.
-
Add reliable hit receipts in wire protocol 12; all peers must update together. Manifest protocol 4 and content schema 10 remain unchanged.
-
Keep the vanilla-creature feedback path and previous encounter-local HP/native bar fixes. User-reported acceptance on 2026-09-21 covers combat, multiplayer and save/load; it does not establish exhaustive edge-case coverage.
-
Preserve pre-hit HP in the native bonus calculation without rewriting creature health; duplicate confirmations cannot repeat kill rewards.
-
Release builds pass 444/444 managed checks on each 1.0.12 and 1.0.11 reference target, with zero warnings/errors. These checks do not certify all Unity, multiplayer, save/load, Steam Cloud, menu or performance scenarios.
0.10.2 — unreleased health/phase hotfix
- Use encounter-local maximum health for phase calculations instead of the delayed global vanilla boss-UI maximum, preventing another encounter's cached value from distorting progression.
- Keep real HP while a protected final-phase gate is closed: up to 5% of maximum health, capped at half the final phase's entry pool, with a minimum of 1 HP. Damage protection never heals the boss or fabricates health-bar fill.
- Supply the same captured maximum to native boss UI only for initialized, spawned custom bosses; vanilla bosses are unchanged. Refresh the native bar once with actual HP after binding so a same-maximum spawn cannot inherit the previous empty fill. No image-fill override is used.
- Wait for native client difficulty settings before capturing maximum HP. Correct float-rounded closed-phase thresholds at very large health pools using a bounded search consistent with the phase tracker's comparison.
- Log requested/allowed gate damage once per phase. Detailed actual-HP diagnostics remain opt-in through API debug logging.
- Keep content definitions, default balance, declared bounds, wire 11, manifest 4 and content schema 10 unchanged. Update every peer to matching hotfix builds.
- Final Release builds: 0 warnings/errors and 427/427 managed tests on each exact 1.0.12 and 1.0.11 reference set. Voltfin 1.3.1 compiled independently. Native gameplay/UI/multiplayer and fresh package acceptance remain separate.
0.10.1 — unreleased menu-cleanup candidate
- Move startup/developer settings out of the ordinary ModMenu list into a separate advanced CFG, with backed-up migration and explicit destination precedence.
- Preserve published defaults when migrating invalid settings rather than promoting extreme input to a range endpoint.
- Remove the generic API keyboard listener and archive legacy Debug selectors.
- Add the public, bounded, host-only BossDebugSpawner helper for content-owned testing controls. No client spawn request or fishing-placement bypass is added.
- Supply practical source-only menu helpers and an updated independent Voltfin starter without narrowing existing technical settings/save bounds.
- Keep wire 11, manifest 4, content schema 10 and prior definition identity.
0.10.0 — unreleased live-configuration candidate
- Add validated host-controlled balance updates without restarting the game.
- Keep existing encounters on their captured settings; apply catch probability to future catches and new balance to future encounters.
- Synchronize current and encounter-specific settings for connected and late-joining clients without replacing their local configuration files.
- Document optional ModMenu integration, English configuration migration and the private two-player installation/test workflow.
- Bump the wire protocol to 11. Update every peer together; old networking builds are not compatible. Native multiplayer acceptance remains a separate gate.
0.9.0 — unreleased host-configuration update
- Add opt-in bounded numeric session settings and deterministic definition factories for content authors. Declared host balance applies temporarily on clients without overwriting local CFG files.
- Gate custom content until effective settings are validated and acknowledged; retain strict code, game, asset, structure and schema compatibility checks.
- Restore local startup definitions on disconnect, including prepared stat baselines and effective persistence identity. No live-session hot reload.
- Use wire 10 / manifest protocol 4 / content schema 10. Update the standalone Voltfin starter to 1.2.0 with all five gameplay settings declared.
- Add an English host-configuration guide. Native multiplayer/save acceptance remains a separate release requirement; nothing is published by this update.
0.8.0 — unreleased persistence update
- Add opt-in
BossPersistenceDefinitionmodes: disabled by default, corpse identity/scale only, or supported living-encounter checkpoints as well. - Embed versioned metadata in the native save JSON so the game retains control of paths, validation, temporary files, backups and atomic writes. Preserve exact item associations without guessing from value, position or weight.
- Restore supported encounter health, phase/history, cooldowns, condition state, execution claims and permanent/reversible stat baselines without replaying completed gameplay. Cancel mid-cast work and ability-scoped modifiers safely.
- Add wire 9 restored-item/encounter replication and schema 10 persistence policy identity; retain manifest protocol 3 and assembly identity 0.2.0.0.
- Add English persistence documentation, creator opt-in examples and managed codec/state/native-ABI checks. Native world-item eligibility and the 64-item corpse limit remain unchanged; private plugin state is not serialized.
- Restore API-owned minions and registered child bosses as staged ownership graphs, with complete rollback and unresolved checkpoint retention. Preserve independent persistent resources without replaying cancelled summons.
- Keep native fast-kill achievement time across loading a major boss, guard restoration against reentrant session changes, and retain native trophy value.
- This is a locally prepared candidate, not a published release. Unity save/load, multiplayer, Steam Cloud and clean-installation acceptance remain pending.
0.7.0 — unreleased candidate
- Give the stabilized source tree a distinct public version. Old 0.6.2 archives must not be silently replaced. Preserve SkyLiN3 GUIDs and assembly identity 0.2.0.0; align plugin/file versions and example dependencies.
- Use wire 8, manifest protocol 3 and content schema 9 for session-clock, authenticated rod-return and aquatic/surface-entry changes.
- Add the audited How to Fish 1.0.12 build and retain 1.0.11 reference testing. General 1.0.10 recognition does not certify newer hook-dependent features.
- Retain initial-publication transaction checks, corpse pickup-scale restoration, and nonzero-tick manifest hello handling across host/menu/rehost transitions.
- Add opt-in body-aware surface placement, authenticated rod return after catch replacement and aquatic recovery that can ignore horizontal-only progress.
- Refresh English creator documentation, current limitations, troubleshooting, integration, migration, support and release-preparation guidance. Expand English XML help for the main public extension entry points and English tool diagnostics.
- Supply an independent source starter with its project, plugin, packaging recipe and author documentation. Fresh external builds and a build using the distributed Contracts DLL passed; real Unity acceptance remains pending.
- Make Voltfin the first-boss tutorial: native Eel, a fixed Static Lance warning and a faster phase-local Overcharge loop, with configurable HP, ability damage, catch probability and cooldowns. Replace the unpublished Deep Lantern starter paths/identities and include the four-block English walkthrough. API runtime behavior and Devoraluz balance are unchanged by this tutorial revision.
- Make packaging refuse existing ZIP and checksum destinations rather than silently replace release artifacts. Add source release-identity checks.
- Translate example phase/support display labels into English without changing stable IDs, CFG keys, statistics or ability behavior. Display labels participate in the canonical manifest: rebuild and update every peer together, even when source candidates share the same displayed version.
- Document an opt-in host-only F8 preset for the Voltfin tutorial; retain the API's disabled public debug default. The shortcut does not test fishing.
- Verify the current solution with zero-warning Release builds and 230/230 tests on each audited reference set; pass 29 additional managed Voltfin definition checks and local API/private starter archive checks on 2026-09-14.
- These checks do not certify native multiplayer, physics, performance, save/load or a clean-profile installation. Nothing was deployed or published; candidate release readiness remains false pending real-game acceptance.
The entries below are historical development records, not a claim that every version was publicly uploaded. Protocol versions and test counts apply to the build described by each entry, not to the current candidate.
0.6.2
- Advance logical content schema to 7. Canonical dash identity includes
MaximumTravelDistance,StoppingDistance,BrakeDurationSecondsandExitVelocityFraction; addStats.VanillaCorpseValueMultiplier. Wire remains 6 and manifest protocol remains 3. - Add the optional corpse-value multiplier (0.01–100). The server uses
Item.AddBetMultiplieron the spawned instance. Its synchronized/persisted factor composes with weight, cooking, casino and score/dynamite rather than overwriting integrations, editing the source prefab or adding drops. Persistence of this native numeric factor is not persistence of custom boss identity. - Bound charges horizontally, stop before the target and brake gradually. Additive defaults retain older definitions' instantaneous behavior.
- Use the verified vanilla gameplay-player anchor for selection, tracking, damage and forces, instead of the wrong network transform.
- Limit engagement to horizontal motion while alive, spawned and active; yield during controlled charges and stop driving the corpse after death.
- Align public metadata/examples/packages to 0.6.2; retain Contracts assembly 0.2.
- Release suite: 88/88 tests, zero warnings and errors.
- Include Reef Tyrant as a minimal source example without piranhas, external assets or another boss-mod dependency.
- Give the library its own technical icon, distinct from El Devoraluz artwork.
- Place documentation/examples inside the API folder; validate manifests, icons, UTF-8, links, allowlists, hashes and archive paths.
0.6.1
- Wire 6 prefix-compresses repeated manifest-field paths. Logical schema remains 5 and manifest protocol remains 3.
- Keep the definition section at 64 KiB, measured after compaction, and the complete wire payload at 128 KiB.
- Register the full Devoraluz definition without cutting abilities, phases, gates or effects to fit transport.
- Reject mixed wire 5/6 peers before interpreting incompatible message contents.
- Align API/example metadata to 0.6.1.
- Release suite: 82/82 tests, zero warnings and errors.
0.6.0
- Add server-authoritative
DashAction: confirmed ability direction, optional vertical impulse, retained prior velocity and explicit speed cap. - Support base and reversible
DashForceMultiplier/DashIntervalMultiplier. OnAttackingFish, these tune verified thrust forces and inherited movement interval;AttackCooldownMultiplierseparately controls contact damage. - Add
LockBeforeResolveSecondsto freeze a tracked target shortly before impact while preservingLockPositionAtTelegraphbehavior. - Extend
SpawnVisualEffectActionwith boss/origin/target/endpoint anchors, direction alignment and local offset/rotation/scale. Positive lifetime can outlive the ability until expiry, phase exit or cleanup; zero retains immediate cleanup. Effects remain data-only presentation. - Layer telegraph fill/edges, server-clock progress, sweeps/contraction, urgency and short afterglow without changing authoritative geometry.
- Add phase gates: minimum time, required phase ability and maximum failsafe. One hit is limited to one transition; the final gate can retain 1 HP.
- Add non-teleporting engagement: cap horizontal speed and steer the Rigidbody toward the nearest eligible player outside the configured distance.
- Make force-volume height explicit with
VerticalTolerance(default 4). - Allow exact supporting-collider surface contact for
Seafloorplacement while rejecting penetration, side overlaps, nonfinite points and other obstacles. - Distinguish no players, ineligible players and eligible but out-of-range targets without exposing player identities.
- Release suite: 77/77 tests, zero warnings and errors.
- Content schema 5, wire 5, manifest protocol 3; assembly identity remains 0.2.
0.5.0
- Add
BossVanillaIntegrationDefinitionto keep template behavior or promote a clone toVanillaMiniBoss/VanillaBoss, using audited native fields, validated duration and exclusive use of the globalBossManagerslot. - Add transactional
ReplaceCatch: preflight, commit revalidation, vanilla-fish rollback and compensating boss despawn. Failure reportsCatchReplacementFailedwithout consuming cooldown or activation limits. - Include
IntroductionGraceSeconds(0–30) in idempotent spawn identity. Grace blocks only that encounter'sAttackingFish.DamageOnCollision. - Refresh promoted bosses' vanilla timer callbacks on late join using synchronized ticks; the fallback does not create a second Canvas for the global boss.
- Content schema 4 adds lifecycle, replacement and grace. Manifest protocol 3, wire 4 and assembly identity 0.2 remain unchanged.
- Expand to 69/69 tests: pure planners/seams, bounds, critical reflected signatures and the complete commit/compensation decision table.
- Migrate public author/package namespace to
SkyLiN3; GUIDs/BossIds use lowercaseskylin3. Packs with the previous author dependency must update metadata and rebuild.
0.4.0
- Fix creature-catch identity before
Awake: inspect the prefab'sCreaturetype, verify the published clone and retain unique ID fallback instead of relying on the not-yet-populatedItem.Creaturecache. - Add authoritative reactive conditions for health, damage received, player
distance, living/defeated minions, completed abilities, phase time and hook
state.
All/Any/Notuse three-valued logic and fail closed when facts are unavailable. - Add
ReactivewithAfterFalseorAfterCooldownWhileTruerearming, bounded by cooldown, repetitions and a single active ability. - Add
ExitActions,BossPhaseExitedand keyed stat modifiers with permanent, phase, ability and timed lifetimes. Recompose reversible layers from an exact baseline instead of accumulating inverse multipliers. - Add server-only placement modes, bounded clearance searches and deterministic random-disc, ring, line, cone and socket formations.
- Expose terminal action snapshots/events:
Applied,Skipped,Failed, stable codes and counters. Telemetry is not a command or late-join history. - Add structured
BossDefinitionValidator.Analyze; preserveValidate. - Add opt-in
BossHookBridge.Report/TryGetStatefor server integrations that authenticate a real hook. Calculate tension/progress/stagger/recovery without creating rod joints or automatically hooking a live boss. - Bound exact replay memory to 4,096 catch/report IDs and owner high-watermarks; fail closed on hook-owner capacity rather than replacing identities with hashes.
- Wire 4 snapshots carry phase exits, active modifiers and hook state. 65/65 tests include round trips, pre-Awake prefab resolution and in-process loopback; these are not a real multiplayer session.
- Content schema 3, manifest protocol 3; retain assembly identity 0.2 while advancing product/file/plugin/package versions.
0.3.0
- Add deterministic declarative abilities with spawn/delay/interval/phase-entry triggers, finite repetitions, probability and cooldown.
- Replicate circle/ring/line/cone telegraphs with minimum server lead time.
- Add authoritative area damage and forces with frozen eligible targets, per-target limits and bounded force.
- Track server-owned minions with budgets; presentation effects/hazards use process-local budgets, expiry and cleanup.
- Add instance queries, owned-minion inspection and idempotent server-only despawn.
- Add audited server-catch triggers with filters, deterministic probability, cooldown, activation limits and catch idempotency.
- Add explicit
Legacy,PreserveVanilla,AppendandReplaceVanillareward policies, plus template capabilities for catches/rewards/environment. - Wire 3 carries the single active ability's timing and geometry.
- Bound the manifest envelope to 128 KiB, 64 definitions/mappings and 128 entries per category; permit up to 127 custom reward providers with safe, frozen IDs.
- Retain assembly identity 0.2 while advancing product/file/plugin/package versions.
- 48 tests cover 0.2 compatibility, audited builds, scheduler, geometry, ownership, wire 3, envelope/providers, authority and idempotency.
0.2.0
- Canonicalize metadata, visuals, stats, phases, actions and rewards with a stable first-difference diagnostic.
- Add fail-closed FishNet handshake for API version, MVID, content plugins, providers, terminal registration states and collection/prefab assignments.
- Declare and verify SHA-256 of external asset bytes.
- Add authoritative encounter IDs/seeds and immutable lifecycle/revision/sequence/ clock/phase/persistent-presentation snapshots.
- Reserve encounters using idempotency keys; conflicting retries cannot create another NetworkObject.
- Add exactly-once gameplay/reward/cleanup claims with structured outcomes.
- Expose state through instance/runtime handles and
EncounterStateChanged. - Reconstruct late-join presentation without replaying historical gameplay or transient effects.
- Forget cached identities by encounter and object ID to tolerate FishNet ID reuse.
- Seal registries atomically after a one-frame dependent-plugin registration window.
- Deduplicate initial state publication and observe each authoritative revision once.
- 32 Contracts tests cover manifests, differences, lifecycle, authority, revisions, replication, idempotency and once-only execution.
- The P1 trigger/scheduler/telegraph/combat-action engine was still planned here.
0.1.0
- Introduce public definitions, registry, catalog, spawning, events and custom rewards.
- Register prefabs deterministically and transactionally in dedicated FishNet collections.
- Add audited health/stat/death/drop adapters for How to Fish 1.0.10.
- Snapshot definitions defensively and preserve coherent max health on instances/late join.
- Add health phases, minions, effects, audio, persistent visuals and authoritative rewards.
- Add optional HTF MoreItemAPI 2.x reward integration without a hard dependency.
- Add fallback local health bar, BepInEx configuration and diagnostics.
- Include the original Abyssal Angler example, contract tests and reverse-engineering notes.
- Bound phases/minions/rewards, require finite ranges and escape mod-provided JSON.
- Permit concurrent
BossType.Nonetemplates; reject a second native boss encounter while the globalBossManageris occupied.