Joël van der Werf
All projects

Hydro engine and Oxygen editor

An experimental C++ game engine for Windows, built on Vulkan, with its own editor. It started as a 2D Vulkan renderer and grew into a full engine that now runs a small JRPG of pixel-art characters in lit 3D dioramas.

Role
Sole developer
Language
C++17, GLSL, Python
Platform
Windows, Vulkan, MSVC
Code
github.com/joelnl74/Hydro

Overview

Hydro is where I learn engine technology by building it. It is a static library with three programs on top: Oxygen, the editor; Runtime, the standalone player that packaged games run on; and Game, the game's own code as native C++ scripts.

Rendering

A native Vulkan backend with explicit control over resources and synchronisation. The 2D path is the most mature; the 3D path is being built alongside it so both can share a scene.

2D

  • Batched sprite and quad rendering, sprite animation, materials and textures
  • Global and point lights with basic 2D shadows
  • Multiple render views per frame, with separate editor and game views
  • Shader hot reloading and GPU timing

3D

  • Dynamic rendering, depth, GPU vertex and index buffers, perspective and orthographic cameras
  • Directional, point and spot lights, emissive materials, ambient light and fog
  • glTF and GLB import
  • Sprites drawn inside 3D scenes as upright cut-out cards with depth, for mixed 2D and 3D scenes
  • Entity-ID rendering for picking in the editor
Oxygen render settings: sun shadow map size, soft sun shadows, sprite shadows As drawn, HDR, bloom, depth of field and pixel snap
Render settings in Oxygen: the sun shadow map size, soft or hard sun shadows, and sprite shadows “As drawn” or facing the sun. Each scene can override the project’s choices.

Next: physically based materials and more post-processing.

Oxygen editor

A lightweight editor in the spirit of Unity and Godot, running directly on the engine.

  • Scene and game viewports, hierarchy, inspector, project and asset browser, console
  • Scenes, prefabs, saving and loading, project and render settings
  • Play, pause, step one frame, and stop back to edit mode
  • Engine and render statistics, debug drawing, entity picking
  • Building a standalone game package from the File menu

Architecture

  • ECS: EnTT, with components as plain data and systems that act on them
  • Scripting: native C++ scripts with a reflection generator, so script fields show in the inspector and save with the scene
  • Data: game content (dialogue, items, quests, enemies, abilities) as reflected definition files and tables, edited in the inspector
  • Physics: Box2D for 2D; Jolt for 3D, with a capsule character controller, stairs, mesh colliders, ray and overlap queries, and triggers
  • Subsystems: a fixed start-up and shutdown order, Init/Shutdown for subsystems and RAII for resources
  • Build: premake, MSBuild scripts and a GitHub Actions pipeline that builds Debug and Release on every push

Eonlore: the game that proves it

Engine features are easy to demo and hard to prove. So Hydro has a real game to carry them: Eonlore, a tactical turn-based RPG with pixel-art characters in lit 3D scenes. Since November 2026 it lives in its own repository and builds against a pinned Hydro commit.

  • Field scenes: the Shrine Glade, a temple and a town street, with NPCs, signs, chests and quests
  • Turn-based battles built on turn order, elemental weaknesses, shields and Break
  • In-game menus for inventory, character and quests, built on the runtime UI
  • Every new engine system lands as a gameplay element in these scenes, not as a separate demo

Tooling and AI

Hydro is also where I develop my way of working with coding agents. The repository carries its own instructions, architecture skill and checks, so an agent can find its way around 500+ source files and verify its work before handing it back. Read about the AI workflow.

Status

AreaStatus
2D engine and rendererWorking, used for gameplay
Scene, ECS, native scriptingWorking
Oxygen editorWorking, expanding
Editor and game projects as separate projectsIn progress now
Asset pipelineWorking foundation
3D rendering and importIn active development
3D physics (Jolt)In active development
Audio, advanced post-processingPlanned

Building a game, an engine, or the tools around them?

I'm based in Tokyo and open to conversations about Unity, C++ and engine roles, C# and .NET software roles, and teams that want to put AI agents to work on real codebases.