Traveling

SETTINGS

Render at lower resolution and upscale. Significant performance boost at cost of visual sharpness.

Caps maximum framerate — it can only lower the rate, never raise it. Your display's refresh rate is the real ceiling, so a value at or above it (e.g. 120 or 144 on a 60Hz screen) has no effect and behaves the same as your refresh rate. Use a lower value to save power and reduce performance spikes.

Hardware multisampled edges at native resolution. Off recovers GPU headroom at the cost of aliasing on silhouettes; sub-native render resolutions never multisample either way. Takes effect after the next reload.

Disables emissive glow, transparency, additive blending, and special fish shaders.

Off disables all shadows, the baked ones included. Simple gives each fish a soft gradient oval that follows its body, height and turns, at a fraction of the cost. Complex casts each fish's real shadow onto the seafloor and the structures.

How carefully overlapping simple shadows resolve: Low, Medium and High run 2, 4 or 6 passes.

Swimming text only — the INKAP letters and swimming words, yours included; fish and everything else are unaffected. Low replaces the travelling ripple along each letter with a single flat flap (no turn sweep, no pulse), gives every letter you don't steer yourself simpler propulsion, and builds every dot from a coarser sphere. The coarser dots apply on the next reload; flipping this during play respawns the roaming letters and words.

Sky cloud rendering. Simple drops the layered, self-shaded cloud detail to plain billows; Off clears the sky (storms still darken it).

Fancy bends the view through a portal in travelling rings, at a cost while a portal is on screen. Basic shows the plain colour ripple and costs nothing.

Wave-driven light patterns on the seafloor.

Underwater sun shafts cast by the waves. Off removes the effect and its cost entirely.

Fish-shaped ripple imprints and wakes on the water surface. Off removes the effect and its cost entirely.

Simple: Straight wave crests, no physics/visual mismatch. Complex: Organic warped crests. Mostly aesthetic, minimal performance impact.

Maximum splash particle pool size. Higher values support more simultaneous fish splashes.

Blood particles from combat hits and fish deaths.

Ambient Life

Jellyfish

NPC Fish LoD

Distance-based level of detail and culling for NPC fish. Past detail distance, fish drop their dorsal + pectoral fins (4→2 draw calls); past cull distance, fish are fully hidden. Disable to render all fish at full detail. (Body kink-smoothing and the body animation's tick rate are distance-gated independently of this toggle — neither has a visible tier.)

Detail Distance

Distance from camera where NPC fish switch to simplified models (solid color, no tail).

Cull Distance

Distance from camera where NPC fish are hidden entirely. Reduces draw calls for distant fish.

Off (default): Maintains real-time speed during frame drops. On: Slows simulation when frames drop below target — intended as a last-resort accessibility option for severely low-end hardware, or for experiencing the game in slow motion.

Choose the sea to play in. Inkquarium is the hub and the Shallows beyond its portal; Dunes is a far larger open sea of rolling sand. Switching reloads the page.

Hold: Release to close. Toggle: Press again to close.

Hold: Release to close. Toggle: Press again to close.

Closing the wheel with its button while a wedge is hovered toggles that wedge — on release in Hold mode, on the closing press in Toggle mode.

Click a wedge to toggle its state and close the wheel.


Always shows health on every change. Quaternary shows at 25% intervals.

How a sonar sweep marks an enemy it found beyond the screen edge. A (Arrowhead) shows just the pointer. A/R (Arrowhead + Ring) draws the reveal ring around it too.

Camera Smoothness

How smoothly the camera follows the player. 0.2 = default, 0.1 = minimum (near-instant), 1.5 = extra smooth. Affects camera position, tilt, and mode transitions.

Field of View

Camera field of view in degrees. 50 = default. Lower = zoomed in, higher = wider perspective.

Camera Offset X

Slides the camera sideways so your character sits off-center on screen. Negative = character left of center, positive = right. 0 = centered (default).

Camera Offset Y

Slides the camera vertically so your character sits above or below screen center. Negative = character lower, positive = higher. 0 = centered. Default: -50.

Controls automatic camera repositioning in free-cam mode. "On When Moving" only counts timer while swimming (current behavior).
Idle Camera (Seconds)
When enabled, WASD and gamepad left stick move relative to camera view direction (strafing). When disabled, WASD and gamepad left stick use fish-relative controls.
When enabled with Horizontal Directionality, camera pitch affects vertical movement for WASD and gamepad left stick (6DOF flight). When disabled, movement stays horizontal regardless of camera pitch.
Lock-On Target Switch Sensitivity

(Mouse, Touch & Gamepad) How much input is needed to switch lock-on targets. Lower = more sensitive (easier to switch), Higher = less sensitive.

Lock-On Camera Elevation

While locked on, raises the camera so your character sits below screen center while the locked target stays centered. 0 = off, leaving the framing to Camera Offset Y. Default: 0.

Color of the small dot marking your locked-on target. White stays readable over any enemy color; Cyan matches the rest of the HUD. Default: White.

Show the dot marking your locked-on target. Off hides it completely and overrides everything, including the Show/Hide UI toggle. Lock-on itself keeps working. Default: On.

Color of the thin ring marking what your next attack would hit. White and Cyan match the reticle colors; Red is the original hostile-tinted look. Default: White.

Show the thin ring marking what your next attack would hit. Off hides it completely and overrides everything, including the Show/Hide UI toggle. Default: On.

Mouse Sensitivity (Horizontal)

Horizontal mouse turning and camera sensitivity (0.001 = very slow, 0.003 = default, 0.009 = very fast).

Mouse Sensitivity (Vertical)

Vertical mouse camera sensitivity (0.001 = very slow, 0.003 = default, 0.009 = very fast).

Horizontal Directionality Only: Applies to all joystick input types (touch, gamepad). Orthogonal (default): left joystick uses discrete 4-direction control. Omnidirectional: left joystick uses 360° analog precision for smooth directional control at any angle.
Forward Zone Angle

Orthogonal Stick Mode (Touch & Gamepad): Angle (degrees) from straight forward before turn input triggers (5-30°). Higher values create a wider "go straight" zone in discrete stick mode. Applies whenever the left joystick uses discrete 4-direction control — Free-Camera Left Joystick Mode set to Orthogonal, or on gamepad when Horizontal Directionality is disabled.

(Touch & Gamepad) When enabled, the camera joystick's vertical axis controls rise/dive while locked-on to an enemy, with horizontal input still switching targets. The vertical zone is ±22.5° minimum, expanding based on target switch sensitivity. Needs a stick to read a held direction from, so it applies to the gamepad and to the touch Camera Joystick — not to swipe-to-look, where a horizontal flick switches targets instead.

Left Stick Deadzone

Deadzone percentage for the gamepad's left stick (15-50%). Higher values require more stick movement before input is registered.

Right Stick Deadzone

Deadzone percentage for the gamepad's right stick (15-50%). Higher values require more stick movement before input is registered.

Controller Joystick Vertical Ramp

Linear: Direct 1:1 mapping. Exponential: Squared/Cubic response curve for finer control at small movements.

Controller Exponential Ramp Curve

Controls how aggressive the exponential ramp is for gamepad joysticks and triggers. Squared (x²): Default. Cubic (x³): Finer control at low inputs.

Left Trigger Direction

Direction controlled by left trigger (LT).

Left Trigger Mode

Off: Disabled. Binary: Full on/off. Ramp: Analog pressure-sensitive.

Right Trigger Direction

Direction controlled by right trigger (RT).

Right Trigger Mode

Off: Disabled. Binary: Full on/off. Ramp: Analog pressure-sensitive.

D-pad Up

Assign an action to each D-pad button for play mode. Assigned wheels, attacks, dodges, heals and skills behave exactly like their fixed bindings.

D-pad Down
D-pad Left
D-pad Right

(Touch) Joysticks: fixed movement joystick and rise/dive knob (or camera joystick) in the bottom corners. Floating Zones: touch anywhere in the bottom-left area to move — a thumb knob appears under your finger — and the bottom-right area to rise/dive. Swiping open water moves the camera under either layout; Floating Zones simply has no room for the optional camera joystick. Nothing is shown until you touch.

Zone Notch Width
Zone Notch Depth

(Touch) Floating Zones only: cuts each zone's inner-top corner diagonally, freeing a triangular notch of open water at the bottom-centre — swipe to look, tap to attack there. Width is the notch mouth at the top of the zone band as a percentage of screen width; Depth is how far it dips toward the bottom edge as a percentage of the band height. 0 on either = uncut rectangular zones; 100/100 = the zones become triangles meeting at a point. The zones tint briefly while adjusting.

Zone Visibility Opacity
Zone Glow Size
Zone Glow Duration

(Touch) Floating Zones only: makes the invisible capture zones visible. On Touch: a landing near a zone's open-water edge briefly glows the edge around your finger. Near Edge: the glow follows your finger whenever it strays near the edge mid-drag — past it, the glow parks where you crossed — and a touch that just misses a zone lights the edge it missed. Always: both zones stay tinted full-time. Opacity sets the tint strength for every mode; Glow Size is the reveal glow's radius in pixels; Glow Duration (ms) is how long a landing or near-miss glow holds before fading — lifting the finger fades it early, so high values mean the glow simply remains while held.

(Touch, play mode) Drag the wheel buttons, lock-on button, heal/skill edge buttons — and in the Joysticks layout the sticks themselves — anywhere on screen. Elements that overlap are highlighted red while editing; overlaps are allowed, just not recommended. Each Touch Layout keeps its own arrangement, and anything you haven't moved keeps following its classic solved position (including the Button Position choice). Reset returns the current layout's elements to those defaults.

Utility Skill Lock-On

Arrangement of the two wheel buttons and the lock-on button relative to the joysticks. Edges: the wheels split apart — each sits above the surface in its own bottom corner (joystick, rise/dive knob, or the corner itself under Floating Zones) — with the lock-on button on its own at screen centre. The tags above show which of the three buttons follow the arrangement and which sit at custom spots from the HUD layout editor (this layout only). Choosing an arrangement — or tapping RE-APPLY — returns all three to it; everything else keeps its custom spot.

(Touch) Adds a right-hand joystick for the camera. Swiping open water always moves the camera, with or without it — the joystick is a second surface, not a replacement. A finger that stays put is still an attack tap; one that travels becomes a camera swipe. While locked on, the joystick takes over target switching and swipes stop changing target. Unavailable with Floating Zones, which has no room for it.

Right Joystick Scale

Adjust the size of the right joystick. 1.0 = default size. For other UI elements, see HUD Scale in the Accessibility tab.

Right Joystick Resistance

Simulates physical joystick spring resistance near the edge (0-100%). At 0% (off), finger-to-knob movement is 1:1. Higher values require more finger travel to reach maximum position, mimicking analog stick resistance.

Right Joystick Deadzone

(Touch) Deadzone percentage for the camera joystick (15-50%). Higher values require more stick movement before input is registered. Requires the Camera Joystick.

(Touch) How the Camera Joystick's vertical axis is read: Binary snaps to full strength once past the deadzone; Ramp scales smoothly with distance from centre. Affects photo-mode camera pitch. Requires the Camera Joystick.

Swipe Sensitivity

(Touch) How far the camera turns per pixel of swipe (0.001 = very slow, 0.005 = default, 0.012 = very fast). Applies to both axes.

Vertical Knob Scale
Vertical Knob Deadzone

(Touch) The rise/dive pill that takes the bottom-right corner whenever the camera joystick is off. Scale sizes the pill (1.0 = default). Deadzone is the dead band around the centre detent (6% by default — deliberately smaller than a joystick's, since nothing rests on the knob). Requires the Camera Joystick to be off.

Left Joystick Scale

Adjust the size of the left joystick. 1.0 = default size. For other UI elements, see HUD Scale in the Accessibility tab.

Left Joystick Deadzone

(Touch) Deadzone percentage for the movement joystick (15-50%). Higher values require more stick movement before input is registered. Applies to the fixed stick and the floating-zone stick alike.

Touch Joystick Vertical Ramp

Linear: Direct 1:1 mapping. Exponential: Squared/Cubic response curve for finer control at small movements.

Touch Exponential Ramp Curve

Controls how aggressive the exponential ramp is for touch joysticks. Squared (x²): Default. Cubic (x³): Finer control at low inputs.

Double-Tap Timing

Maximum time window (in milliseconds) between taps to register as a double-tap. Lower values require faster taps.

When off, use two-finger tap to heal manually. When on, automatically heals from school fish based on health: every 10s above 50%, every 5s at 25-50%, every 3s below 25%.

How to trigger manual healing. Edge Button: the + button above the left joystick. Tap Health Bar: hides the edge button — you instead tap the health bar at top left to heal.

How to activate equipped skill. Edge Button: the button above the right-hand touch surface (the camera joystick, or the rise/dive knob). Tap Stamina Bar: hides the edge button — you instead tap the stamina bar at top left to activate.

Master Volume
Background Music

Show coordinates, speed, and depth display.

Show camera zoom buttons in the top right.

Show numerical health values on the health bar.

Show numerical stamina values on the stamina bar.

Show hints panel during play mode.

Show hints panel during edit mode.

Select First: sliders and dropdowns must be selected (Space/Enter or gamepad A) before adjusting. Instant: adjust immediately with A/D or D-pad Left/Right as soon as an option is focused.

Adjust the size of HUD UI elements in-game. For on-screen joysticks, see the Touch section in the Controls tab.

Adjust the size of the Editor customization panel separately from HUD elements.

Makes health and stamina bars larger with bolder colors and thicker outlines.

Switch between normal and condensed tab bar to fit more tabs on screen.

Death Settings

Death Timer

How long to wait before respawning after death (seconds).

Enemies

Normal: the enemy fish pays for every bite and dodge from the same 100-point stamina pool you have, and backs off to catch its breath when it runs dry. Unfair: it attacks without limit (the original behavior).

Show or hide the Trailblaze skill in the skill wheel. (Dev testing)

Show or hide the Player Type dropdown in the Editor panel.

Hold: Hold stamina bar to record path. Toggle: Tap to start recording, tap again to stop.

Show target positions for swimming letters and words as colored dots.

Show the performance monitor button in the top-right corner. This controls the button only — the monitor itself is always loaded, so Ctrl+` opens and closes it at any time whether the button is shown or not. The overlay displays live FPS with rolling average, min and max, frame time, a history graph, and recording with JSON/CSV export.

Show the number of fish currently in your school in the navigation panel.

Show countdown timer to the next swells weather roll in the conditions display.

(Play mode) Hold X and scroll the mouse wheel to adjust the slow-motion speed live — scroll up is faster, scroll down is slower. The slider below follows and the value is saved. While this is on, tapping X toggles slow-motion on release instead of on press, so a hold-and-scroll never flips it.

(Play mode) Press K to detach the camera and fly it freely while the world keeps running — WASD moves, Space/Shift rise and dive, mouse looks, scroll wheel sets fly speed. Your fish idles where you left it and enemies ignore it. Press K again (or Esc) to return. In photo mode, K detaches the camera without needing this toggle.

(Any map) Flattens the sea to a still plane — waves go to zero for physics and visuals alike (every system reads the same flat field), while surface ripples, wakes and splashes keep working on it. Storm swells hold off while this is on. Turn it off to get the current waves back.

(Dunes, play mode) The sun rises in the west and sets in the east over a 20-minute day and night, and the moon follows it along the same arc. Fish shadows swing and lengthen with the light and fade out at the horizon, the lit sides of the dunes follow the sun, and the sea, the seafloor and the open water's colour dim to a night level. Off is the game exactly as before. Console: tuneDayCycle().

(Prototype) Wild letter clouds live captive in the Shallows drone zones. Kill a cloud's captor to free it: it forms into its letter, swims to the portal and waits there for you. Going through the portal takes every rescue with you; the letter then swims in Inkquarium Hub. While this is on, Inkquarium Hub only shows the text you have rescued. Flips live in both maps.

Slow-Motion Speed (X key)

Speed multiplier applied when slow-motion is toggled on with the X key. 0.25× = quarter speed; lower is slower. Lets you observe the simulation in slow motion without holding a radial menu open.

Drone Respawn Time

Minutes a destroyed drone stays dead before returning to its patrol zone. The countdown only advances while you are actually playing: it stops in the editor, in the pause menu, in photo mode, on the start screen, and while the game is closed. Time spent in another map still counts, and slow-motion does not stretch it. Applies immediately to drones already waiting.

(Play mode) Cancel every drone's remaining respawn wait right now, in all maps. Drones in the map you are in return straight to their patrol zones; drones in other maps are waiting for you when you arrive. Takes effect immediately, even while paused.

(Play mode) The above, plus every dead NPC fish. Fish in the map you are in swim back through the portal together; fish in other maps reappear scattered across their roam bounds. Dead recruits return wild — you will need to recruit them again. The enemy fish is left alone deliberately: it is knocked out rather than dead, and picks itself back up after about 10 seconds.

(Play mode) Save where you are standing and looking right now — map, position, facing, camera angle and zoom — as the benchmark vantage: a fixed recording spot for performance comparisons. Setting again overwrites it. Survives reloads.

(Play mode) Return exactly to the saved vantage, so recordings taken days apart share the identical view. Works while paused. If the vantage is in another map you travel there like a portal — a recruited school stays behind. Waves still re-roll on every play entry; the vantage pins where you stand and look, not the water.

(Play mode, needs a saved vantage in this map) The fixed scenario as one press: go to the vantage, settle, measure 30 s calm, spawn the Dummy Drone, wait for it to engage, measure 60 s of fight, put it away — three times over. Press it, then resume: it starts on the first unpaused frame. Don't touch the mouse or keys until the button says DONE; keep the browser window on top and the console undocked, or the report will say so. The report prints to the console with every frame attributed (flare lit vs dark, freezes with the compile tell, the held-fixed conditions) and lands in localStorage 'benchmark-last'. Console: tuneBenchmark({repeats, calmSeconds, fightSeconds}); pressing again mid-run cancels.

(Play mode) Press 9 to record per-frame fish orientation data — position, velocity, heading, ring ups, bank, camera — for diagnosing visual bugs from a real reproduction. Press 9 again (or hit the 90s cap) to stop and download the JSON. While this is on, the recorder owns the 9 key; while off, the key is free.

(Play mode) Press 1 to spawn a static practice target in front of you — targetable by every attack, invulnerable, immovable, never aggros anything. Press 1 again to put it away. While this is on, the dummy owns the 1 key; while off, the key is free. Turning this off puts a spawned dummy away.

(Play mode) Press 2 to spawn a full-AI practice drone ahead of you — it chases, shoots, lunges and takes hits like a real drone, but refills instead of dying. Press 2 again to put it away. Only works in maps that run the drone system (the Shallows today). While this is on, the drone owns the 2 key; while off, the key is free. Turning this off puts a spawned drone away.

Top-left HUD overlay with rolling 60-frame averages and session-max ms per system bracket (map, underwater, swimText, npcFish, render, total, interval).

Capture per-frame physics + camera state into a 600-sample circular buffer (~10s @ 60fps). Inspect via console: window.__trajectoryDump() / window.__trajectoryClear().

INFO

Keyboard/Mouse - Gameplay

W Forward S Backward
A Left D Right
Space Rise Shift Dive
+- Zoom
E Skill Wheel Q Utility Wheel
F Activate Skill G Toggle Schooling
R Heal (While Schooling)
U Toggle UI P Photo Mode
Mouse: Look Around
ESC Pause / Settings Menu


Keyboard/Mouse - Menu / Editor

WS Navigate Options
QE Switch Tabs
AD Adjust Sliders
Space / Enter Select / Toggle
ESC Back / Close Menu


Gamepad - Gameplay

Left Stick Move
Right Stick Look Around
LTRT See Controls Settings
RB Skill Wheel LB Utility Wheel
A Activate Skill / Select (Wheels)
X Attack B Dodge
Y Toggle Schooling
D-pad Assignable (See Controls Settings)
R3 Toggle Lock-On
Start Pause / Settings Menu


Gamepad - Menu / Editor

D-pad UpDown Navigate Options
D-pad LeftRight Adjust Sliders
LBRB Switch Tabs
A Select / Toggle
B Back / Close Menu
X Settings Menu: Toggle Number Edit Mode


Touch - UI / Joysticks

Left Joystick Move Forward/Backward
Right Joystick Yaw + Rise/Dive
Double-Tap Left Toggle Lock-On
Double-Tap Right Dodge / Charge Dodge (Hold + Release)
Health Bar Manual Heal
Stamina Bar Activate Equipped Skill
Compass Toggle Schooling
Wheel Button Open Skill/Utility Wheel


Touch - Gestures

Tap Screen Bite / Charge Bite (Hold + Release)
2-Finger Pinch Camera Zoom
5 Fingers Photo Mode
6 Fingers Toggle UI Visibility

Controls

Full control bindings for keyboard, gamepad, and touch devices can be found in the Bindings tab to the left in the above tab bar.


Welcome

Explore the underwater world as a customizable fish. Swim through the ocean, recruit a school of followers, and discover the mysteries of the deep.


Schooling

Toggle your schooling ability to recruit nearby NPC fish. When active, they will follow you in formation. Your school can help you in various ways.


Healing

While schooling is active, heal yourself by drawing health from your recruited fish. Use the Utility Wheel to switch between Siphon mode (protects fish) and Drain mode (can kill fish).


Skills

Open the Skill Wheel to select abilities. Activate your equipped skill using the designated button or by tapping the stamina bar.


The Portal

Discover and swim through the ancient portal to unlock new abilities and progress your journey.

100 / 100
100 / 100
0 / 0
0, 0, 0
0.0
School: 0
Conditions: Nominal

Editor

Edit mode hints will appear here.

Play mode hints will appear here.

INKAP • Living Dot Matrix
Swimming through the Ocean
12m
HUD LAYOUT
Move mouse to select

Are you sure?