You are viewing a potentially older version of this package. View all versions.
Blues-BlueSage_QoL_Tweaks_Beta-0.2.0 icon

BlueSage QoL Tweaks Beta

On-Together QoL Early Access: Mod Menu, in-game Styler, auto-reconnect, chat readability/layout, pings, copy links, ID helpers, and more.

Date uploaded a week ago
Version 0.2.0
Download link Blues-BlueSage_QoL_Tweaks_Beta-0.2.0.zip
Downloads 74
Dependency string Blues-BlueSage_QoL_Tweaks_Beta-0.2.0

This mod requires the following mods to function

BepInEx-BepInExPack-5.4.2305 icon
BepInEx-BepInExPack

BepInEx pack for Mono Unity games. Preconfigured and ready to use.

Preferred version: 5.4.2305

README

BlueSage QoL Tweaks

Early Access QoL toolkit for On-Together: Virtual Co-Working.

Current package: v0.2.0 Early Access — reconnect recovery, independent Clone Shield, full-capacity Name Styler editing, and self-only movement tools. Community testing recorded repeated successful recoveries from genuine disconnects without reviving the earlier healthy-session cleanup loop; the focused reconnect checklist remains part of release verification.

This is for players and hosts who want friendly quality-of-life helpers in one mod. It is not the big-lobby mod. For rooms beyond the vanilla cap, the host still needs BlueSagePatched PlayerLimitLift.

Recommended community setup: start with BlueSage QoL as the single comfort/safety mod. Pair it with other BlueSage releases when needed—especially PlayerLimitLift for large hosts—and avoid stacking standalone mods that change the same game surface unless you deliberately disable the duplicate feature. This keeps troubleshooting understandable and reduces cross-mod surprises after On-Together updates.

Large-lobby hosts should use the matching BlueSage PlayerLimitLift 1.1.3 or newer. Its above-15 relay preserves the original remote sender metadata, so remote slash text remains ordinary remote chat and cannot be mistaken for a command typed locally by the host. QoL remains fully standalone for casual clients and vanilla-cap hosts.

Early Access note: this mod is still moving quickly while players test it, but it is meant to be friendly to normal players. If something feels noisy, open /qolmenu, turn off that one feature, and let Blue know what happened.

Jump To

Quick Start · 0.2.0 Highlights · What It Adds · QoL Menu · Feature Notes · Common Commands · Settings · Compatibility · Troubleshooting · Credits

Quick Start

Install it, launch the game, then try these:

  • Press Home or type /qolmenu to open the friendly settings menu.
  • Press Insert or type /styleui for Name Styler, Status Styler, Spoons, themes, and copyable styled text.
  • Type @name in chat to get mention suggestions, then press Tab or click a suggestion.
  • Use /qol status or the menu's Run QoL Status button to see what is enabled. Hosts can still use /hh run for a quiet lobby-health check.

Those four actions cover the normal day-to-day workflow. Everything below is optional and can be learned as you need it.

Handy Defaults

  • Buttons stay neutral until they represent a real state: coral marks the selected tab/action, sage means enabled/open, gray means off, and orange is reserved for genuinely experimental controls. Open Style Helper now matches the surrounding menu instead of competing with it.
  • Two local lobby tips appear once each time you join. They cover Home, Insert, slash-command typeahead, your actual saved Push to Talk / Voice Activation choice, the game's Pomodoro/focus ticket + XP reminder, and local audit/profile navigation. They never post to global chat.
  • Click a chat message to copy only the message text. Links are recolored; Shift-click once to copy/warn, then Shift-click again to open.
  • BlueSage local command/system response rows are clickable through the same sanitized copy path; names and timestamps are not added to copied text.
  • Click minimap dots to open ID cards when BlueSage can safely match the player.
  • Hold Shift to run or Ctrl to slow-walk with BetterMove.
  • Once you own a canteen item or chalk color, use it normally; Reusable Consumables keeps it from being spent. Turn the feature Off any time to restore normal item use.
  • Use /as now if a long session feels heavy.

Why Use BlueSage QoL?

BlueSage QoL is the community's one-stop comfort and safety layer: readable chat, reliable style/status tools, reconnect recovery, large-lobby helpers, minimap and player-panel polish, avatar/chalkboard persistence, and cautious identity-clone evidence in one guided menu. Most useful features start on; personal or still-experimental features stay opt-in. Every major feature has its own toggle, plain-language tooltip, status output, and reset/undo path where state is editable.

The goal is a dependable pillar the community can learn once instead of assembling many overlapping patches: players choose exactly what stays on, while hosts can explicitly authorize trusted helpers for defensive actions without granting power through a copied name or public chat message.

For the most predictable setup, use BlueSage QoL on its own or pair it with the matching BlueSage PlayerLimitLift when the host needs rooms beyond the vanilla player cap. BlueSage includes compatibility stand-downs for several well-known standalone mods, but stacking two mods that both own reconnect, chat rendering, minimap coloring, avatar slots, chalkboard sync, or other shared game surfaces can still create unexpected behavior after game updates. Start with BlueSage's built-in version of an overlapping feature; add another mod only when you specifically need something BlueSage does not provide, then disable the duplicate toggle and check /qol status.

Hosts gain extra defensive tools without turning normal players into moderators. Clone Shield remains advisory, host/helper commands require explicit SteamID64 authorization, and only the active host performs native ban/unban actions. If a host does not run BlueSage QoL, the cautious public advisory and partial-ID evidence can still be shared through the game's normal moderation process.

Community links:

Support Blue's community modding work:

ko-fi

0.2.0 Early Access Highlights

  • Style and status reliability: preserves the exact styled base name through /status, /set-status, /brb, /afk, /back, Status Styler, Status Color, Spoons, and mood changes; Detect Current restores the live palette instead of Gradient 3 defaults.
  • Preview/apply parity: Status Styler preview, clipboard copy, and live Apply share the same saved bracket-aware suffix path, including custom [] and {} status wrappers.
  • Mod Menu: press Home or type /qolmenu for toggles, safe Customize fields, quick actions, themes, local status checks, and a consistent resolution-safe layout.
  • In-game Styler: press Insert or type /styleui to manage name colors, preserved rich-text tags, status tags, templates, custom Spoons/mood labels, Detect Current, copyable style text, and bounded undo/redo/reset.
  • Full Name Styler buffer: raw rich-text markup now uses the same configured Name/ID limit as Apply, up to 4000 characters, so long nested styles keep their closing tags intact.
  • Self movement tools: the dedicated section under Credits / Other provides Save Pos, Teleport Saved, default-off Noclip/Fly, and resettable speed/jump/gravity multipliers. Every action targets only your own character; fly always starts off. /selfmove provides the same local controls for command users.
  • Trusted Host Rescue compatibility: QoL quietly accepts a rescue from the authenticated current host or an owner-scoped Helper, but only for one exact QoL player. The request travels through hidden lobby metadata, never public chat. Stale, ambiguous, or wrong-target requests fail closed.
  • Nine avatar presets: the default-on Avatar Presets 4-9 bridge leaves existing/default vanilla slots 1-3 untouched and game-owned; added slots 4-9 are stored separately by BlueSage and apply through the normal game customization path.
  • Chalkboard persistence: a default-on local board library. Anyone can /chalksave name; only the host can /chalkload name into the shared lobby through the native board sync path. BlueSage stands down automatically when Andrew's Chalky is installed.
  • Reusable consumables: default-on protection for owned canteen items and chalk. Using one no longer lowers its inventory count, while initial purchases, clothing, bait, rods, and bobbers keep the game's normal ticket/inventory behavior.
  • Chat readability: local text outlines, outline intensity 25-100, normal/black outline colors, and BlackNamesOutline for true-black styled names/messages.
  • Chat layout controls: /chatscale scales the whole chat UI, /chatfont enlarges text only, /chatheight adds vertical space, and /chatrows 25-250 selects retained scrollback with a balanced 150 default.
  • Event-driven chat polish: styles newly appended rows instead of repeatedly walking and dirtying the whole chat tree; the backdrop follows the current scroll viewport without blocking native scrolling.
  • Longer text defaults: chat, Name/ID fields, ID-card details, and room names default to 3000 characters.
  • Comfort helpers: ping mentions, ticket ping sound, click-to-copy chat, safer chat links, minimap dot-to-ID, Clone Shield, BetterMove, asset sweep, host health, and reconnect guard. Player Render Saver remains experimental and default off.
  • Helper / Safety workspace: the fifth menu tab appears only for the active QoL host and Helpers that host assigned by exact SteamID64. A listed Helper on an older/incompatible host sees a clear waiting state, while the roster, exact IDs, incidents, and actions stay locked until the host publishes the compatible v3-memberdata capability. It refreshes automatically; ordinary players keep the normal four tabs.
  • Resolvable Clone Shield incidents: open victim/suspect highlights can be reviewed, copied, resolved for compatible QoL peers, or dismissed locally. Resolutions travel through a hidden host-validated relay and do not add another public chat line.
  • Friend-aware minimap: Steam friends are colored green locally using a bounded relationship cache; ID-card dot clicking remains independent. BlueSage stands down when Aquarium51's standalone MinimapFriends is installed.
  • Reconnect trigger safety: ordinary/manual lobby joins are never treated as reconnect failures and can never start cleanup. Reconnect mutation begins only after the game's native ConnectionLost callback. A restored authoritative playable session is preserved even if Vivox is late.
  • Faster real recovery: after a genuine disconnect, BlueSage allows at most 10 seconds for native menu/Steam/PurrNet cleanup before starting the saved-lobby join. Vanilla's stale IsConnecting flag is diagnostic only; BlueSage owns its actual join-in-flight state.
  • Community diagnostics: BlueDevDebug remains locked on for 0.2.0 so player logs retain consistent troubleshooting breadcrumbs. /bluedevdebug off explains the release lock instead of pretending to disable it; credentials and authentication tokens are never intentionally logged.
  • Local incident evidence: each session starts a bounded local chat/notification JSONL transcript plus a running mirror of BepInEx/LogOutput.log. Raw rich-text names/messages stay beside readable plain text. Exact roster SteamID64/persona enrichment is added only for the verified host or an assigned Helper; nothing is uploaded automatically and /auditlog off is the explicit opt-out.

What It Adds

Expanded Avatar Presets

  • Open the game's normal Avatar customization screen and use the existing preset dropdown to access slots 1-9.
  • Slots 1-3 retain the game's original behavior, existing saved designs, and default templates when unused.
  • Slots 4-9 are additive QoL presets. Their names and complete appearance/outfit selections are saved separately in com.bluesage.ontogether.qol-avatar-styles.cfg.
  • Avatar Presets 4-9 is on by default. Turning it off saves the active QoL preset, restores vanilla selection/UI immediately, and retains slots 4-9 for later re-enabling.
  • Removing or disabling BlueSage returns the UI to vanilla slots 1-3; it does not delete or rewrite those native presets.
  • Choosing an added preset still uses On-Together's normal avatar application and replication path so other players do not need the mod to see the selected design.

Chat, Names, And Rooms

  • Chat send cap is raised from vanilla 250 to 3000 characters.
  • Name, ID-card, and room-name fields default to 3000 characters. ID-card details include the bottom About Me/FavoriteQuote section.
  • Power users can raise those up to 4000 in /qolmenu, but very long text can still wrap or look odd in some game UI.

Chat Readability And Layout

  • Text outlines and shadows make local chat easier to read on bright or busy backgrounds.
  • Outline intensity defaults to 75 and can be tuned from 25 to 100.
  • Whole chat UI scale defaults to vanilla 100, can be tuned from 75 to 200, and scales the chat panel, input box, backdrop, text, and outlines together.
  • Chat font size defaults to vanilla 100, can be tuned from 75 to 200, and enlarges local chat message text without scaling the whole chat shell.
  • Chat window height defaults to vanilla 100, can be tuned from 100 to 200, and adds vertical room for chat without changing text size.
  • Global and Local retained chat default to 150 rows and can be tuned from 25 to 250 with /chatrows, its aliases, or Customize. BlueSage never lowers a higher vanilla or other-mod result.
  • Native Global/Local tabs remain the game's own tabs for now; BlueSage improves retained rows, readability, font sizing, whole-panel scale, and vertical space around them.
  • The Customize tab includes Reset Chat UI to Vanilla, and /chatvanilla does the same reset for whole chat UI scale, chat font size, and chat window height.
  • Normal outline color and black-text outline color can be customized separately.

Ping Mentions

  • Type @partialname to show a small suggestion popup.

  • Pinged messages get a visible [PING] marker.

  • @lobby mass alerts are accepted only from the authoritative current lobby host or a helper the host delegated by Steam identity. Unauthorized @lobby text remains ordinary chat with no mass sound/highlight.

  • Sender authority comes from the current chat RPC's exact PurrNet player identity, then a unique live Steam/PurrNet/lobby row. A real host in row zero is valid; an unresolved or duplicated row never inherits host authority. Ordinary chat skips this fresh roster check entirely.

  • Hosts can use the Helper / Safety tab or /helper add <current player name or Steam ID>, /helper remove <player>, /helper list, and /helper reset. The familiar /lobbyhelper and /modhelper names remain aliases. Only stable Steam IDs are persisted; styled display names are never authorization data.

  • Delegates are scoped to the Steam ID of the host who granted them, so authorization cannot carry into an unrelated host's lobby.

  • Sound is on by default and uses ticket by default. Sound modes: click, change, error, task, ticket.

  • Mention suggestions and highlights resolve the player's current display name, including status and Spoons tags, then highlight that full mention once so suffixes do not duplicate inside pinged messages.

Helpful commands:

  • /setpingcolor FF66CC
  • /pingsound ticket
  • /pingsound off

Style Helper

/styleui opens a friendly window for:

  • name styling, status tags like (Reading), and reusable name templates;
  • color buttons so players do not need to hunt hex codes;
  • Detect Current, Apply Name Styler, Copy Name Style Text, and local-only Clear Draft;
  • templates that apply immediately when loaded, with Undo available if you picked the wrong slot;
  • Undo to back out of the last apply, clear, template save/load, or local style edit;
  • Spoons controls to save 0-5, show the compact [1/5sp] tag, hide it, or undo the last Spoons edit;
  • /setmood energy changes the compact label, /setmood reset restores sp, and /spoons reset restores the shipped hidden [5/5sp] default;
  • Status Styler keeps live status changes separate from local draft clearing. Clear Status removes the live status; Clear Draft only clears the editor box.
  • themes that also apply to the QoL Menu and autocomplete popup.

It uses the game's normal player-data update path and stores BlueSage options in its own BepInEx configuration instead of directly editing game save files.

QoL Menu

Open it with Home, /qolmenu, or /qm.

On first open, the QoL Menu and Style Helper use a centered 1320 x 720 fit when available, or the safe screen bounds with a 10-pixel edge margin on smaller displays. This layout was tested at 1453×759 and 1080p, while smaller displays keep every row reachable through scrolling. Drag the bottom-right handle when you want different geometry; close/reopen preserves that intentional size and position while it remains on-screen, and clamps only after a resolution or display change would hide controls.

Tabs:

  • Main: Purge Unused Assets, Run QoL Status, Style UI, and built-in how-to examples.
  • Toggles: simple on/off controls for the major features.
  • Customize: ping colors/sound, sweep interval, chat outline/scale/font/height, retained rows, outline colors, and text limits. Editable rows have Save and Undo. Use Style Helper for identity edits.
  • Credits / Other: self-only movement tools, optional Host Health, experimental Player Render Saver tuning, themes with Cycle Theme plus Reset to BlueSage Harbor, credits, and the fake-danger DO NOT PRESS optional lobby joke that sends only once. Older unreliable joke behavior was retired in 0.0.8.
  • Helper / Safety (host and assigned Helpers only): a paged verified player roster, exact SteamID/profile actions, open/closed Clone Shield incidents, and preview-first moderation controls. Helper-list management remains host-only.

The default BlueSage Harbor theme balances On-Together's warm cream/coral look with Midnight Dock's high-contrast header and footer. Existing saved theme choices remain yours, and the theme buttons apply to the QoL Menu, Style Helper, and command popups together. Harbor and Midnight Dock own the neutral, selected, enabled, Off, and experimental button states instead of borrowing uncertain game-skin colors; their fields, focus borders, popups, footers, and automatic light/dark swatch labels follow the same readability contract.

The remaining gag changes no avatar, profile, or gameplay values. It remembers locally that it was discovered; after one tiny lobby joke, later presses show only local messages. Players can screenshot/share finds in Blue's Discord for fun.

Feature Notes

Enhanced Player Panel

  • Adds local @ and ID helper buttons to player rows.
  • Buttons stay left of the native/Pomodoro/PomoSync action area so report, ignore, kick, and ban controls stay reachable.
  • ID-card lookup handles larger lobbies better than the old vanilla 16-player assumptions.
  • If another EnhancedPlayerPanel-style mod is already loaded, BlueSage skips safely.
  • BlueSage refreshes its own recycled-row button listeners, keeps report/ban controls clickable, and avoids covering Pomodoro/PomoSync row space.

MiniMap ID Click

  • MiniMap dot-to-ID help is on by default.
  • Click a minimap player dot to open an ID card when the dot can be safely matched.
  • Floating minimap name labels are removed. Community testing showed they could cause FPS/CPU lag in large lobbies.
  • Toggle dot-to-ID clicks with /minimaplabels or /mml.

Click-To-Copy Chat

  • Click a chat message to copy only the message text.
  • It does not copy the sender name, timestamp, or styled status.
  • Safe http, https, and www. links are shown in hyperlink color.
  • Hold Shift while clicking a link once to copy it and show a caution note. Shift-click the same link again within a few seconds to open it.
  • Plain click always stays copy-only so players can verify a link before opening it.
  • Toggle with /copychat or /ccopy.
  • Toggle link-opening with /chatlinks or /clinks.
  • If the old CopyChat mod is loaded, BlueSage backs off to avoid duplicate click handlers.

Chat Readability

  • Adds local outline and shadow to chat text so messages stay readable on bright backgrounds.
  • Toggle with /chatreadability or /chatread.
  • Adjust outline strength with /chatoutline 25-100 or Customize -> Chat outline intensity. Default 75 keeps chat readable without jumping straight to the thickest outline; 100 is the crispest outline.
  • Scale the whole local chat UI with /chatscale 75-200, /chatresize 1.25, or Customize -> Whole chat UI scale. This scales the vanilla chat surface, input, backdrop, text, and outlines together for accessibility on small displays.
  • Enlarge only chat message text with /chatfont on/off/toggle, /chatfont 75-200, /chatfont reset, or Customize -> Chat font size. Use this when you want bigger letters without growing the panel/input/backdrop.
  • Expand the chat window vertically with /chatheight on/off/toggle, /chatheight 100-200, /chatstretch 1.6, or Customize -> Chat window height. This adds taller visible chat space without scaling text.
  • Retained rows default/reset to 150, clamp to 25-250, and are controlled by /chatrows, /chathistory, /chatr, or Customize. Higher values cost more UI memory/work in busy rooms; higher vanilla/other-mod limits remain untouched.
  • Native Global/Local tab buttons and the minimize arrow stay controlled by the game UI. BlueSage does not claim a replacement tab/button layer in this release.
  • Use /chatvanilla, /chatreset, or Customize -> Reset Chat UI to Vanilla if scaling, font size, or window height leaves chat in a weird place. It restores saved vanilla transforms and sets whole UI scale/font/window values back to 100.
  • BlueSage nudges scaled chat panels back on-screen when possible. If your saved vanilla chat position still feels off after scaling, use the ::: drag handle on the chat box to realign it.
  • Tune outline colors with /chatoutlinecolor #000000 for the normal outline path and /blackoutlinecolor #C0C0C0 for true-black chat/name rows. The same fields are in Customize as Normal outline color and Black text outline color.
  • Chat Readability uses the game's text material plus a soft local shadow/outline assist. BlueSage does not rewrite message text or change what other players see.
  • BlackNamesOutline is on by default so true-black styled names/messages get the light black-text outline color instead of disappearing into black-on-black. Turn it off if you want every row to use the normal outline color.
  • This does not rewrite chat messages and does not change what other players see.

Clone Shield

  • Clone Shield is an independent public advisory for confusing identity clones. The potential victim's own QoL client publishes the alert; the host does not need QoL or the same version.
  • It watches for another player newly joining/changing to match the local QoL user's stable identity. Matches cover the complete avatar/outfit fingerprint or a name with the exact letters and rich-text formatting, including colors and format tags.
  • The public message identifies the likely victim and likely copier with plain display names plus the final six Steam ID digits, then asks players to confirm the full IDs in the player list.
  • Victim-side publication prevents every observer from repeating the warning. The first scan establishes a baseline, unchanged duplicates do not repeat, each victim/culprit/match pair has a five-minute cooldown, and changing both players simultaneously cannot reverse the attribution.
  • It never auto-bans. Wording remains “potentially cloned” because matching network state cannot prove which mod or action caused it. A local incident ID is evidence for a host or explicitly assigned moderation helper to review; it is never authorization by itself.
  • Toggle with /cloneshield, /cloneguard, or the Toggles tab.

Helper / Safety, Steam IDs, And Helpers

Why this exists: styled names can be copied, but a current SteamID64 + live player row + PlayerID cannot be accepted by BlueSage unless those sources agree. Names and Clone Shield alerts help you find a case; they never choose a moderation target.

Fast safe workflow: open HOME -> Helper / Safety, read the active-roster status, select one row, open its Steam profile, then use Copy Identity Evidence if a report is needed. Preview and Confirm are always separate. Click an active player or native-ban row again—or use its explicit Clear Selection button—to disarm it. Paging, filtering, loss of access, and lobby changes also clear transient targets; BlueSage never silently moves or auto-selects a moderation target.

  • The Helper / Safety tab is visible only to the active QoL host and exact-SteamID Helpers assigned by that host. A listed Helper gets a safe waiting explanation if the host has not published a fresh compatible v3 member-data capability; no protected data appears until authorization is fresh. The host republishes every five seconds and the menu rechecks automatically—Refresh Access Now is optional, not a hidden required step. Once ready, it pages verified active rows without filling vanilla chat and keeps an exact selected SteamID attached to Copy ID, Open Profile, and preview controls. Only the host sees Helper-list management.
  • /sidlist is a compact host/Helper fallback: it summarizes open Clone Shield evidence and points to Lobby Safety instead of dumping a long roster into chat. C001 always resolves to the suspect; the victim Steam ID is protected from the quick-ban path. Ordinary players do not receive this command or its suggestions.
  • /sidincident (/cloneincident) gives the same incident lifecycle actions as the menu: <C001> resolve, <C001> dismiss, clear-player <verified query>, dismiss-all, clear-history, and clear-all. Dismiss/clear actions affect only this client's advisory view; they never ban, change Helpers, or publish lobby state. Open cases also archive after two consecutive aligned scans no longer find the matching name/avatar pair or either participant.
  • Hover the native green Steam/profile button for a row check. LIVE means that row is a current Steam-lobby member; this does not mean the player has QoL installed. Authorized host/Helpers receive the expanded VERIFIED SID/persona/row/PlayerID view. LIVE / STEAM CHECK means the native game row is still live while Steam lobby enumeration is revalidating; the profile remains available but moderation stays locked. LEFT / STALE requires no attached live native player, while CHECKING covers duplicate or incomplete identity sources. Every non-verified state is non-actionable.
  • Player-list identity display is event-invalidated and shared for one second across tooltips, the Helper workspace, Clone Shield, and highlights. This prevents repeated Steam/PurrNet reconstruction during Unity redraws. Preview/confirm moderation does not trust that display cache: it performs a fresh exact quorum check at action time.
  • For hosts and assigned Helpers, /sidwho list remains a compact chat fallback and points to Lobby Safety for the active roster. /sidwho <C001 | partial display name | regex | partial Steam persona | 4+ SteamID digits | _host | _self> returns every verified current match. /sidwho copy <same query> copies the same local identity-evidence record as the menu: displayed name, raw TMP source, cached Steam persona, exact SteamID64, verified row, PlayerID, and current role. Lookup is read-only; helper assignment requires one unique result and names never become ban authority.
  • /sidban C001 is preview-only. Recheck the player list/profile, then use /sidban C001 confirm within 30 seconds. Full SteamID64 or a unique suffix of at least six digits also works.
  • The active Steam/PurrNet lobby host is the only machine that writes native ban data and sends the exact targeted game BanRPC. A helper command is a request to that host, not a local ban. Lobby Safety provides separate exact-target Preview and Confirm buttons for live/incident bans and saved native-record unbans, matching the slash-command two-step flow.
  • Hosts explicitly manage one owner-scoped Helper list in Lobby Safety or with /helper add/remove/list/reset. Helpers may use @lobby and request host-validated moderation actions; /lobbyhelper and /modhelper remain compatibility aliases for the same list.
  • Compatible v3 Helper requests use non-chat Steam member data. The host binds the request to the exact current Steam member, rechecks its verified live row and Helper authority, rejects replay/expiry/ambiguity, and never trusts a styled name or public alert text. Legacy chat-shaped moderation packets are consumed and rejected without executing or reaching public chat.
  • /sidunban and /unbansid reverse an exact native Steam ID ban after preview/confirm. Helpers must provide the full SteamID64; the host may use a unique suffix.
  • The host-only Native banned players section reads the game's paired saved nickname + SteamID64 records directly, pages long lists, copies the exact ID, and creates a separate preview-first unban. This preserves identity evidence even when the original player has already left or the live chat/console line was missed.
  • The active verified roster is shown before incident cards. A visible status such as 57 active verified / 63 player-list rows; 6 left/stale rows excluded explains crowded-lobby drift instead of blaming players or hiding it; QoL installation is never part of the check. Only the newest four incident cards expand at once, Clear This Player's Incident Flags Locally handles one selected row, and Dismiss All Open Locally clears Bloo-style advisory clutter without changing moderation. Closed history remains reviewable until explicitly cleared.
  • Resolve clears an open incident and its victim/suspect highlights for compatible QoL peers through hidden, host-validated lobby state; Dismiss Local clears only your own advisory state. Neither action bans anyone. Incident open/resolve/dismiss/stale transitions are written to the structured audit with exact pairs only for the verified host/Helper; ordinary-client logs retain partial-ID evidence.
  • Community reports remain review evidence: 0.2.0 does not download, bundle, flag, or auto-enforce Andrew's/community trolls.json. A global-match badge must not be claimed until Blue approves a separately reviewable feed/snapshot design.
  • If the host does not run compatible BlueSage QoL, the access-scoped Lobby Safety workspace, helper authorization, and SID enforcement stay unavailable. The cautious public Clone Shield advisory and partial-ID evidence can still be shared with the host, who can verify the native player list and Steam profiles before using the game's normal moderation controls.

Local Chat And BepInEx Audit

  • EnableLocalAuditExports defaults On and creates BepInEx/BlueSageAudit/session-* without changing the original BepInEx log. Snapshot Now and /auditlog snapshot atomically copy the true live BepInEx/LogOutput.log into a new timestamped session-*/snapshots/snapshot-*/LogOutput.log folder, keep the latest eight snapshots, and copy that exact folder path. Copy Audit Folder, /auditlog status, and /auditlog path provide the broader running-audit location. /auditlog off stops new writes without deleting prior files.
  • Chat/notification JSONL stores timestamps, rendered raw TMP names/messages, and plain-text forms. These are the arguments that reached the rendered UI after earlier game/mod patches, not a pristine network payload. While this client is the verified host or an assigned Helper, the record may also include the exact current roster SteamID64 and cached Steam persona. Ordinary clients receive no extra SID enrichment from the structured transcript.
  • BepInEx diagnostics record the candidate build identity, Lobby Safety access state, and count-only identity summary (verified/native/steam/excluded/complete) without exposing protected IDs to ordinary clients. Handled slash-command names are recorded for troubleshooting but the complete argument string remains redacted. Styled names, private statuses, player queries, and exact moderation IDs are never copied from a typed command into that diagnostic line.
  • The BepInEx mirror is intentionally faithful: it contains whatever the game and every installed mod already writes to LogOutput.log, which may itself include player identifiers. Review files before sharing them.
  • Chat parts rotate at 16 MiB with at most four retained parts; BepInEx mirrors rotate at 64 MiB with at most two retained parts. Part numbers increase and the oldest file is removed, so remaining files sort chronologically. Cleanup retains at most 12 session folders or 14 days. There is no automatic upload, remote feed, or bundled community banlist.

Player Render Saver

EXPERIMENTAL — default off. This feature is still being validated across different lobby sizes and avatar hierarchies. /playersaver status must report actual suppressed renderers before treating it as an active optimization.

  • Off by default and opt-in from the Toggles tab.
  • Local-only optimization for very large lobbies: hides far/overflow remote player renderers on your PC only.
  • Chat, player-list rows, IDs, reports, ignores, kicks, bans, and other players' views stay untouched.
  • Defaults keep remote players within 45m visible and also keep the closest 32 remote players visible.
  • Tune with Customize -> Render saver radius / max visible, or use /playersaver radius 45, /playersaver max 32, /playersaver status, and /playersaver off.
  • Turning it off restores all hidden renderers without needing a game restart.

Chalkboard Persistence

  • On by default and no longer marked experimental. Turn it off from Toggles if you do not want local board saves.

  • If Andrew's Chalky is installed, BlueSage detects it and automatically stands down instead of competing for the same persistence surface.

  • Interact with a board, then use /chalksave cozy-board; an optional zero-based board index may follow the name.

  • The lobby host can use /chalkload cozy-board to restore and synchronize it. Clients cannot overwrite the shared board.

  • /chalklist shows locally saved names.

  • Names are restricted to safe letters, numbers, underscores, and hyphens. Saves use validated dimensions/color values, atomic replacement, and a backup of the prior version.

  • Shared restores have a cooldown to avoid repeated full-board network bursts. Normal drawing and the game's late-join board synchronization remain native.

BetterMove

  • On by default.
  • Hold Shift to run.
  • Hold Ctrl to slow-walk.
  • Local-player only; it does not add custom network packets or require other players to install anything.
  • Toggle with /bettermove or /bm.

Reusable Consumables

  • On by default for canteen items and every chalk color.
  • The first acquisition remains a normal game purchase. After an item is owned, using it does not lower its saved inventory count, so it does not need to be repeatedly repurchased.
  • Clothing and all fishing inventory—bait, rods, and bobbers—remain entirely game-owned and unchanged.
  • BlueSage does not patch ticket removal or shop purchase logic. Turning the feature Off restores the game's normal decrement on the very next use; no save migration or repair is needed.
  • Toggle with /unlimitedconsumables, /consumables, or /infiniteconsumables.

Reconnect Guard

  • On for players by default.
  • Starts only after the game's native disconnect callback, allows up to 10 seconds for native cleanup to reach a clean lobby menu, then makes one saved-lobby join attempt.
  • Uses the game's canonical saved-lobby join flow rather than calling transport start directly.
  • Allows up to 45 seconds after that join for a stable, authoritative playable session to finish rebuilding.
  • Success requires authoritative Steam lobby membership, connected PurrNet transport, restored local-player/chat runtime, and matching Vivox lobby readiness when voice is enabled. Transport/UI without Steam membership is rejected as a ghost-member state.
  • If the original lobby disappears because the same host rehosts, bounded discovery can follow exactly one compatible public/direct-join replacement owned by the captured host; ambiguous or unsafe matches are rejected before menu fallback.
  • If AndrewLin Reconnect is loaded, BlueSage suppresses its competing transport-only retry while managed recovery is active.
  • Hosts can turn it off with /rg off.

Asset Sweep

Automatic Sweep uses a real-time Unity coroutine and temporarily keeps Unity background execution active while that loop is enabled, so the interval continues when On-Together is unfocused. The prior runtime setting is restored when automatic Sweep stops, and the Unity asset operation always runs on the main thread.

  • Runtime BlueSage menu/theme textures are protected from Unity's unused-asset unload. Manual and automatic sweeps must leave the QoL Menu, Style Helper, and command/mention popups visually unchanged without cycling themes.

  • Runs every 15 minutes. Legacy default intervals of 30 or 60 migrate once to 15. Other saved values remain yours.

  • Helps long sessions reclaim unused Unity assets.

  • If AndrewLin Sweep is loaded, BlueSage auto sweep backs off automatically.

  • Interval safe range: 15-180 min.

  • Manual /as now still respects safety guards.

Leave Notices And Focus Anywhere

  • Leave notices are on by default.
  • Focus Anywhere is on by default.
  • Timestamps are on by default in 0.2.0 Early Access and can be turned off in /qolmenu.

Common Commands

  • /qol status or /bsqol status: show current BlueSage states.
  • Home, /qolmenu, or /qm: open the QoL menu.
  • Insert, /styleui, or /sui: open the Style Helper.
  • /style or /sty: build styled text from chat commands.
  • /setname, /status, /clearstatus, /statuscolor: set your display name/status without editing save files directly. /setname reset restores your current Steam persona name and /statuscolor reset restores #FFD45D without discarding the other style/status pieces.
  • Style Helper preserves exact balanced rich-text markup in Custom Rich Text mode. BlueSage validates tag structure and preserves the raw draft; the game remains authoritative for whether uncommon TMP tags/values render. Detect Current separates the live styled base from BlueSage status/Spoons suffixes, and older suffix-contaminated or repairable saved styles migrate once with a local rollback copy instead of silently duplicating or clearing identity pieces.
  • /brb or /afk: quick status shortcuts. /back restores the status you had before BRB/AFK, or clears it if there was nothing to restore.
  • /spoons on/off/status or /spoons 0-5: show, hide, or set the optional compact display-name tag, like [1/5sp]. Use /spoons off if your name feels too long.
  • /assetsweep or /as on/off/status/now: asset sweep controls.
  • /hosthealth or /hh on/off/status/run: host-health controls. Hosts can use /hh run for a quiet lobby-health check.
  • /leavenotices or /ln on/off/status: leave notice toggle.
  • /timestamps or /tt on/off/12/24/reset/status: chat and notice timestamps; 12-hour mode shows AM/PM and 24-hour mode does not.
  • /chatreadability or /chatread on/off/status: local chat text outline/shadow.
  • /chatoutline or /outline 25-100/status: adjust local chat outline strength.
  • /chatscale or /chatresize 75-200/reset/status: scale the local chat UI for readability.
  • /chatfont or /chatfontsize 75-200/reset/status: enlarge chat message text without scaling the whole chat UI. It also accepts on, off, and toggle.
  • /chatheight or /chatstretch 100-200/reset/status: expand the chat window vertically without scaling text. It also accepts on, off, and toggle.
  • /chatrows, /chathistory, or /chatr 25-250/reset/status: retained Global/Local scrollback; reset restores 150.
  • /chatbackdrop or /chatbg on/off/status: persistent local chat backdrop toggle.
  • /chatvanilla, /chatreset, or /chatdefault: restore whole chat UI scale, chat font size, and chat window height to vanilla 100.
  • /chatoutlinecolor or /outlinecolor #000000/status: normal chat outline color.
  • /blackoutlinecolor or /blackoutline #C0C0C0/status: true-black chat/name outline color.
  • /bettermove or /bm on/off/status: Shift run and Ctrl slow-walk.
  • /unlimitedconsumables, /consumables, or /infiniteconsumables on/off/status: keep owned canteen items and chalk reusable; fishing supplies and clothing remain vanilla.
  • /reconnectguard or /rg on/off/status: reconnect guard toggle.
  • /reconnectmessage or /rm on/off/status: reconnect success message toggle.
  • /focusanywhere or /fa on/off/status: focus-anywhere toggle.
  • /minimaplabels or /mml on/off/status: minimap dot-to-ID-card helper. No floating labels.
  • /playersaver, /rendercull, or /playercull on/off/status: opt-in local remote-player render saver for large lobbies. Use radius 45, max 32, or reset to tune it.
  • Host/Helper /sidlist: compact open-incident summary; use Lobby Safety for the full roster, exact IDs, and actions.
  • Host/Helper /sidincident status, /sidincident C001 resolve|dismiss, /sidincident dismiss-all, /sidincident clear-history, or /sidincident clear-all: menu-parity incident lifecycle and local clutter cleanup; /cloneincident is an alias.
  • Host/Helper /sidwho list or /sidwho <player evidence>: compact/read-only verified identity fallback; the complete paged roster lives in Lobby Safety.
  • Host/Helper /sidban C001 [confirm]: preview, then request a host-native ban of the incident suspect.
  • /sidunban <SteamID64> [confirm] or /unbansid: preview, then request removal from the host's native ban list.
  • /helper add/remove/list/reset: host-only, owner-scoped Helper list for @lobby and host-validated moderation; /lobbyhelper and /modhelper are aliases.
  • /copychat or /ccopy on/off/status: click-to-copy chat messages.
  • /chatlinks or /clinks on/off/status: safe click-to-open chat links.
  • /auditlog status/on/off/path/snapshot: control or locate the bounded local chat and BepInEx evidence export. Existing files are not deleted when capture is turned off.

Using a toggle command without on or off flips the current setting. Timestamps apply to chat plus join/leave/system notices when enabled.

Settings

After launching once, settings live here:

BepInEx/config/com.bluesage.ontogether.qoltweaks.beta.cfg

Most players should use Home or /qolmenu instead of editing the file directly.

Useful defaults:

  • EnableAutoSweep: true
  • SweepIntervalMinutes: 15. Legacy default intervals of 30 or 60 migrate once to 15; other saved values remain yours.
  • EnableHostHealthMonitor: true
  • EnableLeaveNotifications: true
  • EnableWelcomeMessage: true
  • EnableChatTimestamps: true
  • EnableNotificationTimestamps: true
  • Use24HourTime: false (12-hour AM/PM)
  • EnableChatReadability: true
  • ChatOutlineIntensity: 75
  • ChatUiScalePercent: 100
  • ChatFontSizePercent: 100
  • ChatWindowHeightPercent: 100
  • ChatHistoryRows: 150
  • ChatOutlineColor: 000000
  • BlackChatOutlineColor: C0C0C0
  • BlackNamesOutline: true
  • EnableBetterMove: true
  • EnableUnlimitedConsumables: true (owned canteen items and chalk stay reusable; initial purchases, clothing, bait, rods, and bobbers stay vanilla)
  • EnableReconnectGuard: true
  • EnableReconnectAnnouncement: true
  • EnableFocusAnywhere: true
  • EnableEnhancedPlayerPanel: true
  • EnableCloneShield: true
  • EnablePlayerRenderSaver: false
  • PlayerRenderSaverRadiusMeters: 45
  • PlayerRenderSaverMaxVisiblePlayers: 32
  • EnablePingMentions: true
  • EnablePingSound: true
  • PingHighlightColor: 9B59B6
  • PingMentionColor: FFD700
  • PingSoundMode: ticket
  • EnableSpoons: false
  • On update to this release, only the old timestamp-less default-on Spoons state is reset to hidden once. A real saved Spoons opt-in is preserved. Use /spoons on, /spoons 0-5, or Style Helper > Show Tag if you want the compact tag back.
  • EnableStyleUi: true
  • EnableExtendedAvatarStyles: true
  • EnableChalkboardPersistence: true (only the host restores for the lobby; auto-stands-down with Chalky)
  • EnableMiniMapPlayerLabels: true (legacy config name; now controls MiniMap ID Click only)
  • EnableMiniMapFriendColors: true (cached Steam-friend dot coloring; backs off for MinimapFriends)
  • EnableChatCopy: true
  • EnableChatUrlLinks: true
  • EnableHiddenDiagnostics: true (locked on for 0.2.0; old false configs are normalized on)
  • EnableLocalAuditExports: true (bounded local chat/notification JSONL plus running BepInEx log mirror; never uploaded automatically)
  • UiThemePreset: BlueSage Harbor
  • MaxChatCharacters: 3000
  • MaxProfileCharacters: 3000
  • MaxSessionNameCharacters: 3000

Old beta config files may still contain removed settings. BlueSage ignores old removed settings now. If something acts odd after updating, delete the config and launch once to regenerate it.

Compatibility

  • BlueSage only checks mods BepInEx actually loaded.
  • Disabled .old, .bak, .disabled, or .dll.disabled files are ignored.
  • BlueSage does not delete, rename, edit, or disable another creator's mod files.
  • If AndrewLin Sweep is loaded, BlueSage auto sweep backs off.
  • If Simple_QOL or ChatTweaks-style mods are loaded, BlueSage avoids duplicate timestamp/leave-notice formatting.
  • If AndrewLin Reconnect is loaded too, BlueSage marks its transport-only retry intentional/suppressed while BlueSage performs canonical lobby recovery.
  • If AndrewLin Desync is loaded, it owns periodic lobby/persona repair; BlueSage pauses its automatic Host Health repairs and keeps manual Host Health read-only.
  • Hush may share the game's native ban store, but its delegates/admins never become BlueSage Helpers. BlueSage keeps exact-ID preview/confirm and current-host authorization separate.
  • Echo can intentionally copy names and outfits. Clone Shield therefore remains a cautious clue and never authorizes a ban without exact profile/roster verification.
  • Fomo/Alpha may observe visible chat or supply command utilities without taking over BlueSage authorization. Authenticated Helper moderation/resolution uses non-chat Steam member data, so no !bsmod or incident-control payload enters visible chat or Fomo sinks. If Chalky is loaded, BlueSage board persistence/sync stands down completely.
  • 0.2.0 does not download, bundle, or auto-enforce a community banlist. Community reports remain review evidence, and exact local host decisions stay preview-first and reversible.
  • If BlueSage PlayerLimitLift is loaded, Host Health can include cap/default/chat-relay state.

If Something Feels Weird

  • Run /qol status first.
  • Open /qolmenu and turn off only the feature that feels weird.
  • Use /chatvanilla or Customize -> Reset Chat UI to Vanilla if whole UI scale, message font size, or taller chat leaves the panel displaced.
  • Use /spoons off if the optional Spoons tag makes names too long.
  • Spoons is opt-in by default and older enabled Spoons configs reset to hidden once on update; Save Spoons, Show Tag, or /spoons on turns it back on.
  • Reopen the player list if buttons look stale after scrolling a huge lobby.
  • Use /mml off if minimap dot clicks feel weird on your setup.
  • Use Detect Current in /styleui to re-read your current in-game name/status before applying a new experiment. It prefers the live display name, preserves supported existing rich-text wrappers for editing, separates only recognized BlueSage status/Spoons suffixes like [Tired], [4/5sp], and (Homelab), and falls back to saved config only when live player data is unavailable. Clear Draft only clears the editor box; /clearstatus removes a live status.
  • For an incident report, run /auditlog snapshot, then /auditlog path. Review the local folder before sharing; the BepInEx mirror may contain player identifiers written by the game or another installed mod.

Credits

Made by BlueSage for the On-Together community.

Community thanks: ●Marbles● for her $20 Ko-fi support on July 6, 2026 and her message, “Thank you for all of your constant hard work in creating mods for On Together and maintaining such a positive, safe, and supportive server for everyone.”; Nell for $20 Ko-fi support, trusted Helper work in Discord and the server, and “Share with Rowan!”; bloo_bamboo for brave large-lobby QA and logs; and Rowan—our partner in crime—for continued testing and experiments. ♥

Inspired by helpful community mods and projects including:

CHANGELOG

Changelog

[0.2.2 Early Access] - 2026-07-17

  • Rebased against On-Together Steam build 24259292 / Unity 6000.0.60f1 after the July 17 native moderation and ID-card update changed game-owned chat and profile method signatures.
  • Updated every TextChannelManager.AddMessageUI patch to the current five-argument contract and preserved the new sendByPlayer value. This restores the sender's own local message row without duplicating the network send or changing remote sender/channel metadata.
  • Replaced all stale TemporaryPhoto.ButtonOpenIdCheck(NetworkTransform) calls with the current integer roster-index path. BlueSage continues to enrich exact identity evidence while the game's new mute/report/remove UI remains native and authoritative.
  • Made Harmony startup fail open per patch class. One optional target moving in a future game update now produces a clear compatibility line and disables only that patch instead of aborting plugin startup, Home/Insert menus, slash-command typeahead, Sweep, and the remaining QoL controllers.
  • Added current-binary regression contracts for the five-argument chat path, sender rendering flag, integer ID-card path, and fail-open startup boundary.
  • Preserved the 0.2.1 single-flight Sweep, 10-minute one-time migrated default, 5–180-minute user range, resource/process evidence, roster-registration guard, Vivox rate guard, local audit allocation fix, saved preferences, and public/private authority boundaries.
  • Automated build, contract, current-binary target, and package-integrity proof are required before this ZIP is handed off. Clean-profile multiplayer runtime UAT remains the explicit final gate after the power-loss restart.

[0.2.1 Early Access] - 2026-07-17

  • Added verified-host-only maintenance for andrewlimforfun/ot-community-banlist BanData.txt. The bounded HTTPS fetch validates paired rows and appends only missing SteamID64 entries to the game's native list; every existing personal ID/nickname remains byte-for-byte untouched, malformed or failed fetches make no change, save failure rolls back only pending additions, and diagnostics expose counts rather than identities. This does not create a public player badge or weaken exact live preview/confirm authority.
  • Made roster completeness bidirectional. BlueSage no longer reports identity alignment recovered when every Steam member maps to a native row but one or more live native/PurrNet rows are absent from current Steam lobby membership; Clone Shield and identity-sensitive actions remain fail-closed until both directions agree.
  • Reworded LIVE / STEAM CHECK as a factual cross-roster disagreement instead of a temporary promise: the game/PurrNet row is live, its SteamID is absent from the current Steam lobby member enumeration, the profile may still open, and identity-sensitive actions stay locked. A bounded transition-only [BlueSageIdentityCoverage] line records counts and state without names or SteamIDs.
  • Preserved exact rescue boundaries during that disagreement. Public QoL still accepts authenticated v2 Steam addressing and the already-supported v3 unique native-PlayerID addressing, but each receiver validates its own exact local identity, sender authority, freshness, lobby, and nonce before moving only its local owner.
  • Made Asset Sweep single-flight and completion-aware. BlueSage now waits for Unity's asynchronous unload operation before optional GC, completion notification, and the next sweep; compact UTC start/completion/failure lines record sequence, trigger, elapsed time, and managed-memory delta without player or lobby identities.
  • Added automatic sweep-cadence Unity resource evidence for ordinary users: each completion records pre/post Texture2D, RenderTexture, Material, Mesh, AudioClip, and loaded-GameObject totals, the dominant reclaimed category, and up to five largest reclaimed sizes labeled only by resource category. The capture is bounded, runs only around a sweep, and requires no command or private F10 Inspector. BlueSage's added fields contain no player/chat/lobby identity; the complete BepInEx/LogOutput.log can still contain unrelated game or plugin output and should be reviewed before public posting.
  • Added low-cost process/session context to that same completion line: private/working-set deltas, handle/thread counts, native-row versus Steam-member totals, and voice-manager/off/joined/queued state. These are aggregate diagnostics only—no lobby code, SteamID, player name, chat content, or voice identity is recorded.
  • Added a privacy-respecting thank-you for the anonymous July 16 $10 Ko-fi supporter to the in-game and README community credits.
  • Kept automatic Sweep enabled at the one-time migrated 10-minute default with the existing 5–180 minute range. Later intentional choices remain untouched.
  • Added a surgical host-side registration guard around the game's current player-roster append path. Invalid rows and exact transform duplicates are rejected; a replacement for the same stable identity removes only the old parallel-list row before native registration. When an old Vivox row conflicts with the incoming Steam identity, exact SteamID64 wins so replacing the wrong row cannot leave a duplicate Steam entry. No network object, avatar, pet, or game-owned material is destroyed by this guard.
  • Added a default-on, fail-open Vivox position-rate guard that coalesces the game's per-frame 3D-position request to 4 Hz and bounds tracking state. This reduces a verified secondary native/allocation pressure path but is not presented as the root cause of voice-off growth.
  • Replaced the local audit mirror's idle one-second 512 KiB allocation with a reusable 64 KiB buffer allocated only when unread bytes exist.
  • Made shareable BepInEx diagnostics privacy-safe by default: UTC timestamp, counts, state, and roster fingerprint remain; exact lobby IDs, Steam IDs, personas, titles, tags, and player lists stay in authorized local audit evidence only.
  • Live build-24141704 evidence now separates mitigation from cause. An unmodded guest reproduced the catastrophic Blue-lobby growth, while private and comparison lobbies did not; Vivox-off host samples still grew. A paired manual Inspector capture observed Texture2D fall from 29,263 / 3.60 GB to 2,888 / 192.64 MB after Resources.UnloadUnusedAssets() with the same scene-object count. This proves a large unused Unity-texture population was awaiting reclamation, not which system created it. Reverse traversal confirms a separate roster replacement defect and per-frame Vivox positional requests as investigation lanes; neither is presented as the complete texture owner.
  • Preserved every public QoL, host/helper authority, moderation, reconnect, style, chat, movement, and PlayerLimit compatibility boundary from 0.2.0. The rebuilt DLL remains a release candidate until clean-profile multiplayer UAT confirms the new runtime guards on the live game build.

[0.2.0 Early Access] - 2026-07-15

  • Live 2026-07-15 crowded-lobby sampling confirmed that Resources.UnloadUnusedAssets() completes asynchronously and reclaimed roughly 12.5 GiB of private commit plus 5.9 GiB of dedicated VRAM in the observed host session. Automatic Sweep now defaults to 10 minutes, supports a 5–180 minute range, and forces existing profiles on at 10 minutes exactly once before respecting later intentional choices.
  • Restored the established fake-danger DO NOT PRESS button and tooltip for the harmless optional lobby joke. Its first press can still send only one playful line; repeat presses remain local and it never changes moderation or game state.
  • Kept Style Helper footer guidance owned by its active Name, Status, or Templates surface so opening Insert after another IMGUI window cannot inherit unrelated menu text; hover help remains local and the saved/draft state line is unchanged.
  • Final feedback polish keeps destroyed-row pruning on the same bounded disabled-state cleanup cadence when Chat Readability is off, applies the one-time 10-minute Sweep safety migration described above, and keeps public rescue guidance concise without changing its fail-closed transport or authority rules.
  • Added Nell to the in-game and README community thanks as a $20 Ko-fi supporter and trusted Helper, preserving only the requested quote: “Share with Rowan!”
  • Changed Asset Sweep timing to a 10-minute safety default with a 5–180 minute range; updaters receive enabled/10-minute defaults once and later intentional choices remain untouched.
  • Made mention autocomplete and player-list @ actions insert a stable whitespace-free identity token, so decorated rich-text names such as Nell resolve, highlight, and trigger the configured local ping sound.
  • Prevented duplicate same-client host visibility handling from leaving the host invisible locally after restoration.
  • Repaired host and Helper @lobby alerts against build 24141704's actual chat RPC. isLocal is channel scope, not sender identity, and the later UI row index ambiguously falls back to zero. BlueSage now captures the authoritative RPCInfo.sender before that information is discarded, accepts a real unique row-zero host, rejects missing/duplicate rows, fresh-revalidates the exact Steam identity and Helper authority, and performs no roster work for ordinary chat.
  • Made automatic Asset Sweep keep its real-time Unity timer advancing while On-Together is unfocused. BlueSage temporarily owns Application.runInBackground only while its automatic sweep loop is enabled, keeps Resources.UnloadUnusedAssets() on Unity's main thread, and restores the prior runtime setting on disable, compatibility stand-down, or unload.
  • Reduced always-ready Rescue/Hook idle polling from every lobby member to the authoritative owner plus explicitly published Helpers. A parsed request still requires exact current-lobby membership before execution; rescue movement now updates the local movement/root transforms, clears falling velocity, and force-syncs at a bounded 250 ms Hook cadence.
  • Added dual exact-target Rescue/Hook addressing without weakening public moderation: v2 uses one verified exact SteamID64, while v3 may use only one unique active native PlayerID when Steam enumeration is still syncing. The target client must match its exact local identity; duplicate, stale, malformed, wrong-target, replayed, prior-owner, and revoked-Helper requests still fail closed.
  • Replaced the source-level host/Helper player-list freeze path introduced by 0.2.0 identity decoration. Row initialization no longer launches a global highlight refresh, unflagged rows perform no identity capture, and one bounded immutable roster snapshot now feeds the player tooltip, Helper workspace, Clone Shield display, and role highlights. Join/leave invalidation refreshes on the next frame so Unity IMGUI Layout/Repaint sees one consistent model; exact moderation actions still bypass the display cache and revalidate fresh live authority. The exact rebuilt binary still requires the crowded-lobby UAT below before Thunderstore upload.
  • Replaced quadratic per-row identity uniqueness scans with one linear count/index pass per snapshot, cached reflected row fields, and added count plus last/max capture timing to the existing compact diagnostics. This removes BlueSage's N-to-the-fourth main-thread work during crowded player-list construction without weakening exact SteamID/PlayerID/transform/Steam-lobby agreement.
  • Precomputed host/self/Helper/Clone-Shield roles once per roster snapshot instead of reparsing lobby Helper metadata and allocating incident snapshots for every verified row.
  • Added a five-second amortized destroyed-row prune while Chat Readability remains active. Dead TMP rows now release BlueSage-owned outline materials plus retained font/backdrop/overlay/scale/window state instead of surviving until a settings change.
  • Extended compact BlueSageDiag checkpoints with process working/private/managed memory and GC counts, enhanced-panel button created/destroyed/live counts, and Chat Readability retained-state counts. These counters let UAT distinguish a BlueSage object-retention regression from game-owned avatar/asset churn without dumping identities.
  • Corrected the TinySav-class split-brain state: a unique native PlayerID and live transform missing only from the instantaneous Steam member enumeration is now LIVE / STEAM CHECK, profile-openable but moderation-locked. LEFT / STALE is reserved for a row with no attached live native player; duplicates and other ambiguity remain CHECKING and fail closed.
  • Made Helper/Safety player and native-ban selections explicitly reversible: click the selected row again or use Clear Selection. Paging, filtering, a missing row, and lobby/access changes clear the selection; BlueSage never silently auto-selects or retargets an unban action.
  • Unified Status Styler preview, copy, and apply through the same bracket-aware suffix policy. Existing (), [], {}, or other two-character status brackets now render identically in the preview, clipboard text, and live applied name.
  • Kept a genuinely departed retained-history tooltip at LEFT / STALE while unrelated current identity sources sync; global roster completeness no longer relabels a known departed row as CHECKING, and Steam enumeration alone can no longer invent a departure.
  • Clarified Custom Rich Text truth: BlueSage validates balanced tag structure and preserves exact markup, while the game remains authoritative for whether uncommon TMP tags or values render.
  • Hardened the matching BlueSage PlayerLimitLift 1.1.2 host stack so above-15 remote chat preserves its authoritative RPC sender when re-broadcast. Remote slash text can no longer look like a command typed locally by the host or by another host-side handler.
  • Reworked crowded-lobby identity truth after Rowan's 60–63 native-row versus 54–57 current-Steam-member evidence. Current players now verify individually while departed/history rows are labeled LEFT / STALE and excluded; CHECKING is reserved for a live source still syncing. A stale row no longer makes every valid neighbor look unverified, and the Lobby Safety banner shows verified/native/Steam/excluded counts. QoL installation is not part of verification.
  • Upgraded Helper compatibility to a fresh v3-memberdata capability. Hosts republish it every five seconds and menus re-evaluate access automatically; the manual button is now Refresh Access Now. New helpers cannot mistake an older chat-transport host for compatible, legacy chat-shaped moderation/incident packets are rejected without execution, and protected requests use non-chat Steam member data.
  • Added one-click Copy Identity Evidence plus /sidwho copy <query> parity, with exact revalidation before copy/profile actions. The record includes displayed and raw TMP names, cached Steam persona, exact SteamID64, verified row, PlayerID, and role; nothing is sent to chat.
  • Increased the QoL footer reserve to 120px and removed duplicate long-message concatenation so wrapped Helper-waiting/status text remains visible at Rowan's short viewport instead of clipping at 32px.
  • Added build identity and count-only verified/native/steam/excluded/complete plus Lobby Safety state to BlueSageDiag so logs can distinguish old 0.2.0 binaries and explain roster drift without exposing ordinary-client SIDs.
  • Updated the Thunderstore dependency pin to BepInExPack 5.4.2305, matching the current On-Together package and Blue's tested loader core.
  • Fixed the Rowan Helper discoverability failure: an assigned Helper now sees Helper / Safety while waiting for a compatible host capability, but exact IDs, incidents, and moderation actions remain locked until the host publishes a fresh compatible v3 member-data capability.
  • Restored restrained Style Helper button semantics after Rowan's review: Open Style Helper is neutral like nearby actions, while Close Style Helper becomes sage only while the helper is actually open. Coral remains selected/active, gray remains off, and orange remains experimental.
  • Finished the Harbor and Midnight Dock contrast pass: neutral, selected, enabled, Off, callout, and experimental buttons now own every normal/hover/pressed/focused state with readable text polarity. Fields and focus borders, command popups, footers, section borders, previews, and Style Helper swatches now use the same theme-owned treatment; swatch labels choose light or dark text from the displayed color.
  • Highlighted the local-only HOME, INSERT, and SLASH COMMANDS navigation keywords with the same restrained callout language in the first-lobby tips and Getting Started help.
  • Made the authenticated exact-target Rescue/Hook compatibility receiver always ready in public QoL, with no normal-user toggle to discover or accidentally disable. It accepts the verified-Steam v2 target or the unique-active-native v3 target described above; both remain fresh, nonce-guarded, owner/Helper scoped, current-lobby-bound, and fail closed.
  • Reduced the receiver's duplicate-action cooldown from ten seconds to one second so a deliberate Rescue-then-Hook workflow is usable while still suppressing same-frame repeats.
  • Removed the legacy !bsrescue / !bsvisible chat-shaped receive paths. Current rescue and visibility controls use hidden Steam member data only, so control payloads cannot become public chat through BlueSage 0.2.0.
  • Fixed compatible host invisibility fallback to bind to the live remote avatar transform, rescan newly spawned/re-enabled renderers on every fresh heartbeat, and restore captured renderer states on show, expiry, owner change, or despawn.
  • Added /selfmove (/bluemove, /qolmove) parity for the supported Save Pos, Teleport Saved, Noclip/Fly, speed, jump, gravity, status, and reset menu actions. Saved and rescue teleports request the local owner's normal network transform sync after applying.

Reconnect Recovery

  • Rebuilt Reconnect Guard around the game's native MainSceneManager.ConnectionLost signal. Every ordinary/manual lobby join remains observational and cannot trigger cleanup.
  • Native teardown gets up to 10 seconds to reach a clean lobby menu before one canonical JoinByCode(..., false) saved-lobby attempt; direct transport restart is not used.
  • Generation ownership prevents duplicate callbacks from creating overlapping reconnect loops. Post-join validation gets up to 45 seconds and requires authoritative Steam membership, connected PurrNet, restored local player/controller/UI, and two seconds of stable quorum; Vivox is required only when lobby voice is enabled.
  • Failed saved-lobby validation returns through native cleanup without retrying the same lobby. Same-host replacement discovery permits one separately validated public/direct-join candidate and rejects ambiguous or incompatible matches.
  • Fixed the healthy-session false-cleanup loop and the stale vanilla IsConnecting gate. Community testing subsequently recorded repeated successful recoveries from genuine disconnects on this release path.

Identity, Styling, And Readability

Independent Clone Alerts

  • Clone Shield now lets a potential victim's own QoL client detect complete avatar/outfit matches and exact letter/color/rich-text name matches, publishing one cautious global advisory with partial IDs and a request to verify the player list/profile.
  • Added a bounded per-lobby Clone Shield incident lifecycle (C001, C002, …) with exact victim/suspect Steam IDs, open/resolved/locally dismissed states, closed history, and deliberate highlight cleanup. Incident commands always resolve the suspect while protecting the victim from the quick-ban path.
  • Tightened Clone Shield and VERIFIED identity to the same current Steam-lobby/native-Steam/PlayerID quorum. Departed native history rows are excluded per row; Clone Shield still waits unless every current Steam member has one unique live row. Two consecutive absent or no-longer-matching scans archive an incident; per-player, bulk, and history cleanup remain local and never touch bans, Helpers, or lobby state.
  • Added exact host/Helper structured audit records for clone open/resolve/dismiss/stale transitions and throttled repeated roster-wait diagnostics to once per state/minute. Ordinary clients still receive no extra exact-SID enrichment.
  • Added host-native /sidban and /sidunban//unbansid preview/confirm commands plus /sidlist. The host is the only native ban writer; compatible Helper requests use non-chat Steam member data, are revalidated against verified current membership, rate/replay limited, and targeted by exact PlayerID.
  • The host can also preview and save an exact SteamID64 to the native ban list after that player has left. Off-roster entries require the full ID, a fresh confirmation, and a verified absent roster state; they persist without pretending a kick occurred. Helpers remain limited to current verified lobby targets, and /sidunban reverses either path.
  • The native green Steam-profile tooltip keeps a compact row check for ordinary users: LIVE, LEFT / STALE, or CHECKING. For the active QoL host and compatible Helpers, Steam Profile • VERIFIED exposes the exact SteamID64, cached Steam persona, live row, PlayerID, and HOST/HELPER/VICTIM/SUSPECT details. Only the successful authorized view expands; failure text cannot overflow across adjacent rows.
  • Kept the ordinary profile check at the game's compact tooltip size while resizing/wrapping the authorized host/Helper detail view so persona, exact SID, role, and navigation no longer clip over adjacent rows. Every later native tooltip deterministically restores the original panel size, body font/wrapping, and header color. Native ban storage failures now show NOT AVAILABLE instead of falsely claiming an empty list.
  • Added an access-scoped fifth Helper / Safety tab for the active QoL host and assigned exact-SteamID Helpers. It contains a paged verified current-lobby roster, exact SteamID copy, Steam-profile opening, Clone Shield incident review/history, and preview-first moderation actions; Helper-list management stays host-only. /sidlist and /sidwho list are protected compact fallbacks instead of public roster dumps.
  • Added a host-only paged Native banned players view that keeps the game's paired saved nickname and exact SteamID64 together, supports exact-ID copy, and creates a separate preview-first unban without relying on transient chat or console output.
  • Unified @lobby and moderation delegates into one host-scoped exact-SteamID Helper list. /helper is the primary command; /lobbyhelper, /lobbymod, /modhelper, and /moderationhelper remain aliases, with matching-owner legacy entries migrated safely.
  • Incident resolution now uses a hidden helper-to-host request plus host-owned Steam lobby state so compatible QoL clients can clear victim/suspect highlights without adding another public chat line. Public Clone Shield alerts remain visible and cautious.
  • Turning Clone Shield off now clears its current-lobby incident ledger, closed history, replay state, and victim/suspect highlights immediately; peer alerts are ignored until it is enabled again.
  • Repaired the 0.1.8-era style-state edge case where Detect Current or a status/Spoons-only change could capture the full rendered identity as the saved base. Existing contaminated or deterministically repairable rich-text bases migrate once with a local rollback copy; Detect Current now reads live base/status/Spoons drift together, Custom Rich Text mode preserves exact balanced markup, and Apply verifies native serialization plus visible readback before committing or reporting success. BlueSage validates structure while the game remains authoritative for uncommon TMP tag/value rendering.
  • Name Styler now accepts the configured Name/ID capacity up to 4000 characters, retains closing TMP tags, preserves detected live markup for editing, and reports the draft's actual length.
  • Name, status, Spoons/mood, presets, and quick status commands preserve the exact styled base name. Invalid or oversized composed names are rejected before saved configuration or live player state changes.
  • Added explicit /setname reset and /statuscolor reset recovery paths without discarding the current status, Spoons, or unrelated styled-name pieces.
  • Style Helper and QoL Menu now keep their content/footer reachable at smaller resolutions, reset tab scroll positions, use truthful Save/Undo state, and expose compact 12/24-hour timestamp controls.
  • Repaired manual and automatic Asset Sweep invalidating BlueSage's runtime menu textures. Shared theme textures are now protected, cached, generation-checked, and released only when the plugin unloads, so no theme-cycle refresh is required.
  • Snapshot Now now creates an atomic timestamped copy of the true live BepInEx/LogOutput.log, copies the exact snapshot folder path, and retains the latest eight snapshots instead of only flushing the older running session mirror.
  • QoL Menu and Style Helper now use a deterministic centered 1320 x 720 safe fit on first open and the full safe viewport plus scrolling on smaller displays. Intentional user size and position persist across close/reopen while they remain on-screen; a resolution or display change clamps only the geometry that would otherwise hide controls.
  • Added the default BlueSage Harbor visual system: warm cream content cards, midnight header/footer chrome, coral active actions, sage enabled states, explicit On/Off labels, grouped feature sections, and responsive one/two/three-column layouts. Existing saved themes remain available and Reset now returns to Harbor.
  • Repaired Midnight Dock text fields and text areas with explicit normal, hover, focused, and active textures; removed stretched vanilla field backgrounds that produced glow streaks and made unfocused values difficult to see. Toggle cards now use consistent Comfort, Chat, Identity, Personalization, and Experimental accents.
  • Name and Status editors keep the complete raw rich-text draft visible instead of truncating closing tags mid-edit. Apply/Copy still enforce the configured limit and reject crossed or incomplete TMP tags without mutating the live name.
  • Corrected the one-time Spoons migration so a timestamped player opt-in is preserved; only the old timestamp-less default-on state is hidden.
  • Public helper text received a release-wide plain-language pass: first-lobby tips name the Home and Insert surfaces directly, command choices wrap instead of clipping, long supporter messages stack safely, and moderation guidance consistently asks players to verify Steam profiles before acting.
  • First-lobby guidance now reports the game's actual saved Push to Talk/Voice Activation choice locally, warns when Voice Activation may leave the mic live, and reminds players that the game's Pomodoro/focus timer can earn tickets and XP. Each tip retries independently until posted, while voice-state diagnostics emit only once per lobby/state transition instead of every retry.
  • Added authorized /sidincident//cloneincident typeahead for current C### incidents plus resolve, dismiss, and cleanup actions. Locked-on diagnostics now log only the handled slash-command name and explicitly redact every argument, preventing names, statuses, queries, and exact moderation IDs from leaking into BepInEx output.

Public QoL Additions

  • Added self-only Save Pos, Teleport Saved, default-off Noclip/Fly, and bounded speed/jump/gravity controls under Credits / Other. Fly always starts off and reset/unload restores normal movement.
  • Added default-on Reusable Consumables for owned canteen items and chalk. It suppresses only the known item-count decrement after acquisition; shop tickets, initial purchases, clothing, bait, rods, bobbers, and unknown future item types remain vanilla. Turning it Off restores normal consumption immediately.
  • Avatar Presets 4-9 and Chalkboard Persistence now ship default-on after community validation. Vanilla avatar slots 1-3 remain game-owned and untouched, and Chalkboard Persistence still stands down when Andrew's Chalky is loaded.
  • Player Render Saver remains the only orange, default-off experimental feature.
  • Added cached Steam-friend minimap coloring that stands down when Aquarium51 MinimapFriends is loaded, while MiniMap ID Click remains independent.
  • BlueDevDebug is locked on for consistent community troubleshooting in 0.2.0. Diagnostics intentionally exclude credentials and authentication tokens.
  • Added default-on, bounded local incident evidence: a structured chat/notification JSONL transcript preserving raw rich-text and plain text together, plus a running mirror of BepInEx/LogOutput.log. Exact roster SteamID64/persona enrichment is limited to the verified host or assigned Helpers; /auditlog provides status, opt-out, folder copy, and manual snapshot controls, and nothing uploads automatically.
  • Added authorized live-player filtering by partial displayed name, bounded regex, partial Steam persona, 4+ SteamID digits, _host, and _self. /sidwho returns every verified match read-only; helper autofill accepts only one unique live result, while ban authority remains exact-ID and preview/confirm gated.
  • Native BanData changes are captured into the local moderation evidence so host player-panel bans, report-panel bans, compatible native-ban tools, and BlueSage ban/unban actions retain a timestamped action/source/outcome beside the paired saved display name and SteamID64.
  • Helper-to-host moderation and incident resolution now use authenticated non-chat Steam member data. Fomo can continue observing ordinary visible chat without receiving !bsmod, exact-SID, or incident-control payloads; the host still revalidates authorization, live identity, nonce, freshness, and target before acting.
  • Matched menu and slash-command safety flows: normal players can see local audit status, snapshot, and folder-copy actions beside the audit toggle, while authorized Lobby Safety previews now expose exact-target Confirm controls for incident/live-player bans and native-record unbans.

Build And Compatibility

  • Aligned large-host guidance with PlayerLimitLift 1.1.3, the next uploadable companion after the already-live 1.1.2; QoL remains standalone and the companion remains host-only.
  • Added exact loaded-mod ownership for Andrew Hush, Fomo, Echo, Alpha, Chalky, and Desync. Desync pauses BlueSage's overlapping automatic Host Health repair loop, Chalky keeps the existing board-persistence stand-down, Echo is called out as an intentional clone source, and public moderation retains exact-ID authenticated host/Helper authority without importing a community banlist in 0.2.0.
  • Rebased against On-Together build 24141704 / Unity 6000.0.60f1, including the voice-era player panel and current PurrNet/Steam/Vivox surfaces.
  • Added a narrow guard for uninitialized PurrNet NetworkReflection instances while leaving valid reflected state untouched.
  • Kept always-on troubleshooting useful in crowded lobbies while suppressing repeated copies of the same player-row and reflected-surface diagnostics; routine roster snapshots now use a compact membership fingerprint instead of rewriting every Steam ID every five minutes.
  • Preserved compatibility backoffs for AndrewLin Sweep/Reconnect/Chalky, Simple_QOL/ChatTweaks-style timestamp ownership, Aquarium51 MinimapFriends, and BlueSage PlayerLimitLift.

[0.1.9 Early Access] - 2026-07-11

Hotfix - Style And Status State Repair

  • Repaired the shared /status, /brb, /afk, /back, /clearstatus, Status Styler, Status Color, Spoons, and mood recomposition path so every suffix-only action preserves the exact styled base name.
  • Added natural /setstatus, /set-status, and /clear-status aliases to the existing status commands.
  • Status transitions now capture the base using the old exact generated status/Spoons suffixes before changing configuration, preventing the previous status or default Gradient 3 palette from being folded into the name.
  • Removed generic bracket guessing: legitimate names such as Pru (^-^), Artist [OC], and Helper {QA} are no longer truncated as if their endings were BlueSage statuses.
  • Repeated preset transitions preserve the original status: /brb, then /afk, then /back returns to the status from before preset mode instead of returning to BRB.
  • Detect Current hydrates the live rich-text colors/mode while retaining exact editable markup, and paired <noparse>...</noparse> validation now follows TMP behavior.
  • Name/status changes now follow the verified native persistence order by saving PlayerData before publishing GetPlayerIdInfo() to the current roster.
  • Fixed Spoons Save/Undo to restore the previously saved label and made invalid label validation occur before count/config mutation.
  • QoL Menu and Style Helper title bars now both show the active mod version.

[0.1.8 Early Access] - 2026-07-11

Voice-Update Rebase And Community Polish

  • Added orange, default-off EXPERIMENTAL - Chalkboard Persistence: safe local /chalksave, /chalklist, and host-only /chalkload using validated atomic saves and the game's native board repaint/sync path. It automatically stands down when Andrew's Chalky is installed to prevent duplicate relays.
  • Added cached Steam-friend coloring to existing minimap dots without restoring expensive floating labels. It refreshes on the bounded minimap cadence and automatically stands down when Aquarium51's MinimapFriends is loaded.
  • Fixed Style Helper tab layout: switching Name/Status/Templates now returns the content view to the top, and the custom Spoons label is back inside Status Styler instead of occupying every tab header.
  • Fixed Detect Current resetting its editor controls to the default Gradient 3 palette. It now hydrates the live name's actual colors/style, while Status and Spoons updates preserve the current styled base name instead of recomposing from stale cached defaults.
  • Added an opt-in experimental expansion of the vanilla avatar-style selector from three visible presets to nine. Slots 1-3 remain entirely game-owned—including existing player designs and unused vanilla defaults—while slots 4-9 use a separate BlueSage save bridge and apply through the game's normal customization/network path. The orange EXPERIMENTAL menu toggle defaults off and can remove/restore added rows without deleting either preset bank.
  • Corrected host-visibility maintenance so it runs only for the local movement controller instead of once per spawned avatar per frame, and throttled active owner/roster validation to twice per second.
  • Reduced idle focused-chat overhead by caching mention-ping and command-typeahead input/caret state.
  • Suppressed identical successful player-row diagnostics for 30 seconds with a bounded cache while preserving new-row evidence.
  • Corrected Reconnect Guard diagnostics to describe canonical saved-lobby cleanup/rejoin instead of a stale direct-StartClient path.
  • Added multiple authenticated backend compatibility and lifecycle optimizations for Blue-hosted community lobbies without adding public controls or changing normal QoL behavior.
  • Rebased against On-Together build 24141704 / Unity 6000.0.60f1 and refreshed the player-panel integration for the voice-era row layout while leaving native voice, moderation, Pomodoro, and game-owned controls unobstructed.
  • Rebuilt Reconnect Guard around the game's canonical lobby join flow. It rejects transport-only ghost-member reconnects, requires authoritative Steam membership plus usable PurrNet/player runtime, validates Vivox alignment when voice is enabled, and uses bounded same-host public replacement-lobby discovery before safe menu fallback.
  • BlueSage now suppresses AndrewLin Reconnect's competing transport-only retry while managed recovery is active instead of yielding to a path known to produce lobby-count ghosts.
  • Reworked Chat Readability from overlapping periodic full-tree passes to event-driven newest-row styling plus deferred topology/config reconciliation. Unchanged TMP rows avoid repeat material/mesh dirties and destroyed UI state is pruned.
  • Chat Backdrop now follows the current chat scroll-view topology with a stretch-anchored, non-raycast-blocking fallback overlay while preserving native mouse-wheel scrolling.
  • Replaced the unconditional 250-row history override with configurable ChatHistoryRows: default/reset 100, range 25-250, /chatrows (/chathistory, /chatr), menu control, status, and typeahead. A higher vanilla or other-mod getter result is never lowered.
  • Added explicit 12-hour AM/PM and 24-hour timestamp controls plus reset/status behavior.
  • Improved Name Styler rich-text detection/preservation and bounded undo/redo/reset behavior; Status/Spoons reset paths now restore their documented defaults.
  • Added custom Spoons/mood labels through /setmood and Style Helper while keeping the public default hidden [5/5sp] state.
  • Secured @lobby mass alerts: only the authoritative lobby host or host-delegated Steam-ID helpers can trigger them. Added host-only /lobbyhelper add/remove/list/reset; unauthorized or name-spoofed @lobby remains ordinary chat.
  • Reworked Player Render Saver around distance bands, hysteresis, bounded work, restoration, and diagnostic counters. It remains an orange EXPERIMENTAL, default-off performance test until live UAT proves actual renderer suppression without hiding chat/player-list identity.
  • Added Main-tab community thanks for ●Marbles●—including her July 6 Ko-fi message—bloo_bamboo, and Rowan; refreshed Discord/support links and added an in-menu version/last-updated stamp.
  • Locked BlueDevDebug diagnostics on for public 0.1.8, including old disabled configs. /bluedevdebug off truthfully explains the release lock; diagnostics intentionally exclude credentials and authentication tokens.
  • Copy Chat now attaches its same sanitized, link-safe click handler to local AddNotification rows, making BlueSage command/system responses copyable without adding names or timestamps to the clipboard payload.
  • Kept the public package focused on the documented player-facing QoL surface.

[0.1.7 Early Access] - 2026-07-06

Hotfix

  • Fixed Chat Backdrop breaking mouse-wheel chat scrolling. The backdrop now only adjusts/restores vanilla chat image color and alpha; it no longer disables the raycast targets Unity uses to route scroll input.
  • Kept the 0.1.6 scroll-ownership cleanup: BlueSage still avoids rewriting vanilla ScrollRect movement/sensitivity while preserving chat height, font size, whole-panel scale, outlines, retained rows, and /chatvanilla.

[0.1.6 Early Access] - 2026-07-06

Hotfix

  • Fixed chat scrolling compatibility after the 0.1.3 chat layout work. BlueSage no longer rewrites vanilla ScrollRect movement, scroll sensitivity, scrollbar visibility, or viewport mask settings during chat refresh.
  • Chat height, chat font size, whole-panel chat scale, outlines, backdrop, and retained rows still work, but native chat scrolling and scroll-speed mods keep ownership of actual scroll input.
  • Kept /chatvanilla and the Customize reset button as the safe reset path for chat scale/font/height back to vanilla values.

[0.1.5 Early Access] - 2026-07-06

Emergency Hotfix

  • Fixed a 0.1.4 reconnect loop where players who had already entered a healthy lobby could be misread as stuck and forced back through join again.
  • Reconnect Guard now treats visible lobby entry as success and stops interfering while the game finishes settling local player/chat runtime objects.
  • Native join-by-code watchdog is now observational: it records debug breadcrumbs but does not force a saved-lobby retry or menu fallback after lobby entry succeeds.
  • /bluedevdebug breadcrumbs are on by default so community logs include clearer reconnect and UI diagnostics. Use /bluedevdebug off for quieter logs.

[0.1.4 Early Access] - 2026-07-06

Hotfix

  • Reconnect Guard now requires the local player/chat runtime to finish loading before it declares reconnect success, instead of trusting transport/lobby signals alone.
  • Added a guarded join-by-code loading watchdog: if a lobby join enters a stuck loading state, BlueSage retries that saved lobby once and then returns toward the menu instead of leaving the player trapped until relaunch.
  • Reconnect fallback now clears the unhealthy multiplayer session before calling the game's normal menu return path, without re-triggering another guarded reconnect loop during that fallback.

[0.1.3 Early Access] - 2026-07-05

Chat Layout Upgrade

  • Added ChatWindowHeightPercent for players who want taller chat space without scaling text or UI. Default stays vanilla 100; supported range is 100-200.
  • Added /chatheight, /chatstretch, and /chath plus on/off/toggle, Customize -> Chat window height, Save/Undo, typeahead suggestions, and /qol status reporting as ChatWindowHeight.
  • Added ChatFontSizePercent for players who want larger chat message text without scaling the whole chat UI. Default stays vanilla 100; supported range is 75-200, with /chatfont, /chatfontsize, and /cf.
  • Added /chatvanilla, /chatreset, Customize -> Reset Chat UI to Vanilla, and unload/reset restoration for whole chat UI scale, chat font size, and chat window height.
  • Retained chat logs are now automatically raised to 250 rows for both Global and Local, so players can scroll back through longer sessions even if they leave chat height at vanilla size.
  • The larger chat window uses the same verified chat panel roots as the existing scaler, with stable vertical expansion that avoids the older width-expansion path until native wrap-width behavior is proven reliable.
  • Retained rows use the current GameSettings.GlobalMessageLimitCount and GameSettings.LocalMessageLimitCount getter path, raising the game limits without touching chat networking or message text.
  • Height reset restores vanilla layout, while active height changes keep the current bottom edge stable so players can still use the native chat drag handle for final positioning.
  • Refreshed in-game wording, README, and UAT notes to make the difference clear: /chatfont is for bigger message text only, /chatscale is for scaling the whole chat UI, /chatheight is for more vertical visible space, and deeper retained rows are automatic.
  • Documented that native Global/Local chat tabs remain game-owned in this release while BlueSage improves readability, retained rows, font size, whole-panel scale, and vertical height around them.
  • Reconnect Guard now waits about 5 seconds before its first managed reconnect attempt, limits itself to 3 short attempts, validates that the visible lobby/player UI becomes usable before calling reconnect successful, then tries the saved last lobby once through the game's native join-by-code flow before falling back toward the normal menu flow if the stuck void-lobby state remains.
  • If AndrewLin Reconnect is installed, BlueSage now defers to that mod's reconnect loop instead of stacking competing reconnect behavior.
  • Added Clone Shield as a defensive local warning when another visible roster row appears to reuse your current avatar/outfit. It ignores shared name colors, font styling, and status text to avoid false positives, warns locally only, and does not perform moderation actions.
  • Added optional Player Render Saver for very large lobbies. It is off by default, local-only, hides far/overflow remote player renderers on your PC only, keeps chat/player-list rows visible, and restores renderers when turned off.
  • Tuned QoL Menu and Style Helper max-safe opening size down slightly so they still auto-fit but leave more game/chat area visible on launch.

[0.1.2 Early Access] - 2026-07-04

Feedback Polish

  • Tuned final feedback defaults: Spoons remains opt-in/off by default, Ping Sound stays on the ticket sound, and default chat outline intensity is now 75.
  • Older enabled Spoons configs are reset to hidden once on update so the compact tag is truly opt-in again; players can turn it back on with /spoons on, /spoons 0-5, or Style Helper.
  • Existing users with untouched 50 or short-lived 60 chat outline defaults migrate to the current 75 default on update while custom outline values are preserved.
  • Name Styler and Status Styler now draw from the same responsive color library layout so their swatch choices match cleanly.
  • QoL Menu and Style Helper now open at their largest safe on-screen size, keep a small game/chat lane visible where possible, and still let players shrink them with the bottom-right resize handle.
  • Menu helper text and footer guidance are more noticeable so players can hover a control and see the exact answer without hunting through docs.
  • Home toggles the QoL Menu, Insert toggles Style Helper, lobby welcome tips call out the main keys/commands, and /back restores the status that was active before /brb or /afk when possible.

[0.1.1 Early Access] - 2026-07-03

Hotfix

  • Restored chat readability outline behavior after the 0.1.0 release: exact true-black rich-text names/messages now trigger the configured black-text outline color again, including <#000000>, <color=#000000>, and <color=black> tags.
  • Kept black detection precise so dark-but-not-black colors like #000080, #000001, and #101010 still use the normal outline color instead of being forced onto the black-text outline path.
  • Made the local UI outline/shadow apply its configured alpha directly so normal and black outline colors render more consistently over bright or busy backgrounds.

[0.1.0 Early Access] - 2026-07-03

Highlights Since 0.0.10

  • Full Early Access QoL menu flow: Home or /qolmenu opens settings, /styleui opens Name Styler, Status Styler, templates, colors, and optional Spoons, and Run QoL Status gives a quick local feature check.
  • Chat readability/accessibility is now a first-class feature: local outline/shadow, restored TMP material outline, /chatoutline 25-100, /chatscale and /chatresize 75-200, Customize -> whole chat UI scale, back on-screen nudging for scaled panels, /chatoutlinecolor, and /blackoutlinecolor.
  • BlackNamesOutline=on/off defaults on so true-black styled chat/name rows can use the lighter black-text outline color instead of disappearing into dark chat backdrops.
  • Longer text defaults are now 3000 for chat, Name/ID fields, ID-card details like About Me/FavoriteQuote, and room names, with cautious local tuning up to 4000.
  • Chat links are easier to read and safer to use: links get hyperlink color, plain click copies, and Shift-click warns before opening.

Polish And Defaults

  • Existing users get a one-time safe config migration: old untouched text limits move to 3000, old 60-minute sweep defaults move to 30, untouched outline intensity moves to the current default, and Spoons moved toward opt-in instead of being assumed visible for everyone.
  • Ping Mentions now default to the ticket sound, including migration from the old untouched click default.
  • QoL Menu and Style Helper are cleaner: toggles use normal On/Off buttons, Customize keeps safe editable rows with Save/Undo, identity edits live in Style Helper, and Midnight Dock is the default theme.
  • Status Styler and Spoons are tidier: Spoons stays compact as [1/5sp], remains opt-in, and has Save/Show/Hide/Undo controls beside status edits.
  • Templates apply immediately when loaded, with Undo available if the wrong slot was picked.

Fixes

  • Welcome tips retry until the local notification system accepts them, so the welcome no longer vanishes during early lobby/chat setup.
  • Detect Current now prefers live in-game values, keeps the current live name style in preview/copy/apply, and only strips BlueSage status/Spoons suffixes before filling an editable draft.
  • Menu/footer tooltip and status text areas are consistent across QoL Menu and Style Helper tabs, with no cross-window tooltip bleed.
  • Typeahead command popups are scrollable and more readable over busy chat.
  • ID-card details now follow the Name/ID text limit for all player data fields, including the bottom About Me/FavoriteQuote section, instead of the vanilla 1000-character publish cap.
  • Ping Mentions now match by base name but render the full current display label once, so @Rowan can highlight Rowan [Tired] [4/5sp] and @Blue can highlight Blue (Homelab) [3/5sp] without duplicating suffixes; status/Spoons text does not duplicate inside ping messages.

[0.0.10] - 2026-07-02

New

  • Midnight Dock became the default menu theme, and the broken High Contrast theme was removed.
  • Added a per-lobby welcome message so players see Home, /qolmenu, /styleui, /qol status, and typeahead tips when they join a lobby.
  • Chat links now show as hyperlink-style text. Plain click still copies; Shift-click first copies and warns, then a second Shift-click opens the same link.

Improved

  • Moved Purge Unused Assets to the Main tab beside the other quick actions.
  • Toggles use two columns so the menu space is easier to scan.
  • Fresh configs moved the visible beta features on for testing, while existing configs kept saved player choices.
  • Spoons stays compact as [1/5sp]; the old mood command and mood config fields were removed so names do not flood chat.

[0.0.9] - 2026-07-02

New

  • Added menu themes: OG, Vanilla Cream OT, and Midnight Dock.
  • Theme choice applies to the QoL Menu, Style Helper, and autocomplete/typeahead popups.
  • Added click-to-copy chat with /copychat and /ccopy.
  • Added safe chat-link opening: plain click copies text, and Shift-click opens the first safe web link.
  • Added chat readability with /chatreadability and /chatread.
  • Added BetterMove: Shift runs and Ctrl slow-walks.
  • Added /brb and /afk quick status shortcuts.

Improved

  • Fixed gradient/color output so color tags close cleanly and do not bleed into later text.
  • Style is now for names, while Status is for activity tags like (Reading).
  • Style Helper templates now save name styling only, so status does not change by accident.
  • Added the color library to Status so players can pick status colors without hex-code homework.
  • Spoons is now off by default for new installs, uses a compact [1/5sp] tag when enabled, and has /spoons off plus a QoL Menu hide button for shorter names.
  • QoL Menu customization rows now include Save plus a back-out button so players can discard unsaved edits.
  • Slash-command typeahead is scrollable when browsing commands with /.
  • Chat readability now tries a stronger local text outline, and Chat Backdrop can restore saved backdrop colors when turned off.
  • MiniMap dot-to-ID is the supported minimap helper for this release.
  • Floating minimap name labels stay removed because large lobbies reported FPS/CPU lag; clicking dots for ID cards keeps the useful part without name clutter.
  • Chat readability improves local text contrast without changing what other players see.
  • BetterMove only affects your own character locally.
  • README now keeps the Thunderstore-facing notes shorter and more player-friendly.

[0.0.8] - 2026-06-29

  • Added the visible @name suggestion popup for Ping Mentions.
  • Made Style Helper and QoL Menu open larger by default with easier resize handles.
  • Expanded the Style Helper color library.
  • Retired the broken tiny Easter egg buttons and kept one compact optional one-time lobby joke with truthful labeling.
  • Player-list helper buttons now protect native report/ignore/kick/ban controls first.
  • Enhanced Player Panel helper logs now stay separate from host-health logs.
  • README now lists both the official On-Together Discord and Blue's Discord Community.

[0.0.7] - 2026-06-28

  • Fixed Ping Mentions so typing @name and pressing Tab works naturally.
  • Kept [PING], @lobby, and selectable sound modes.
  • Reconnect Guard now tries 20 times about every 15 seconds, then returns toward the normal menu/error flow.
  • MiniMap dot-to-ID remains on by default.
  • Floating minimap labels are removed after large-lobby FPS/CPU lag reports.
  • Style Helper and QoL Menu now have resize grips, screen clamping, vertical scrolling, and clearer tips.
  • Home now opens/closes /qolmenu.
  • Player-list helper buttons sit left of the native/Pomodoro/PomoSync action area so report/ban buttons remain reachable.

[0.0.6] - 2026-06-28

  • Fixed the v0.0.5 player-list button layout regression.
  • Style Helper and QoL Menu became easier to read and scroll.
  • Added Discord buttons to the Style Helper and QoL Menu headers.
  • Moved beta controls into Toggles and changed the old Beta tab into Credits / Other.
  • Added Reset Current to the Style Helper.
  • Ping Mentions got yellow completed mentions, visible [PING] marking, @lobby, and selectable sound modes.
  • MiniMap click-to-ID-card stayed as the useful behavior while floating labels were removed.
  • Credits / Other invites players to screenshot/share finds in Blue's Discord.

[0.0.5] - 2026-06-28

  • Chat, ID/profile fields, room names, and style-generated text now default to 1500 characters.
  • Text limits are user-expandable up to 4000 through config or /qolmenu.
  • Host Health now defaults off and is available through manual /hh run.
  • Added safer player-list row refresh for larger lobbies and recycled player-list rows.
  • Added Pomodoro/PomoSync spacing protection for player-list helper buttons.
  • Added MiniMap dot-to-ID support.
  • Added /styleui and /qolmenu.
  • Added PlayerLimitLift companion awareness for Host Health.
  • Fixed timestamps so they can apply to chat plus join/leave/system notices.

[0.0.3] - 2026-06-18

  • Early beta cleanup.
  • Added /style / /sty.
  • Added Focus Anywhere.
  • Added Enhanced Player Panel helpers.
  • Added optional PlayerLimitLift companion awareness.
  • Reduced Host Health false-positive noise.

[0.0.2] - 2026-06-18

  • Rebuilt as 0.0.2 so Thunderstore could accept the package after the deprecated 0.0.1 upload.

[0.0.1] - 2026-06-18

  • First Early Access release of BlueSage QoL Tweaks - Beta.
  • Added Asset Sweep, Host Health, longer chat/name/room text, leave notices, optional timestamps, Reconnect Guard, and internal /as, /hh, /ln, /tt, /rg, /rm, /bsqol, and /qol commands.