Isaac Limb ← Portfolio
Project · Game

Hearthvale

A 2D medieval settlement simulation in Godot and C#, playable end to end. I scoped and shipped all thirteen development phases solo in about four weeks, with a real unit-test suite and CI, and produced a downloadable build.

Role
Solo, design to build
Stack
Godot 4 (.NET) · C# / .NET 8 · xUnit
Timeframe
~4 weeks
Status
Playable, downloadable build
Links
Private repo
517commits, solo
48klines of C#
344source files
13/13phases shipped
CItests on every push

What it is

A villager-driven kingdom builder in the spirit of Fabledom and Stardew Valley: you set direction, the settlement runs itself, and an economy of buildings, resources, and people ticks forward. The core loop is complete and playable; the work now is balancing and polish.

Shipped in thirteen phases

I ran it like a real project: a sequenced plan, one phase at a time, each landing a working slice rather than a half-built everything.

1 · Grid & camera 2 · Buildings 3 · Resources 4 · Villagers 5 · Jobs 6 · Economy 7 · Needs 8 · City tiers 9 · Blessings 10 · Events 11 · Save/load 12 · UI 13 · Polish
Each phase shipped a playable increment. All thirteen are implemented.

Decisions worth noting

Unit tests and CI, for a solo game

Game code is notorious for being untestable, so most hobby games have no tests. I pulled the simulation logic (economy, buildings, city growth, blessings) out of the engine and covered it with xUnit, then wired CI to run it on every push. It caught real regressions as the systems grew.

// Simulation logic lives outside the engine so it can be tested.
[Fact]
public void Market_PricesRise_WhenSupplyDrops() {
    var city = new City(grain: 100);
    city.Consume(grain: 90);
    Assert.True(city.PriceOf(Grain) > basePrice);
}

Illustrative. Separating simulation from rendering is what made the tests possible.

Villagers that run themselves

The player does not micromanage. Villagers pick jobs, meet needs, and move goods on their own, so the settlement stays alive whether or not you are looking at it. That autonomy is the heart of the feel, and the hardest thing to balance.

Outcome

End to endplayable core loop
Windowsdownloadable build
~4wksolo, 517 commits

What I'd do differently

I built systems faster than I balanced them, so by the later phases I had a lot of interacting numbers and not enough tuning tools. Next time I would build the balancing and debug instrumentation earlier, alongside the systems, instead of treating tuning as a final phase.

← All projects Get in touch →