You are viewing a potentially older version of this package. View all versions.
ByteSizeMetal-InventoryControls-1.4.0 icon

InventoryControls

Occupied-slot cycling, last-item re-equip, tap-to-store and hold-to-drop controls. Automatically supports SLRUpgradePack inventory slots when present.

Date uploaded 5 days ago
Version 1.4.0
Download link ByteSizeMetal-InventoryControls-1.4.0.zip
Downloads 88
Dependency string ByteSizeMetal-InventoryControls-1.4.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

Inventory Controls 1.4.0

A standalone R.E.P.O. inventory control mod. Requires BepInEx only. It works with the normal three inventory slots without SLRUpgradePack.

When SLRUpgradePack is detected, the included compatibility adapter automatically includes its unlocked extra inventory slots, up to nine total. No separate patch, toggle, or installation is needed. If SLR is absent, disabled or its optional API cannot be read, the base controls continue to work with vanilla slots.

Controls

Action Keyboard default Controller default
Cycle Left [ D-pad left
Cycle Right ] D-pad right
Put Away Backquote D-pad down

Remap in REPOConfig → Inventory Controls, under Bindings - Cycle Left, Bindings - Cycle Right, and Bindings - Put Away. Put Away is the unequip / re-equip action: tap to store what is in hand, tap with empty hands to re-equip the last used item, or hold to drop a held item.

Set General → Hold to drop seconds to adjust the hold threshold (default 0.4 seconds, range 0.1–2 seconds). A tap stores or re-equips on button release; a hold drops once when the threshold is reached. Releasing after a drop does nothing. Holding with empty hands does nothing. A mouse-wheel binding always acts as an immediate tap because a wheel pulse cannot be held.

Each action has these editable dropdowns:

  • Keyboard / Mouse Key — choose a key, or Mouse0–Mouse4; None disables this binding.
  • Keyboard Modifier and Keyboard Modifier 2 — optional held keys for a chord.
  • Controller button — choose a D-pad direction, face button, shoulder, trigger or stick press.
  • Controller modifier — optional controller button that must also be held.
  • Mouse wheel — None, Up or Down.

Changes apply immediately. Controller face directions are South = Xbox A / PlayStation Cross, East = B / Circle, West = X / Square, North = Y / Triangle.

Version 1.1.1 uses enum settings because REPOConfig 1.2.7 does not display BepInEx KeyboardShortcut structs. Existing keyboard keys and the first two modifiers seed the new visible settings, while existing controller settings are preserved. The old Keyboard or mouse entry remains only for migration. REPOConfig is optional; the configuration file can also be edited while the game is closed.

  • Both cycle directions skip empty slots and wrap around. With empty hands, cycling starts one occupied slot left or right of the re-equip position; it does not select the remembered item first. For example, if slot 2 is remembered and slots 1–3 are occupied, unarmed Cycle Right draws slot 3 and Cycle Left draws slot 1.
  • Tap Put Away with empty hands to re-equip the last held inventory item, including items selected through normal vanilla/SLR slot keys. Memory follows the item's current slot if it is rearranged. If it was dropped, consumed, removed, locked or is still busy, another unlocked, settled hotbar item becomes the ready target: prefer the old position if occupied, then search right with wrapping. With no prior selection, the first ready occupied slot becomes the target. Unarmed cycling moves one occupied slot beyond this current target in the chosen direction.
  • Tap Put Away to store a compatible held item in the first free unlocked slot, from left to right. First-time world pickups need no prior hotbar assignment; if the grab is still starting, storage waits for it to finish.
  • Hold Put Away to release the held item normally, leaving it out of the hotbar. Stored items in other slots remain untouched. This also releases held objects that cannot be stored.
  • Cycle switching returns the held item to its original slot when possible, waits for storage confirmation, then draws the next item. Repeated presses are queued.
  • A full inventory or a held object that cannot go in inventory leaves the object in hand when tapping or cycling. Only an explicit hold requests a drop.
  • Cycling a single already-held item leaves it held. With empty hands and just one stored item, cycling wraps back to that item.
  • Menus, text entry, spectating, death, focus loss and disabled gameplay input cancel pending actions. A replaced held item or disconnected input device cancels the tap/hold gesture. Normal direct-slot commands remain available and cancel pending cycle commands.

When one of these actions fires, the mod suppresses vanilla/SLR direct-slot handling for that frame to avoid selecting twice on one press. Put Away also suppresses direct-slot handling during its hold and release. Other gameplay actions on the same physical button, such as an ability or item use, should be rebound separately if they conflict. Give Cycle Left and Cycle Right different bindings; assigning both to one button cancels cycling in both directions.

Main item and hotbar display

The mod maintains a ready recall target whenever an unlocked, settled inventory item is available. Dropping or using up the remembered item no longer leaves recall tied to a missing object. This only updates memory; items stay stored until you tap re-equip or cycle. Empty inventories have no ready target, and the game must finish any active inventory transaction before it can safely draw another item.

By default, the displayed slots rotate in circular order to keep the equipped / ready-to-re-equip slot in the middle. Odd slot counts have an exact middle; even counts use the left of the two middle positions. This permutes existing horizontal positions, keeping the native bar width and spacing. Items, slot IDs, key mappings and saves are unchanged. Binding labels travel with their slots, and SLR battery indicators follow the same movement. An equipped item can retain its highlighted origin position while the game shows that inventory spot as empty; a first-time world pickup gets its hotbar position after storage.

The main slot has a thick, bright green outline with a soft glow and contrasting inner edge. It follows native HUD visibility and does not receive mouse/controller input. The overlay stays outside slot templates so SLR upgrades cannot clone it into extra slots.

Configure these under REPOConfig → Inventory Controls → Hotbar:

  • Center main item — enable/disable circular display rotation (default on).
  • Highlight main item — enable/disable the green outline independently (default on).
  • Outline thickness — 1–10 UI units (default 4).
  • Outline padding — 0–12 extra UI units around the slot (default 4).

Visual settings apply immediately. Turning centering off restores native positions. Rendering uses cached slot/battery references; hierarchy scans run when the HUD structure changes. Visual failures disable the presentation for that launch while inventory controls remain available.

Install

Use Import local mod in Thunderstore Mod Manager and select InventoryControls-1.4.0.zip, then restart normally. Alternatively, place InventoryControls.dll under the active profile's BepInEx/plugins.

Replace the earlier SLRInventoryControls package with this one. The plugin keeps the old internal identity so existing bindings survive, and BepInEx selects the newer version rather than running two input handlers. The configuration filename therefore remains BepInEx/config/local.SLRInventoryControls.cfg; the displayed mod name is Inventory Controls.

Only players wanting these controls need to install this mod. Its native inventory requests use the game's existing multiplayer validation. It changes no upgrade counts, saves, prices or network protocol.

Optional compatibility

SLRUpgradePack 0.6.0 is detected through an optional dependency and reflection; it is not a required DLL reference or package dependency. SLR support activates automatically, respects the inventory upgrade's enabled flag, and never exposes slots beyond the purchased count or active inventory objects. No Swap Drop is also optional; storing before drawing avoids its usual swap/drop race. Explicit hold-to-drop uses PhysGrabber.ReleaseObject instead of the RequestUnequip method that No Swap Drop intercepts. KeybindLib is not required.

Validation

Release build: zero warnings/errors. The release has 217 passing checks:

  • 102 production policy/transaction/layout checks: vanilla and optional SLR capacity, occupied-slot wrapping, inventory safety, tap/store/drop behavior, manual selections, ready-target recovery, and circular visual mapping for one through nine slots.
  • 40 production binding/gesture checks: remapping, modifiers, device disconnects, wheel input, migration, item replacement and one drop per hold.
  • 25 production presentation checks against UI fixtures: centering and restoration, 100-frame drift prevention, battery alignment, independent toggles, visibility, cached lookups, SLR slot additions/replacements and actual green-border mesh geometry.
  • 50 installed game/SLR API checks, including native layout offsets and HUD/battery metadata.

Live Unity/controller/multiplayer appearance and behavior still need confirmation after a normal restart. Test with SLR absent for the three normal slots, then with SLR and purchased extra slots; check the native slot labels, batteries and outline at your HUD scale. Source, build script and tests are provided separately. The build script does not install unless -Install is explicitly supplied.

CHANGELOG

1.6.1

  • Set the author to ByteSizeMetal. The package file name now carries it, so mod managers no longer show Unknown.

1.6.0

  • Add Never drop from slot keys, on by default. Number and SLR slot keys now swap items: what you hold goes back to its slot, then the new item comes out.
  • If a swap isn't possible, what you hold stays in your hand. That covers carrying a valuable or having a full inventory.
  • Letting go, holding Put Away, damage and physics still drop items as normal.
  • No Swap Drop is no longer needed for this, but it's safe to leave installed.

1.5.0

  • Fix uneven, touching hotbar slots with SLR's extra inventory slots. The game only listed the first three, so it spaced those and left the rest where SLR put them. All slots and key labels now use one even layout.
  • Add Extra slot spacing (default 8), so key labels clear the green border.
  • Narrow the bar automatically if it would run off screen.

1.4.0

  • Maintain a ready recall target whenever an unlocked, settled hotbar item exists, recovering after drops, consumption, missing items and locked slots. Choosing a fallback updates memory without automatically drawing it.
  • Center the main equipped / recall slot using circular visual order while preserving item ownership, slot IDs, bindings and native bar width/spacing.
  • Add a bright green selection border with glow, configurable thickness and padding, and independent centering/highlight toggles.
  • Keep nested and external SLR battery indicators aligned, restore native offsets before HUD/SLR layout changes, and keep the overlay outside cloned slot templates.
  • Cache HUD references and isolate visual failures from inventory controls.
  • Validate with 102 policy/transaction/layout, 40 binding/gesture, 25 presentation/mesh and 50 installed API checks.

1.3.0

  • Tap Put Away with empty hands to re-equip the last used inventory item.
  • Unarmed cycling starts one occupied slot left or right of that re-equip position, with wrapping and empty-slot skipping.
  • Track actual held inventory items, including normal vanilla/SLR direct-slot selections; failed selection requests do not replace memory.
  • Follow the remembered item when storing or rearranging moves it to another slot; never recall an unrelated replacement item.
  • Preserve selection memory across menu/direct-slot cancellation; clear it when the inventory instance changes.
  • Retain tap-to-store, first-free storage, configurable hold-to-drop and saved bindings.
  • Add 18 recall/relative-cycling checks; 81 policy/transaction checks now pass.

1.2.0

  • Tap Put Away to store the held item in the first free unlocked slot, including first-time world pickups.
  • Wait for an unfinished grab before requesting storage.
  • Hold Put Away to drop the held item once and leave it out of the hotbar; releasing after the drop does nothing.
  • Add configurable Hold to drop seconds (default 0.4 seconds). Existing key/button mappings are preserved; wheel input remains immediate storage.
  • Cancel gestures on item replacement, menu/focus changes and input device disconnects.
  • Use the native grip release for intentional drops, avoiding No Swap Drop's inventory draw interception.
  • Expand validation to 63 policy/transaction, 40 binding/gesture and 40 installed API checks.

1.1.1

  • Expose configurable keyboard/mouse keys and two optional keyboard modifiers as REPOConfig-compatible dropdowns.
  • Preserve per-action controller buttons/modifiers and mouse-wheel choices.
  • Migrate legacy keyboard shortcuts into visible settings.
  • Add 22 production binding checks, including immediate changes and migration.

1.1.0

  • Standalone Inventory Controls: base cycling and Put Away work without SLRUpgradePack.
  • Automatically enable included SLR extra-slot compatibility when SLR is detected.
  • Isolate optional compatibility failures so vanilla controls remain available.
  • Preserve existing input bindings and plugin identity when replacing the SLR-only 1.0.0 build.
  • Add seven standalone/optional-capacity checks; 48 behavior checks now pass.