Adds an English-first bilingual Thunderstore description while retaining complete Simplified Chinese instructions.
Adds a clear compatibility table for vanilla clients, Signal Translator broadcasts, fully modded HUD fallback, and full-crew wipes.
Separates the player-facing Thunderstore page from source-build documentation and removes developer-only setup details from the public package page.
Clarifies installation, configuration, known limitations, troubleshooting, authorship, redistribution rules, and AI-generated icon disclosure.
Contains no gameplay behavior changes from 0.5.4.
0.5.4
Identifies 青金石 as the public author in the assembly metadata, documentation, and ownership notices.
Adds a bilingual proprietary end-user license that permits personal gameplay and attributed media while prohibiting unauthorized redistribution, repackaging, impersonation, derivative releases, and commercial exploitation of the mod itself.
Adds an authenticity notice, a recipient-specific HR evaluation-license template, ready-to-copy publication text, and a repeatable release/evidence checklist.
Adds guarded release packaging and evidence-archive scripts that generate SHA-256 records and require clean, tagged Git source for final evidence.
Adds an original 256x256 Thunderstore icon and validates its PNG format and dimensions during release packaging.
Records QingJinShi as the owner-controlled Thunderstore Team and the canonical LastWords package page.
Initializes the project for a local Git authorship history without publishing the private source or build artifacts.
0.5.3
Allows the last-words input to use the configured maximum length even in SignalTranslator mode.
Makes Auto prefer a real, available Signal Translator for messages of any input length, truncating only the actual vanilla broadcast payload to its first 10 visible characters.
Shows the sender the exact truncated message and a clear delivery note when the Signal Translator shortened a longer last word.
Uses the full message through LastWords networking only when Auto cannot find an available real Signal Translator; vanilla clients still require the purchased device.
0.5.2
Restores BepInEx's safe default Application/.cctor entrypoint so plugins that load Unity textures during Awake, including LC Chinese Project 3.2.9, no longer crash inside UnityEngine.ImageConversion.LoadImage.
Drives LastWords from narrowly scoped Harmony postfixes on PreInitSceneScript.Start, MenuManager.Update, and HUDManager.Update, instead of changing the startup timing of every installed plugin.
Preserves the managed LastWords coordinator when Unity destroys BepInEx's early Chainloader carrier, then creates the Canvas on the first verified live Unity frame.
Keeps vanilla-client compatibility limited to a real, purchased Signal Translator and its original 10-character display limit.
0.5.1
Centers the transmit and silence buttons symmetrically around the modal's midpoint.
Restyles the modal and broadcast banner as a dark blood-red final transmission.
Formats authenticated broadcasts as [DECEASED] PlayerName: message and shows received text in red beneath a MESSAGE FROM THE DEAD heading.
Bumps the named-message protocol to v2 so mixed 0.5.0/0.5.1 clients cannot misinterpret payloads.
0.5.0
Replaces the unreliable vanilla system-chat fallback with a LastWords named-message protocol using reliable sequenced delivery.
Requires all players to install the mod for fallback messages; actual Signal Translator broadcasts remain visible to vanilla clients.
Validates client submissions on the host, including sender identity, death state, and the presence of another living crew member.
Displays received last words through an independent always-on-top Canvas on every modded client.
0.4.6
Sends the vanilla crew-wide system-message ClientRpc directly when the last-words sender is the host/server.
Avoids the host-to-self ServerRpc round trip that failed to fan out to an unmodded LAN client during a real two-client test.
Retains the vanilla ServerRpc relay for non-host senders and logs the active network role and selected route.
0.4.5
Suppresses the last-words opportunity when no other connected, living crew member remains.
Rechecks the living crew at window-open and submission time, preventing a message after the remaining crew dies while the modal is open.
Adds a default-off AllowWhenAllPlayersDeadForTesting configuration override for solo UI development.
0.4.4
Adds an independent, always-on-top Canvas banner containing the submitted last words for eight seconds.
Keeps the banner visible after the input modal closes, so a solo player's all-dead/spectator HUD cannot hide the local confirmation.
Continues sending the same crew-wide vanilla system-message RPC to connected clients.
0.4.3
Inserts the crew-wide fallback into the sender's local chat history before sending the global RPC, so a dead host can see their own last words immediately.
Shows the submitted text in a 2.25-second local delivery confirmation before closing the last-words window.
Relies on vanilla duplicate suppression to prevent the host from seeing the local insertion and RPC echo twice.
0.4.2
Replaces the player-chat fallback with vanilla's global system-message RPC (playerId = -1), which is not filtered by sender identity, distance, or alive/dead state.
Uses an ASCII [LAST WORDS] prefix because the vanilla HUD font has no Chinese glyphs.
Logs why Auto mode selected the crew-wide fallback instead of the Signal Translator.
0.4.1
Defers Canvas and dynamic-font creation from plugin Awake to the first real Unity Update frame.
Fixes a native UnityPlayer crash caused by calling Font.CreateDynamicFontFromOSFont while Chainloader is still executing inside MonoBehaviour..cctor.
0.4.0
Returns to a normal BaseUnityPlugin.Update polling loop after identifying the actual BepInEx bootstrap issue.
Documents and applies the MonoBehaviour/.cctor BepInEx entrypoint workaround required when Application/.cctor loads plugins before Unity can register their components for updates.
Removes the preloader patcher and all experimental runtime-hook workarounds.
0.3.1
Moves the preloader bridge from UnitySynchronizationContext.ExecuteTasks, which is absent from the game's active player loop, to the verified MenuManager.Update and HUDManager.Update methods in Assembly-CSharp.
Keeps the same pre-load IL injection architecture while ensuring a tick source exists in both the main menu and an active lobby.
0.3.0
Adds a BepInEx preloader patcher that injects the LastWords tick bridge directly into UnitySynchronizationContext.ExecuteTasks before UnityEngine.CoreModule is loaded.
Removes runtime-installed Harmony, RuntimeDetour, synchronization-context, and PlayerLoop callbacks after the tested Unity 2022.3 environment consistently replaced or ignored all of them after Chainloader startup.
Creates the Canvas lazily when the injected bridge first executes on the live Unity main thread.
0.2.3
Inserts the polling callback directly into Unity's native PlayerLoop.Update phase, bypassing MonoBehaviour messages, coroutines, Harmony, and synchronization-context dispatch.
Removes the synchronization-context timer fallback after the tested Unity context accepted posted work but never consumed its queue.
Retains direct RuntimeDetour hooks for immediate death notification and as an independent polling fallback once the HUD exists.
0.2.2
Replaces Harmony patches with direct MonoMod.RuntimeDetour hooks after the tested BepInEx environment recorded Harmony patches without ever entering them.
Adds a managed timer that posts polling work to Unity's main-thread synchronization context, providing a hook-independent fallback without touching Unity objects from a background thread.
Adds separate diagnostics for the background scheduler, Unity main-thread dispatch, and direct runtime hooks.
0.2.1
Drives player-state polling from the game's own HUDManager.Update loop instead of a coroutine on a dynamically-added component.
Registers Unity's native Application.onBeforeRender callback as an independent fallback tick source.
Adds one-time activation logs for both tick sources, making it possible to distinguish patch failure from player-detection failure.
0.2.0
Replaces IMGUI with a persistent screen-space Unity Canvas, legacy InputField, and real Buttons.
Replaces scaled-time InvokeRepeating with a WaitForSecondsRealtime coroutine that also runs while the main menu or game is paused.
Keeps the Canvas at the highest sorting order so the all-players-dead HUD cannot cover it.
Uses a dynamic Microsoft YaHei/Arial font chain so Chinese last words render without relying on Lethal Company's limited bundled fonts.
0.1.3
Makes LastWordsRuntime public so Unity reliably dispatches callbacks to the dynamically-added component.
Starts state polling explicitly through Unity's native InvokeRepeating scheduler instead of waiting for Update discovery.
Logs the component's enabled state and the first scheduled poll.
0.1.2
Fixes frame and IMGUI callbacks not being delivered to the BepInEx plugin component in the tested game setup.
Creates an explicit active, persistent LastWordsRuntime component for Update and OnGUI.
Replaces Harmony assembly scanning with an explicit KillPlayer patch and verifies that the postfix is installed.
Adds startup logs for the runtime driver's first Update and OnGUI callbacks.
0.1.1
Fixes missed death detection during the single-player all-dead/automatic-return flow.
Hooks PlayerControllerB.KillPlayer directly while retaining state polling as a fallback.
Forces the IMGUI window to the foreground.
Adds diagnostic logs for player tracking, death detection, window opening, first render, and closing.
0.1.0
Initial implementation.
Detects the local player's alive-to-dead transition without patching a fragile death-method signature.
Gives one last-words opportunity per death and resets it after revival.
Uses the ship Signal Translator when possible and vanilla chat as an automatic fallback.
Adds configurable broadcast mode, message length, and popup delay.
Thunderstore development is made possible with ads. Please consider making an exception to your adblock.