Devlog #0 — Starting point

Level 1 in the Scene View: stone blocks rising out of a blue sea with foam at the edges and a red button on top
Level 1 today. The water is new this week.

This is the first post of the devlog for Ambient, a first-person platformer inspired by Refunct. The idea is simple and relaxing: you roam a small archipelago of blocks, every block you step on lights up, and pressing a button makes a new group of blocks rise from the water. Once you’ve stepped on all of them, the level is done.

From now on there will be one post a week. This first one catches up on a year of on-and-off work.

Where we come from

October 2025: the core. The project started with a character built on Kinematic Character Controller and a test level. Within a few weeks came the mechanics that define how the player moves:

  • Wall jump, with a short cooldown so you can’t climb a wall forever.
  • Coyote time: you can still jump an instant after leaving a ledge (plus a bug that let you do it much later, now fixed).
  • Mantling: if you reach a ledge with jump held, the character pulls itself up.
  • The game loop: counting blocks, detecting the win, buttons and block groups that activate.
  • The activation ripple: when you step on a block, its colour spreads in a circle from the point of contact.
First person: climbing onto a block and touching others, which turn green with a ripple from the point of contact

Two editor tools were also born then, and they’re still essential for level design: a bar in the Scene View to see and move blocks between groups, and a validator that aligns blocks automatically.

November 2025: atmosphere. Fog, SSAO, post-processing, grass, a Gym level to test mechanics, and gamepad support (jump on the right trigger). There was also an experiment with Houdini Engine that was later removed from the project.

December–August: a pause, with a summer comeback to update Unity and the plugins, add a skybox and rework the block shader.

September 2026: the return

This month the project picked up again in earnest, with a new partner: I’m working with Claude Code connected straight to the Unity editor.

Level 1

The first real level is taking shape: a full layout pass and the first block groups in place.

Blocks rise from the water

The most visible change of the week. Before, hidden block groups simply popped in when you pressed a button. Now every block is there from the start, underwater, and pressing a button makes its group rise from the sea. Each block has its own resting pose, delay and duration, so the group doesn’t come up as one slab but block by block.

Pressing the red button on a block and watching a group of blocks rise from the water, each at its own pace

To tune it without going mad, each group’s inspector has buttons to save the resting and active poses, preview the rise without entering Play mode, and randomise the timings.

The BlockGroup inspector in Unity, with coloured buttons to sync, show and save poses, preview the rise and randomise timings

Stylised water

The sea used to be a flat plane. Now it’s a custom shader made with Amplify Shader Editor:

  • A colour gradient by depth: turquoise near the shore, dark blue out at sea.
  • Animated foam where the water meets the blocks.
  • Gerstner waves displacing the vertices of a high-resolution mesh near the player, while a simple plane covers the horizon.
At water level: moving waves and white foam around the blocks

Under the hood

This section is for anyone interested in the technical side.

  • Architecture. Everything talks through a global event bus: input → player, and blocks → counter → UI, with no direct references between systems.
  • Own code out of the third-party folder. The character controller, the event bus and the input bridge lived inside the KCC folder and would have been lost on a reimport. Now they live in Assets/Scripts/, with their own names (RefunctCharacterController, PlayerInputBridge).
  • Documentation. The project now has an Obsidian vault in docs/ with architecture notes, one reference note per class and a tech-debt list. A validator checks for broken links and flags notes that have drifted from the code.
  • A sturdier win condition. With blocks rising from the water, every block registers at the start, so the total no longer grows mid-game. Before, the win could fire too early. A block doesn’t count until it has finished rising.
  • Tools. Unity 6.6, and the Unity MCP so Claude can inspect scenes, run commands in the editor and take screenshots like the one above.

What’s next

  • Set up the groups in Gym and Level 2 for the new system. Right now their blocks are visible but don’t count.
  • Make buttons rise with their group. There’s one in Level 1 that can be pressed from the start.
  • More visual polish: grass and rock are next in line after the water.
  • Keep building Level 1.

See you next week.

Enjoyed this? Get every new devlog post in your inbox.

By:


Leave a Reply

Discover more from Ambient devlog

Subscribe now to keep reading and get access to the full archive.

Continue reading