On-Together: Virtual Co-Working
You are viewing a potentially older version of this package. View Latest Version
Install

Details

Date Uploaded
5 days ago
Downloads
774
Size
378KB
Dependency string
Blues-BlueSage_QoL_Tweaks_Beta-0.2.2

BlueSage QoL Tweaks

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

Current package: v0.2.2 Early Access — a July 17 game-API hotfix that restores Home/Insert menus, slash-command popups, chat decoration, local sent-message rendering, and native ID-card integration while preserving every 0.2.1 resource-safety and identity safeguard. The game-owned memory leak is mitigated, not claimed cured; the exact rebuilt DLL still requires the normal clean-profile multiplayer gate before upload.

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.5 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.2 Hotfix · 0.2.1 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.2 Game API Hotfix

  • Menus and commands restored: optional Harmony patches are now installed independently. If a future game update moves one optional target, BlueSage logs and skips only that patch instead of aborting startup and losing Home, Insert, slash-command typeahead, Sweep, and the rest of the plugin.
  • Current chat contract: every BlueSage chat decorator now matches the game's five-argument AddMessageUI method and preserves its sendByPlayer flag. Local sent messages render once on the sender while remote messages and channel scope keep their original meaning.
  • Native moderation compatibility: minimap and enhanced-player-panel ID actions now open the July 17 integer-index ID-card path. The game's new moderation buttons remain game-owned; BlueSage only decorates identity evidence and continues to revalidate exact authority before its own protected actions.
  • No preference reset: 0.2.2 keeps the one-time 0.2.1 Sweep migration marker and all saved toggles, styles, helpers, chat settings, and audit choices. The hotfix changes compatibility code, not user state.

0.2.1 Resource Safety Highlights

  • Safer Asset Sweep: automatic sweep remains enabled at a one-time migrated 10-minute default and supports 5 to 180 minutes. Each sweep is single-flight, waits for Unity's asynchronous Resources.UnloadUnusedAssets() operation to finish, and emits one UTC start/completion pair with elapsed time, managed/process-memory deltas, handle/thread counts, native-row versus Steam-member totals, voice off/joined/queue state, pre/post Texture2D/RenderTexture/Material/Mesh/AudioClip totals, the dominant reclaimed category, and up to five largest reclaimed sizes labeled only by resource category.
  • Host roster lifecycle guard: hosts reject invalid or exact-duplicate player registrations before the game's parallel roster lists grow. A replacement for the same stable identity removes only its old parallel-list row before the native append; exact SteamID64 takes priority over a conflicting older Vivox-only row. This does not destroy network objects or guess at ambiguous players.
  • Vivox request coalescing: the game's local 3D voice-position request is bounded to 4 Hz instead of running every rendered frame. The guard is on by default, fail-open if the current Vivox surface is unavailable, and can be disabled only for compatibility testing.
  • Lower-allocation local audit: the BepInEx mirror now reuses one bounded 64 KiB transfer buffer and allocates it only when unread log bytes exist, removing the prior idle large-object-heap churn.
  • Shareable diagnostics: compact BepInEx diagnostics use UTC timestamps and count/fingerprint evidence without exact lobby or player identities. Authorized local audit files retain the protected mappings needed by hosts and Helpers; nothing uploads automatically.
  • Evidence boundary: crowded-lobby sampling reproduced rapid growth on an unmodded guest and while the host's Vivox lobby was off. A live F10 pair also observed 29,263 Texture2D objects (3.60 GB) falling to 2,888 (192.64 MB) after Asset Sweep while scene-object count stayed unchanged. That proves a large population of unused Unity texture assets remained resident until the sweep; it does not identify the complete creator chain. BlueSage mitigates the pressure and removes its own audit amplifier without claiming an upstream cure.

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 through 0.2.x so player logs retain consistent privacy-safe 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 game/PurrNet row is live but that SteamID is absent from the current Steam lobby member enumeration; the profile may still open, but identity-sensitive moderation remains locked. LEFT / STALE requires no attached live native player, while CHECKING covers duplicate or incomplete identity sources. Every non-verified state is non-actionable, and the roster is not called complete until Steam-to-native and native-to-Steam coverage both agree.
  • 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.
  • EnableCommunityBanListSync defaults On for the verified current host only. After a short startup delay, and then at a bounded six-hour cadence, BlueSage fetches the maintained andrewlimforfun/ot-community-banlist BanData.txt, validates its paired SteamID64/nickname arrays and size limits, and appends only exact IDs missing from the game's native ban list.
  • This is an additive native BanData merge, not a replacement: existing local IDs, nicknames, reasons, order, and personal entries are never edited or removed. A failed fetch, malformed/misaligned source, authority change, or save error makes no change; a failed save rolls back only the newly appended rows. Logs report counts and source provenance without printing IDs.
  • Community-list membership does not create a BlueSage player badge or authorize a live moderation action. Live actions remain exact-profile, current-roster, host-authorized, and preview/confirm gated. Hosts can disable the periodic merge in the BepInEx config.
  • 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 of audit files. The separate verified-host BanData maintenance fetch stores only validated missing entries in the game's native local ban file.

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 10 minutes by default. Existing profiles migrate once to enabled at 10 minutes so stale settings cannot miss the safer cadence. After that migration, your intentional 5 to 180 minute choice remains yours.

  • Helps long sessions reclaim unused Unity assets.

  • Each normal automatic completion writes one bounded [BlueSageSweep] evidence line to BepInEx/LogOutput.log. No command or F10 capture is required: if memory keeps climbing, close the game normally when practical and provide that log privately or review it before public posting. BlueSage's added sweep fields contain aggregate process/resource/roster/voice state plus up to five reclaimed sizes labeled only by resource category; those fields do not record lobby IDs/names, SteamIDs, player display names, chat, or voice identities. The complete log can still contain unrelated game or plugin output.

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

  • Interval safe range: 5-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: 10. Existing profiles migrate once to enabled at 10 minutes. After that migration, your intentional 5 to 180 minute choice remains yours.
  • EnableVivoxPositionRateGuard: true (coalesces the game's local 3D voice-position request to 4 Hz; disable only for compatibility testing)
  • 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 through 0.2.x; 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.
  • Verified hosts may enable the default-on additive community BanData maintenance described above. It never replaces personal bans; exact live host decisions remain 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.
  • If a long crowded session is rapidly consuming RAM or VRAM, run /as now and save a local audit snapshot. The current game build can retain thousands of no-longer-referenced textures across player join/despawn/customization churn; Asset Sweep is a pressure-relief measure, not a substitute for the upstream lifecycle fix.
  • 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!”; our anonymous July 16 $10 Ko-fi supporter for helping keep community tools tested, documented, and available; 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:

Thunderstore development is made possible with ads. Please consider making an exception to your adblock.