kirklandwaterbottle-TerminalLoadouts icon

TerminalLoadouts

Save 20 named weapon and arm loadouts in level-start terminals, with weapon order, custom slot colors, reordering, and optional Grenade Launcher support.

Last updated 6 hours ago
Total downloads 49
Total rating 0 
Categories Gameplay
Dependency string kirklandwaterbottle-TerminalLoadouts-1.1.4
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

Terminal Loadouts 1.1.4

Twenty named weapon-and-arm presets inside ULTRAKILL's level-start terminal.

Open Weapons → LOADOUTS, directly below Arms and above Back.

Install

Requires BepInEx 5 for ULTRAKILL. Plugin Configurator is not required.

  1. Close ULTRAKILL completely before trying the newly installed mod.
  2. Extract the install ZIP into your game or r2modman profile folder. The DLL must end up at BepInEx/plugins/TerminalLoadouts/TerminalLoadouts.dll.
  3. For r2modman, launch Modded using the same profile into which the DLL was copied.
  4. Enter a level with a normal start room and open its weapon terminal. LOADOUTS appears immediately below Arms.

BepInEx loads plugins at game startup. Returning to the main menu or restarting a level does not load a newly installed DLL.

Use

  • Configure your weapons, variant order, and arms with the normal terminal controls.
  • Open LOADOUTS, choose an empty slot, then select SAVE CURRENT.
  • Use < and > to navigate four pages: slots 1–5, 6–10, 11–15, and 16–20.
  • Select a saved slot and choose APPLY to equip it immediately.
  • OVERWRITE appears on an occupied slot when your current equipment or variant order differs; it asks before replacing the saved setup. Matching setups display disabled SAVED. Empty slots display SAVE CURRENT. DELETE also asks for confirmation.
  • RENAME opens a text-entry dialog. Names can contain up to 32 characters. Enter saves; Escape cancels. A keyboard is required to enter a custom name. Gameplay input actions are suspended while the rename or color dialog is open; its separate UI input remains active. Closing the dialog restores only the actions that were enabled before it opened.
  • Selecting a slot only previews it. Equipment changes never automatically overwrite a saved preset.

Presets remember equipped weapon variants, standard/alternate choices, each weapon family's variant order, and arm equipment (including Whiplash). They do not store colors, keybinds, weapon-family hotkey assignments, cooldowns, or held items.

The cyan loadout panel shows actual in-game weapon and arm icons. Within each weapon family, equipped variants appear left to right with 1, 2, 3 indicating their saved cycling order. ALT identifies an alternate weapon, using its alternate icon. OFF means no equipped variants in that family. Arms appear separately without cycle numbers. If an icon cannot be resolved, its equipment ID appears instead. No game artwork is redistributed.

SAVE CURRENT remembers each family's native terminal order. APPLY restores it before rebuilding weapons. The preview represents the saved setup; locked equipment may be skipped when applied to another game save.

Select a slot and use UP / DOWN under REORDER SELECTED SLOT to swap it with its neighbor, including across page boundaries. Its name, equipment, weapon order, and color move together. The first slot cannot move up; the last cannot move down.

Every slot starts with a different color. SLOT COLOR opens twenty suggested swatches, custom RGB sliders, and a #RRGGBB field. SAVE commits; CANCEL discards. Colors can be set on empty slots and are preserved when overwriting or clearing equipment.

Availability and unlocks

Brutal V1 Mode: version 1.1.4 adds an optional compatibility guard for com.potpot.brutalv1 (installed plugin reports 1.0.0). That mod reads legacy movement axes and writes player velocity directly, bypassing the normal game's input actions. While Rename or Slot Color is open, its movement callback is suspended. Closing the dialog restores its usual movement immediately. BrutalV1 is not required or bundled. Successful setup logs BrutalV1 movement guard enabled for loadout dialogs.

The button is added only to weapon terminals beneath the game's FirstRoomPrefab component, including standard, Prime, secret, and Encore start rooms when they contain the normal terminal. It remains available if you return to that terminal after beginning a level. Mid-level, end-of-level, Sandbox, and Cyber Grind terminals are not targeted. Custom maps without that component and custom weapons other than the Grenade Launcher integration below are outside this version's compatibility scope.

All game saves within one BepInEx profile share the same twenty slots. The game still enforces the current save's unlocks: locked weapons are skipped and locked alternates use the standard version when available. A level's forced equipment takes priority. The saved preset is not modified by these restrictions. Intentionally unarmed setups are supported.

Grenade Launcher compatibility

Optional integration with DocValentyne Grenade Launcher 2.0.2. Enable that mod and its dependencies in the same profile before launching. Terminal Loadouts also works when it is absent or disabled.

  • Configure standard/alternate Rocket Launcher variants through Grenade Launcher's terminal controls, then SAVE CURRENT. Each preset remembers the three grenade-mode choices independently, including mixed standard/grenade setups, alongside equipped status and rocket variant order.
  • APPLY restores those choices through the mod's own current-game-save selection methods before rebuilding weapons. It does not change balance settings, colors, cooldowns, or unlocks.
  • Grenade variants use the native rocket icon with a GL badge. Grenade Launcher 2.0.2 uses that same 2D terminal icon; its custom 3D model is not a separate icon asset.
  • Older presets have no grenade choices: applying them leaves current grenade modes unchanged and explains this in the menu. Resave a preset with the mod enabled to record its choices.
  • If Grenade Launcher is later disabled or removed, reopening the loadout screen keeps every preset intact. Saved grenade variants show dimmed icons with GL! and a persistent missing-mod warning. APPLY uses standard rockets where unlocked; equipment and cycle order still apply normally.
  • Opening, previewing, or applying never rewrites saved grenade choices. Renaming, recoloring, moving, and even overwriting an existing slot while the mod is missing preserve those choices. Overwriting still updates current vanilla equipment and ordering, and its confirmation explains that grenade choices are kept. The missing mod alone does not make an otherwise matching setup show OVERWRITE.
  • Re-enable Grenade Launcher, restart the game, then APPLY to restore the saved grenade choices. To intentionally replace them with standard rockets, choose standard variants while the mod is enabled and overwrite the slot. New slots saved without the mod contain no grenade selection data.
  • Integration was checked against the installed 2.0.2 assembly. Incompatible method signatures stop capture/apply before changes rather than silently dropping grenade selections. Grenade Launcher manages persistence of its own selection file and reports its write failures in the BepInEx log.

Upgrading from 1.0.0 or 1.1.0

Existing ten-slot files expand to twenty slots in memory. Existing twenty-slot files also remain readable. The first successful edit writes schema version 3 and keeps the original file as the backup. Existing equipment, names, and weapon orders are preserved. Older mod versions cannot read schema 3; keep a copy of the original file if you intend to downgrade.

Preset storage and recovery

Presets are saved in BepInEx/config/TerminalLoadouts/loadouts.json under the active mod profile. Successful replacements keep the previous file as loadouts.json.bak. Saving uses a temporary file and atomic replacement; failed writes leave the previous slot unchanged and display an error.

If the primary file is damaged, the mod attempts to load the backup and preserves the damaged primary under a .corrupt-... filename. If neither file is readable, saving is disabled rather than overwriting either one. Close the game, copy both files somewhere safe, and restore a known-good file. To start fresh, move both files out of this folder before launching again. Files with a newer unsupported version are preserved and require a compatible mod version.

If LOADOUTS is missing

Check the active profile's BepInEx/LogOutput.log for Loading [Terminal Loadouts 1.1.4]. If it is absent, check the DLL location and restart the game through the correct modded profile. A successful terminal attachment logs Attached LOADOUTS below ARMS. Attachment errors are logged without replacing the vanilla terminal.

Build and tests

Requires a .NET SDK supporting netstandard2.1 (the test runner targets .NET 9), your locally installed game, and BepInEx core assemblies. No game assemblies are included in this package.

./build.ps1 -GameDir 'C:\path\to\ULTRAKILL' -BepInExCoreDir 'C:\path\to\profile\BepInEx\core'
dotnet run --project tests/TerminalLoadouts.Tests.csproj -c Release -- ./obj/test-results

See VERIFICATION.md for checks actually completed and remaining gameplay checks.

Remove

Close the game and remove only BepInEx/plugins/TerminalLoadouts/TerminalLoadouts.dll. Saved presets remain in the config folder. The last applied equipment choices remain ordinary game preferences.