sense.mp4
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.
- 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
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.
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 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.
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.
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.
The scripts are organized by domain inside scripts/:
scenes/main.tscn— main scene; contains theWorldEnvironment(dark + glow) and points toscripts/main.gdscenes/player.tscn— player (CharacterBody3D+ collision capsule +Headcamera); instantiated bymain.gdscenes/hud.tscn— interface layer (CanvasLayer) with the HUDs; instantiated bymain.gdscripts/main.gd— composition point: generates the level, instantiates player/HUD, creates Abbath and (in test) the harnesses
The declarative composition lives in
.tscnscenes; 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 parameterstablet_manager.gd— counts the tablets, opens/resolves the minigamedoor_manager.gd— resolves opening the door with Eabbath_manager.gd— tracks the creature and centralizes the jumpscarei18n.gd— interface translations (Godot's i18n pattern)
scripts/gameplay/ (3D world entities)
player.gd— FPS controller, wave emission and super-hearing activationlevel.gd— generates the room (floor, ceiling, walls, pillars, boxes) with collisionabbath.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.gd—0 / 5counter on screenrestart_ui.gd— RESTART 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 doortest_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 figurewave_power.png,super_hearing.png,power_bar.png— HUD art (body, alternate pose, bars)
sounds/wave.ogg— the wave's burst when emitted, with range-based attenuation.sounds/walking.ogg— the player's footsteps (with room reverb), on theFootstepsbus.sounds/abbath.ogg— Abbath's continuous 3D sound, on theEnemyFocusbus.
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.
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 "." -- --autotestPositions 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 "." -- --tablettestActivates 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 "." -- --doortestDeterministically 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 "." -- --abbathtestTo 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 "." -- --abbathmodeltestTo 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 "." -- --abbathmodelviewDeterministically 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 "." -- --abbathsoundtestExercises 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 "." -- --hudposetestOpens 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& "path\to\Godot_v4.6.2-stable_win64.exe" --path "."