Vesper - a Three.js adventure where light is health, ammunition, and currency

Play in your browser: https://vesper.mansgullberg.chatgpt.site/

Vesper - The Last Light is a free third-person adventure through drowned ruins, celestial machinery and a hollow star. Light is health, ammunition and spending power: a beam shot or jump draws from the same reserve that keeps the player alive. The three chapters are The Flooded Gate, The Tidal Observatory and The Hollow Sun.

The world pairs cold stone and water with warm lamps, pink blossoms and visible moving mechanisms. The aim is for light to matter both as a material in the scene and as a decision the player makes. Progress is saved locally in the browser.

A few implementation details

  • Shared puddle reflections. Wet floor pieces are merged into geometry using one live planar Reflector. Animated normal detail distorts the reflected scene; the sea has a separate reflection surface. This gives the puddles a common reflection plane, with the tradeoff that it is a planar solution rather than reflections for arbitrary curved surfaces.
  • One set of transforms per rendered frame. After animation, the scene updates its world matrices once. The main, reflection and ambient-occlusion passes reuse those transforms while automatic scene updates are temporarily disabled. A finally block restores the previous policy. The important constraint is that render callbacks may change visibility, but must not change object poses after that update.
  • A fixed 60 Hz simulation. Gameplay steps use an accumulator independently of rendering. Jump and melee presses are consumed only on the first simulation step for a rendered input sample, so an edge-triggered action is not repeated by catch-up steps. This is a simulation rate, not a claimed rendering benchmark.

The stack is plain Three.js/WebGL 2, Rapier, TypeScript and Vite. Codex substantially assisted implementation, debugging and testing, and the asset pipeline includes generated, procedural and licensed assets. I used GPT-6 Astra in Codex. AI was used during creation; there are no live model calls during gameplay.

Trying it

Desktop with hardware acceleration is recommended. WASD moves, mouse aims, left click fires, Space jumps, Q changes light mode, E interacts, F uses melee and Escape opens the pause menu and field guide. Touch controls exist, but physical-phone performance has not been established.

The attached images come from the current game; the hero is an in-game photo-mode still.

Feedback question: in the opening area, do the reflections and warm lights make the usable route clear, or do they compete with the interaction cues?


5 Likes

Looks like a solid vibe session. Funny just noticed my agents named my game Vesper just the sept 19th and it’s a C++ game that’s a bit different. Just wanted to swing by and say best of luck in javascript limitations. Looks fascinating.

1 Like

Good vibes! It was hard to tell what the goals where and how to activate the devices. Combat was pretty straightforward, but identifying which were enemies and which weren’t was also difficult. There were some interesting descriptions of what the weapons / abilities were but without a reference of what/how the world works, they weren’t informative. For instance: “Light mode” is a super ambiguous term. Am I changing the levels of lighting in the world? Is light mode like a weapon mode? Is light mode going to make my character lighter? The art of a design like this is showing those traits somehow without needing an info dump read.. and the more fantastical your world building, the harder it is to provide that. The descriptions need a concrete action item like “Press XXX to do this”

So:
10/10 presentation
5/10 usability/understandability.

2 Likes