Video Game · Unity 6

Oakhaven: 2D Game Bloodborne-Style

Gothic-industrial 2D action game inspired by Bloodborne and metroidvanias like Blasphemous. You are a Gravewarden roaming Oakhaven, a Victorian city sunk into an endless night, fighting soot lycans and aristocratic vampires with a sword in one hand and a pistol in the other. Developed in Unity 6 with C#.

Oakhaven, videojuego 2D de acción gótica estilo Bloodborne
🗡️

Gothic 2D Action

Soulslike · Metroidvania

Game Art

Concept and sprite sheets for Oakhaven's enemies and world

Oakhaven world concept art sheet: districts, monsters and weapons
The world of OakhavenDistricts, monsters, the Gravewarden, weapons and storyboard sequences.
Sprite sheet for the Corrupted Clockmaker enemy
The Corrupted ClockmakerConcept, idle animation, attacks and walk cycle for the enemy.
Sprite sheet for the Gilded Taxidermist enemy
The Gilded TaxidermistTalon strike, syringe spray and visual effects.

Key Features

The systems that make it feel like a soulslike

⚔️

Sword and Pistol Combat

Melee attacks with rapiers and mechanical machetes, plus off-hand gunfire to interrupt enemies and break their guard.

💨

Dodge and Magic

Dodge with an invulnerability window and alchemical tonics that empower the character at the cost of sanity.

📈

Elden Ring-Style Progression

Six attributes, levels bought with Void-Oil Echoes at Vigil Lanterns and weapons upgraded from +0 to +10.

🗺️

Metroidvania World

Ten interconnected regions laid out as a cross, with shortcuts, save bonfires and fountains for fast travel.

🎮

Local Co-op

Two players on the same screen, each with their own HUD, character and gamepad or half of the keyboard, with a shared camera.

💬

Lore and Dialogue

An original lore bible, NPCs you can talk to, enemies with intro lines and bosses with their own health bar.

Tech Stack

Engine, language and game tools

🎮Unity 6
#️⃣C#
💡URP 2D
🕹️Input System
🎥Cinemachine
✅Unity Test Framework

Challenges and Solutions

Technical problems solved during development

1

A Big Map Without Endless Loading

A metroidvania world in a single scene is slow to edit and heavy on memory; one scene per room would mean hundreds of scenes.

Solution: Hybrid design: one scene per region split into rooms, with the camera snapping to each room and loading only when crossing between regions.
2

Fair, Tunable Damage

Damage had to depend on the weapon, its upgrade level, the attributes and the enemy's defense without becoming impossible to tune.

Solution: A pure C# calculation core using Elden Ring's formulas, with values in a tuning ScriptableObject and covered by tests.
3

Two Players on One Screen

The whole game assumed a single player: input, enemies, pickups and the camera.

Solution: A local player registry with per-player input maps; enemies, items and events now handle several players.
4

Building Levels by Hand Was Slow

Assembling every level and character in the editor took too long and was error-prone.

Solution: Code-driven builders in the Unity editor that generate regions, characters and menus from definitions.

Source Code

Explore my projects on GitHub. This one includes the combat, progression and local multiplayer systems plus the level builders.

🎮Unity 6
#️⃣C#
👥Local co-op
View GitHub

Do you have a video game idea?

I can help you bring it to Unity: mechanics, progression systems and playable prototypes