Skip to content

lebertolini/sense

Repository files navigation

sense.mp4

English Português

Sense

DOWNLOAD — Windows · Linux · macOS

First-person survival horror — stealth, pursuit, and a "sonar" sense in absolute darkness.

Genres: survival horror · stealth · pursuit · sensory exploration

You're trapped in total darkness, unable to see anything. Your only sense is sonar: press Space and a wave radiates out from you across the room; wherever it touches a surface, neon particles appear that reveal the environment for an instant and then fade — the closest ones (hit first) fade fastest. You navigate in flashes, building the map from memory between one pulse and the next. Abbath, a creature that hunts you when you enter its field of view, prowls the darkness; if it gets too close, it's a jumpscare and it's over — hide behind something that covers your body so it loses your trail.

To avoid walking blindly into danger, you can switch (Tab) from sonar to super-hearing: hold Space and you hear Abbath from anywhere, even through walls, tracking where it moves. The catch is that both abilities share the same charge — every wave you emit is hearing you won't have, and vice versa. The goal is to survive, activate the 5 tablets, and find the exit before it catches you.

Controls

  • WASD — move
  • Mouse — look
  • Space — use the selected ability: emit a wave (you can fire several in a row, up to 6 at once) or, with super-hearing selected, hold to hear Abbath
  • Tab — switch between the wave and super-hearing abilities
  • Scroll — in the tablet minigame, adjust the mesh intensity
  • E — open a tablet's minigame (facing it, up close) / cancel the open minigame
  • Ctrl+D — show/hide Abbath's diagnostic panel (with the mouse free; includes a button to enable/disable the creature's jumpscare)
  • Esc — release the mouse

Abilities: wave and super-hearing

Both abilities share a single charge that refills on its own in about 3 seconds. The HUD in the bottom-left corner (hand-drawn art) shows the charge filling the bars and the eyes glowing; Tab switches the HUD pose along with the active ability.

  • Wave (default) — the sonar pulse. Emitting it empties the charge; while it refills, you can't emit again.
  • Super-hearing — with it selected, hold Space to drain the charge and hear Abbath from anywhere on the map, even through walls. While active, footsteps and the wave are muffled to make its sound stand out.

Without super-hearing you only hear Abbath when it's in front of you with a clear line of sight; behind you or blocked by a wall, the sound disappears.

The tablet challenge

There are 5 tablets (flat rectangles) scattered across the map — stuck to boxes, pillars, or the floor. In the dark they're invisible; when the wave passes over one, it glows neon yellow. Facing it and pressing E opens the synchronization minigame: a rippling mesh (neon green) that you shape with the scroll to match the shape of the white target ring, which pulses and constantly changes form. Once it fits within tolerance, a progress arc fills; you must hold the fit for the required time. There are 3 stages (rings), each with a longer wait. Completing all three, the tablet turns to the particles' green and stays lit permanently. Moving away or looking away (or pressing E) cancels the minigame. A 0 / 5 counter at the top of the screen goes up with each activated tablet.

Abbath, the creature

Abbath prowls the map: a tall, thin humanoid figure. In the dark it's invisible like everything else, but unlike other objects, when the wave passes over it only the edge (the silhouette/outline) is marked — never the center, leaving just an outlined figure. Its eyes have a faint constant glow (stronger when it's hunting), the only visual warning of its presence.

Abbath also emits a continuous sound (3D audio attached to it). Without super-hearing, you only hear it when it's in front of you with no wall in the line of sight, and the volume grows as it approaches (audible up to ~30 units, full volume from ~5). With super-hearing active, you hear it from any direction and through walls — the way to track it in the dark.

Behavior:

  • Teleports to a random point on the map every 5 seconds.
  • If you enter its field of view (frontal cone), within range and in sight, it starts hunting: with each teleport it jumps closer to you and the interval between teleports shrinks in proportion to the distance (the closer it is, the faster). This only happens while you're in the cone.
  • If it gets too close, you take a jumpscare and the RESTART interface appears.
  • To shake it off, hide behind something that covers at least 60% of your body from its field of view: it loses the target and returns to a random spawn.

The exit

When you activate the 5 tablets, the counter changes to "FIND THE EXIT" and a door (a bit larger than the character) appears on some wall. In the dark it's invisible; when the wave hits it, the whole surface glows and from then on only the frame stays lit (the door's "sample"). Getting close and pressing E while facing it, the core lights up neon green and the RESTART interface appears, which restarts the game from scratch when clicked.

Languages (i18n)

The interface texts (FIND THE EXIT, RESTART) use Godot's internationalization pattern via keys (tr("FIND_THE_EXIT"), tr("RESTART")). The translations live in scripts/managers/i18n.gd (pt_BR, en, es) and the language is chosen by the system locale. To add a language, just add the texts for the same keys for the new locale in i18n.gd.

Structure

The scripts are organized by domain inside scripts/:

  • scenes/main.tscn — main scene; contains the WorldEnvironment (dark + glow) and points to scripts/main.gd
  • scenes/player.tscn — player (CharacterBody3D + collision capsule + Head camera); instantiated by main.gd
  • scenes/hud.tscn — interface layer (CanvasLayer) with the HUDs; instantiated by main.gd
  • scripts/main.gd — composition point: generates the level, instantiates player/HUD, creates Abbath and (in test) the harnesses

The declarative composition lives in .tscn scenes; what's procedural — the room generation (level.gd) and Abbath's body assembled from the .glb (abbath.gd) — stays in code, since it's generated at runtime.

scripts/managers/ (autoloads — global state and coordination)

  • wave_manager.gd — waves, the abilities' shared charge, super-hearing, and global shader parameters
  • tablet_manager.gd — counts the tablets, opens/resolves the minigame
  • door_manager.gd — resolves opening the door with E
  • abbath_manager.gd — tracks the creature and centralizes the jumpscare
  • i18n.gd — interface translations (Godot's i18n pattern)

scripts/gameplay/ (3D world entities)

  • player.gd — FPS controller, wave emission and super-hearing activation
  • level.gd — generates the room (floor, ceiling, walls, pillars, boxes) with collision
  • abbath.gd — the Abbath creature (silhouette on the wave, teleport, cone vision, 3D audio, jumpscare)
  • tablet.gd — a challenge tablet (reveals yellow / activates green)
  • door.gd — exit door (frame on the wave / green core when opened)

scripts/ui/ (interface on CanvasLayer)

  • wave_cooldown_hud.gd — wave HUD (PNG art, bars that fill with the charge, eye glow, pose per ability)
  • tablet_minigame_ui.gd — synchronization minigame (scroll mesh vs target ring)
  • tablet_counter_hud.gd0 / 5 counter on screen
  • restart_ui.gdRESTART interface (reloads the game)
  • debug_hud.gd — Abbath's diagnostic panel (Ctrl+D)

scripts/test/ (harnesses triggered by a command-line flag)

  • test_capture.gd — waves · test_tablets.gd — tablet challenge · test_doors.gd — exit door
  • test_abbath.gd — creature · test_abbath_sound.gd — 3D audio (cone, occlusion, super-hearing)
  • test_hud_pose.gd — HUD poses · test_debug_hud.gd — diagnostic panel

assets/

  • shaders/sonar.gdshader — sonar material (neon dots + wavefront + fade)
  • shaders/tablet.gdshader — tablets' material (yellow on the wave, green when activated)
  • shaders/door.gdshader — door material (persistent frame + green core)
  • shaders/abbath.gdshader — creature material (marks only the edge/silhouette)
  • abbath.glb — 3D model used to assemble the figure
  • wave_power.png, super_hearing.png, power_bar.png — HUD art (body, alternate pose, bars)

Sound

  • sounds/wave.ogg — the wave's burst when emitted, with range-based attenuation.
  • sounds/walking.ogg — the player's footsteps (with room reverb), on the Footsteps bus.
  • sounds/abbath.ogg — Abbath's continuous 3D sound, on the EnemyFocus bus.

With super-hearing active, the WaveManager muffles the footsteps and wave buses so Abbath's sound stands out.

The wave parameters (speed, life, range) live in WaveManager and in the [shader_globals] block of project.godot.

Test visually (without playing manually)

Runs the game, emits a wave automatically, and saves screenshots at various moments in test_output/, then closes on its own:

& "path\to\Godot_v4.6.2-stable_win64.exe" --path "." -- --autotest

Test the tablet challenge

Positions the player in front of some tablets, emits the wave (yellow glow), activates each one through the real path (turns green, counter goes up) and saves screenshots in test_output/ — including a tablet lit alone in the dark:

& "path\to\Godot_v4.6.2-stable_win64.exe" --path "." -- --tablettest

Test the exit

Activates the 5 tablets (the counter changes to "FIND THE EXIT" and the door appears on a wall), reveals the door with a wave (only the frame remains), opens it with E (green core) and confirms the RESTART interface. Saves screenshots in test_output/:

& "path\to\Godot_v4.6.2-stable_win64.exe" --path "." -- --doortest

Test the Abbath creature

Deterministically validates all the creature's mechanics: marks only the silhouette when the wave passes, cone vision, hiding ≥60% of the body to lose it, teleport interval proportional to proximity, and the jumpscare on getting close. Prints PASS/FAIL for each check and saves screenshots in test_output/:

& "path\to\Godot_v4.6.2-stable_win64.exe" --path "." -- --abbathtest

To test only Abbath's modeling/silhouette without building the map or running the game mechanics, use the isolated preview. It saves front, side, and 3/4 views in test_output/:

& "path\to\Godot_v4.6.2-stable_win64.exe" --path "." -- --abbathmodeltest

To open the isolated modeling in a window and look at Abbath outside gameplay (no map, HUD, wave, or jumpscare), use:

& "path\to\Godot_v4.6.2-stable_win64.exe" --path "." -- --abbathmodelview

Test Abbath's 3D audio

Deterministically validates the creature's continuous sound: it exists and loops, grows with proximity, is only audible in the frontal cone with a clear line of sight, disappears when occluded by a wall, and becomes audible again from any direction (including through walls) with super-hearing active. Prints PASS/FAIL:

& "path\to\Godot_v4.6.2-stable_win64.exe" --path "." -- --abbathsoundtest

Test the wave HUD

Exercises the HUD poses (wave vs super-hearing), the bars filling according to the charge, and the eye glow, saving screenshots in test_output/:

& "path\to\Godot_v4.6.2-stable_win64.exe" --path "." -- --hudposetest

Test the diagnostic panel

Opens Abbath's diagnostic panel (Ctrl+D) and validates the displayed fields, saving screenshots in test_output/:

& "path\to\Godot_v4.6.2-stable_win64.exe" --path "." -- --debughudtest

Run normally

& "path\to\Godot_v4.6.2-stable_win64.exe" --path "."

About

A first-person survival horror game set in total darkness, where your only sense is sonar.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Packages

 
 
 

Contributors