
LoadingWidgetREPO
Loading-screen panel for every player: live load states with stuck detection, talking bars, local voice volume; kick/ban and stuck-load lobby rescue for moderators. Works standalone; full SharePermissions integration when installedLoadingWidget
A panel on the R.E.P.O. loading screen — the one place the normal menus can't reach. Every player running the mod sees it while a multiplayer level load is in flight — between levels in the game itself, including through the scene-swap gap where even the game's own UI is gone; never on the boot/menu loads or in singleplayer. Works on its own; SharePermissions is an optional companion that unlocks its full moderation stack.
Everyone sees:
- every connected player with their live load state — LOADING / BUILDING / LOADED / READY — so the one player hanging the load is visible at a glance. When a load is genuinely stuck (the game's own ~25s verdict, or the panel's own backstop for the Start/reload phases it misses), the header flags STUCK and the blocking rows burn red
- a talking-volume bar per player
- a per-player local voice volume slider (0–200%, this machine only, resets on room leave)
Moderators (the host — plus SharePermissions moderators when it's installed) additionally get:
- Kick / Ban for stuck or misbehaving players
- a Lobby button that brings the whole room back to the lobby even when a load is stuck — with the host-side QUEUED / FORCE rescue escalation for a wedged transition (the vanilla stuck prompt only offers leaving the room; this bail keeps the room intact)
Standalone vs. with SharePermissions
The mod detects SharePermissions at startup and uses all of it when found:
| Standalone | With SharePermissions v1.17.0+ | |
|---|---|---|
| Who sees the panel | Everyone in the room running the mod | Everyone in the room running the mod |
| Who gets moderation actions | Host only | Host and SharePermissions moderators |
| Kick / Ban | The game's own kick & ban (host) | SharePermissions rules & wire protocol — moderators can kick remotely, bans are audited |
| Role icons | Host crown only | Full tiers: host / moderator / mod user / no mod |
| Lobby + QUEUED/FORCE rescue | Yes (host) | Yes, plus moderator-initiated via wire command |
| Load states, talking bars, local volume | Yes | Yes |
| Panel on/off toggle | This mod's config: UI / ShowLoadingPanel in BepInEx/config/RED.LoadingWidget.cfg |
SharePermissions' Settings tab "Loading panel" (config: UI / ShowLoadingPanel in SharePermissions' config file) — live, mid-load included |
Note on older SharePermissions (≤ 1.16.x): those versions ship this panel inside SharePermissions itself, so LoadingWidget stays dormant (one log line, no double panel). Update SharePermissions to 1.17.0+ — or uninstall it — to activate LoadingWidget.
Quick start
- Install this mod. That's it — the panel appears on multiplayer loading screens for everyone running it; the kick/ban and lobby controls light up for the host.
- Optional: install SharePermissions v1.17.0+ (and set it up as usual, secret code etc.) to get moderator access, role tiers, and its kick/ban machinery on the panel.
For developers
This mod is the panel UI plus the native FORCE lobby rescue, talking to a backend picked once
at startup (Plugin.ResolveBackend, soft [BepInDependency] so SharePermissions loads first when
present):
- Bridged — SharePermissions v1.17.0+ installed: moderation goes through its public facade
SharePermissions.Api.LoadingWidgetBridge(additive-only stability contract). - Standalone — SharePermissions absent: host-only moderation fallbacks on the game's own
machinery (native kick/ban wire events, replicated lobby-return, own
PlayerVoiceChatpostfix for talking bars and local volume — applied only in this mode so the two mods never double-apply volume factors). - FORCE is native in both modes (
src/StandaloneLobby.cs): the wedged-transition restart acts on the game's pipeline, not on backend state, so it lives here; the backend that owns the queued return finishes the trip after the reboot.
src/SharePermissionsBackend.cs is the only file allowed to reference SharePermissions.*
types (JIT isolation is what lets the mod run without the assembly on disk — keep it that way).
-
libs/SharePermissions.dllis the vendored compile-time copy of the bridge contract. It is not bundled at runtime (Private=false) — BepInEx loads the real installed mod. Whenever the bridge gains members this mod needs, rebuild SharePermissions and refresh the vendored DLL:dotnet build <SharePermissions repo>\SharePermissions.csproj copy <SharePermissions repo>\bin\Debug\netstandard2.1\SharePermissions.dll libs\...then raise
PluginInfo.SharePermissionsMinVersionif the new members are required — installs below the minimum fall back to standalone-or-dormant instead of crashing. -
dotnet builddeploys straight into the r2modman profile configured inDirectory.Repo.props(per-machine overrides go inDirectory.Repo.props.user, via the Linkoid.Repo.Plugin.Build SDK). -
Design notes: the extraction spec lives in the SharePermissions repo (
docs/superpowers/specs/2026-07-13-loading-widget-extraction-design.md); the optional-dependency design lives here (docs/superpowers/specs/2026-07-13-optional-sharepermissions-design.md).