Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/ASTRA228b/Experimental/llms.txt

Use this file to discover all available pages before exploring further.

Experimental’s input system is split into two layers. InputLib reads raw hardware state from Gorilla Tag’s existing controller pollers and SteamVR actions, exposing clean boolean and Vector2 properties. InputSelectors sits on top of that, letting each mod pick which physical button it wants to use at runtime via an index the player selects in the UI.

Layer 1 — InputLib (Raw Hardware)

InputLib is a static class whose properties wrap the lowest-level controller queries available in Gorilla Tag. Every property evaluates live — there is no caching — so reading the same property twice in one frame always reflects the same physical state.

Grip

PropertyTypeSource
RightGrabboolrightControllerGripFloat > 0.5f
LeftGrabboolleftControllerGripFloat > 0.5f
Grip is analog at the hardware level; the 0.5 threshold converts it to a digital press.

Trigger

PropertyTypeSource
RightTriggerboolrightControllerTriggerButton
LeftTriggerboolleftControllerTriggerButton
These use the game’s built-in digital trigger button rather than an analog float.

Face Buttons

PropertyTypeMaps To
RightControllerAButtonboolrightControllerPrimaryButton
RightControllerBButtonboolrightControllerSecondaryButton
LeftControllerYButtonboolleftControllerSecondaryButton
LeftControllerXButtonboolleftControllerPrimaryButton
On HTC Vive wands, there is only a single face button per controller. That button registers as both the primary and secondary input simultaneously, meaning both A+B (right) or both X+Y (left) report true when the Vive button is pressed.

Joystick Clicks

PropertyTypeSteamVR Action
RightJoystickClickboolgorillaTag_RightJoystickClick.state
LeftJoystickClickboolgorillaTag_LeftJoystickClick.state

Joystick Axes

PropertyTypeSteamVR Action
RightJoyStickAxisVector2gorillaTag_RightJoystick2DAxis.axis
LeftJoyStickAxisVector2gorillaTag_LeftJoystick2DAxis.axis
Vector2.x is the horizontal axis and Vector2.y is the vertical axis, with values in the range −1 to 1.

Layer 2 — InputSelectors (Per-Mod Mapping)

InputSelectors is a static class that exposes one index property and one pressed property (or axis property) per mod. The index is set by the player in the mod’s UI dropdown; the pressed/axis property evaluates the corresponding InputLib entry at runtime. Each mod maintains its own isolated binding so two mods can safely use different buttons at the same time.

Boolean Input Selectors

The following mods use a bool pressed signal. Unless noted otherwise, they share the same 10-option list:
10-option list (index 0–9): Right Grab, Left Grab, Right Trigger, Left Trigger, RightJoyStick (Hold), LeftJoyStick (Hold), A Button, B Button, X Button, Y Button
PropertyTypePurpose
PSelectedIndexintActive binding index (0–9)
PPressedbooltrue when the selected button is held
Set PSelectedIndex from the UI dropdown; read PPressed each FixedUpdate to trigger pull behavior.
PropertyTypePurpose
VSelectedIndexintActive binding index (0–9)
VPressedbooltrue when the selected button is held
Same 10-option list as PullMod. Controls when the velocity cap is actively enforced.
Uses a 4-option combo list — two buttons must be held simultaneously:
IndexCombo
0Left Trigger & Right Trigger
1Left Grab & Right Grab
2Left Joystick Click & Right Joystick Click
3Left Buttons (X or Y) & Right Buttons (A or B)
PropertyTypePurpose
UseWalkIndexintActive combo index (0–3)
UseWalkPressedbooltrue when both buttons in the combo are held
4-option list for the left-hand activation button:
IndexButton
0X Button
1Y Button
2Left Grab
3Left Trigger
PropertyTypePurpose
ATLSelectedIndexintActive binding index (0–3)
ATLPressedbooltrue when the selected left-hand button is held
4-option list for the right-hand activation button:
IndexButton
0A Button
1B Button
2Right Grab
3Right Trigger
PropertyTypePurpose
ATRSelectedIndexintActive binding index (0–3)
ATRPressedbooltrue when the selected right-hand button is held
Same 10-option list as PullMod.
PropertyTypePurpose
PitGSelectedIndexintActive binding index (0–9)
PitPressedbooltrue when the selected button is held

Axis Input Selector

PSA needs a Vector2 axis rather than a button press.
IndexSource
0Right Joystick (RightJoyStickAxis)
1Left Joystick (LeftJoyStickAxis)
PropertyTypePurpose
SelectedIndexintActive axis index (0–1)
AxisVector2Current joystick axis value from the selected side

Reading Input in Practice

// In a FixedUpdate method — check if PullMod's configured button is held
if (InputSelectors.PPressed)
{
    // apply pull force
}

// Read the PSA joystick axis directly
Vector2 moveInput = InputSelectors.Axis;

// Read a raw InputLib value without going through InputSelectors
if (InputLib.RightGrab && InputLib.LeftGrab)
{
    // both grips held
}
Prefer InputSelectors over direct InputLib calls inside mod logic. Using the selector means the player can rebind the action from the UI without requiring a code change.

Build docs developers (and LLMs) love