orbitalteam-CommanderRadarZoom icon

CommanderRadarZoom

Client-side-only zoom controls for the ship monitor radar camera.

Last updated 13 hours ago
Total downloads 14
Total rating 0 
Categories Mods BepInEx AI Generated
Dependency string orbitalteam-CommanderRadarZoom-1.0.0
Dependants 0 other packages depend on this package

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

CommanderRadarZoom

CommanderRadarZoom is a client-side-only Lethal Company mod that changes the visible range of the ship monitor radar. It only adjusts the local radar camera's orthographicSize; it does not discover new entities, request additional position data, or change gameplay state.

Built for Lethal Company v81, Unity 2022.3.62f2, BepInEx 5, and BepInExPack 5.4.2305.

Features

  • Zoom the ship monitor radar in or out during play.
  • Configure the default, minimum, maximum, and step values.
  • Configure zoom-in, zoom-out, and reset keys.
  • Preserve the current zoom in the BepInEx configuration file between launches.
  • Log every user-selected zoom value.
  • Optionally show a short, local OnGUI notification.
  • Recover the canonical ship radar camera after scene and round changes.
  • Avoid continuous camera writes and per-frame reflection.
  • Ignore zoom input while chat, the terminal, the quick menu, or another special menu is active when the game exposes that state.

ZoomIn decreases orthographicSize, showing a smaller area at greater visual magnification. ZoomOut increases it, showing a wider area.

Client-side guarantee

Only the installing player's canonical ship radar camera (StartOfRound.Instance.mapScreen.mapCamera) is modified. The plugin does not contain or register:

  • custom RPCs, ServerRpc, or ClientRpc;
  • NetworkVariable values or custom Netcode messages;
  • connection approval, lobby handshake, or version-check logic;
  • gameplay-state, player-position, or monster-position changes;
  • a requirement for the host or any other player to install the mod.

Unity.Netcode.Runtime.dll is a compile-time reference needed to resolve game types inherited from Netcode classes. CommanderRadarZoom does not call Netcode APIs.

Lethal Company v81 modded-label caveat

Lethal Company v81 can itself detect Doorstop/BepInEx and mark a hosted lobby as modded. Client-side-only here means that CommanderRadarZoom adds no networking, handshake, dependency enforcement, or compatibility restriction; it cannot promise that the base game's lobby label remains vanilla. The plugin deliberately does not bypass or alter the game's BepInEx detection, dmods state, lobby metadata, or connection rules.

Configuration

The configuration is generated at:

BepInEx/config/com.commanderradarzoom.client.cfg

[General]
Enabled = true

[Radar]
DefaultZoom = 25
MinimumZoom = 10
MaximumZoom = 60
ZoomStep = 2

[Keybinds]
ZoomIn = Equals
ZoomOut = Minus
ResetZoom = Backspace

[Display]
ShowZoomNotification = true

[State]
CurrentZoom = 25
Section / key Default Purpose
General.Enabled true Enables local zoom handling. Disabling it restores the captured camera value only if this mod still owns the last-applied value.
Radar.DefaultZoom 25 Value applied by the reset key. It is not overwritten when the current zoom changes.
Radar.MinimumZoom 10 Lowest allowed orthographicSize, and therefore the closest zoom.
Radar.MaximumZoom 60 Highest allowed orthographicSize, and therefore the widest view.
Radar.ZoomStep 2 Amount added or subtracted for each key press.
Keybinds.ZoomIn Equals Decreases the zoom value. Uses Unity KeyCode names.
Keybinds.ZoomOut Minus Increases the zoom value. Uses Unity KeyCode names.
Keybinds.ResetZoom Backspace Restores DefaultZoom.
Display.ShowZoomNotification true Shows a brief local-only notification after a user zoom action.
State.CurrentZoom 25 Last selected value, saved immediately and reused on the next launch.

Invalid non-finite or non-positive numeric settings are corrected to safe defaults. Reversed minimum and maximum values are swapped; the default and current values are clamped into the corrected range. Key collisions are logged and handled deterministically in this order: reset, zoom in, zoom out.

Installation

  1. Install Lethal Company and BepInExPack 5.4.2305.
  2. Place CommanderRadarZoom.dll in Lethal Company/BepInEx/plugins/CommanderRadarZoom/.
  3. Start the game once to generate the configuration file.
  4. Edit the configuration while the game is closed, then restart the game.

Only the player who wants the local zoom controls installs the DLL. Do not install this plugin on a server, and do not add it as a required lobby mod.

Building from source

Requirements:

  • a .NET SDK capable of building netstandard2.1;
  • a local Lethal Company v81 installation;
  • BepInEx 5 / BepInExPack 5.4.2305 installed for the reference assemblies.

From the project directory, override the paths if they differ from the project defaults:

dotnet restore .\CommanderRadarZoom.csproj
dotnet build .\CommanderRadarZoom.csproj -c Release `
  -p:LethalCompanyDir="C:\Program Files (x86)\Steam\steamapps\common\Lethal Company" `
  -p:BepInExCoreDir="C:\Program Files (x86)\Steam\steamapps\common\Lethal Company\BepInEx\core"

The plugin DLL is produced under bin/Release/netstandard2.1/. Game, BepInEx, Harmony, and Netcode reference DLLs must not be redistributed with the mod.

Thunderstore package

The archive root must contain exactly the distributable files, without an extra parent folder:

CommanderRadarZoom.dll
manifest.json
README.md
CHANGELOG.md
icon.png

Example packaging command after copying those five files into dist/package:

Compress-Archive -Path .\dist\package\* -DestinationPath .\dist\CommanderRadarZoom-1.0.0.zip -Force

The sole Thunderstore dependency is BepInEx-BepInExPack-5.4.2305.

Manual test procedure

The following five multiplayer scenarios are the release acceptance tests. Check the installing player's BepInEx log and compare the ship monitor on every participating machine.

Test 1 — Join a vanilla host

  1. Start a completely unmodded host.
  2. Install CommanderRadarZoom on one joining client only.
  3. Join the lobby, start a round, and use all three zoom keys at the ship monitor.
  4. Confirm that joining and starting succeed, no other player receives an error, and only the modded client sees the changed radar range.

Expected: no handshake or version prompt occurs; the selected zoom is logged locally.

Test 2 — Unmodded clients remain unchanged

  1. Run a lobby where at least one host or client does not have CommanderRadarZoom.
  2. Change zoom repeatedly on the modded player.
  3. Observe the same ship radar on an unmodded player's screen.

Expected: the unmodded radar retains the game's normal range, and connection and synchronization continue normally.

Test 3 — Mod user is the host

  1. Install CommanderRadarZoom on the host only.
  2. Join from one or more vanilla clients and start the game.
  3. Change zoom on the host and compare every screen.

Expected: vanilla clients connect normally and only the host's local rendering changes. The game may apply its own v81 modded label because the host uses BepInEx; CommanderRadarZoom adds no such rule.

Test 4 — Late join

  1. Start and progress a vanilla-hosted game.
  2. Join in progress from a client with CommanderRadarZoom installed.
  3. Wait for the ship radar camera to be created, then use the zoom keys.

Expected: joining requires no plugin handshake, and the saved local zoom is applied once the canonical camera becomes available.

Test 5 — Round and scene transitions

With CommanderRadarZoom active, move through all of the following states: company building, moon landing, ship takeoff, death and spectating, and a new round.

Expected: transitions complete without errors; stale camera references are discarded; the canonical ship radar is reacquired and the saved zoom is applied when a valid orthographic camera exists.

Local functional checks

  • Zoom and clamp: Press each zoom key at both limits. Values must move in the documented direction, never pass the range, and appear in the BepInEx log.
  • Input guards: Open chat, use the terminal, open the quick menu, and enter any available special menu. The configured keys must not change zoom until input focus returns to gameplay.
  • Reset: Change zoom, press ResetZoom, and confirm the value becomes the clamped DefaultZoom.
  • Persistence: Change zoom, close the game normally, relaunch, and confirm State.CurrentZoom and the applied camera value match the last selection.
  • Configuration validation: Test zero/negative/non-finite numbers, reversed limits, an out-of-range current value, and duplicate keys. Confirm correction or clamping and a clear log message without a crash.
  • Notification: Toggle ShowZoomNotification; confirm that the notice appears only when enabled and never appears on another player's screen.
  • Disable/restore: Set Enabled=false. Confirm that the original value is restored only when no other mod has changed the camera after CommanderRadarZoom's last write.

Compatibility and conflict behavior

CommanderRadarZoom writes only when a valid canonical radar camera is discovered, after a scene/round recovery, or after user input. A low-frequency check observes reference changes and conflicts but does not continuously overwrite orthographicSize.

Mod / category Expected behavior and response
EnhancedRadarBooster (MrHydralisk.EnhancedRadarBooster) MapRangeRBEnabled or MapRangeRBSync can continuously control the same value. When either conflicting option is active, CommanderRadarZoom disables its camera writes and logs instructions to turn both options off before using this mod's zoom. If those values are synchronized, the controlling host's EnhancedRadarBooster configuration must be changed before reconnecting.
GeneralImprovements Detected installations are reported at info level. CommanderRadarZoom continues, touches only the canonical radar camera, and never changes that mod's state. If both edit the same camera later, the external value is respected.
OpenBodyCams Detected installations are reported at info level. Body-cam cameras are ignored; only the exact mapScreen.mapCamera reference is eligible.
TwoRadarMaps Additional renderers and cameras are ignored. Only the canonical ship mapScreen and its mapCamera are cached. If the canonical value is persistently replaced, local zoom is disabled for that camera and a warning is logged.
Minimap Minimap cameras are not modified. A replacement of the canonical camera is handled as a reference change; an incompatible or non-orthographic replacement disables only zoom functionality.
ShipWindows Window cameras and render textures are not modified. Scene-object changes are handled through safe cache invalidation and low-frequency reacquisition.
Other radar mods External value changes are observed rather than overwritten every frame. If another mod immediately overwrites a user-requested value, CommanderRadarZoom stops writing to that camera and logs one clear conflict warning instead of destabilizing the game.

Harmony patches use an explicitly late postfix. A missing patch target, null object, invalid/non-orthographic camera, or unexpected exception disables only the affected zoom feature and is logged; it must not stop the game.

Perfect compatibility cannot be guaranteed when two mods intentionally own the same camera property. Prefer configuring exactly one mod to control radar range.

Client-side code audit

The following results are from source/configuration/assembly-design inspection. PASS means CommanderRadarZoom contains no mechanism that violates the criterion; it is separate from empirical multiplayer runtime certification.

Requirement Result
No custom RPC PASS
No ServerRpc PASS
No ClientRpc PASS
No NetworkVariable PASS
No custom network message PASS
No host installation requirement PASS
No other-client installation requirement PASS
No mod-version handshake PASS
No forced lobby compatibility check PASS
No game-state modification PASS
No player or monster position modification PASS
Only a local camera/rendering value is modified PASS
Can connect to a vanilla host by design PASS
Can play alongside vanilla clients by design PASS
Does not affect an unmodded user's screen PASS

The final three compatibility claims must also be confirmed in an actual Lethal Company session using Multiplayer Tests 1–4 above. A static PASS is not a substitute for that release-time runtime test. Test 5 and the local functional checks validate lifecycle safety, input suppression, and persistence.

Support logs

When reporting a problem, include the Lethal Company version, BepInEx version, BepInEx/LogOutput.log, the generated CommanderRadarZoom configuration, and a list of other camera/radar mods. Never upload private lobby credentials or unrelated personal data.