Cat Splat Studios · Toronto

Sentinels of Gleamwood

A controller-first 2D action roguelite. Knock an enemy into the air, keep it there, and finish it with a move you only get once. Every level fans out into as many as four paths running east, and one of them ends at the boss.

In development Unity 6 · Windows via Steam · Store page not open yet

01

What it is

Genre
2D action roguelite
Engine
Unity 6
Platform
Windows, via Steam
Steam
App 2953370, store page not yet public
Build state
In development, no announced date
Art
Enemy art finished, level art greybox

The kit you carry is two slots wide, one blade and one bow. Everything below describes how those two slots behave at the level of seconds and thresholds, because that is the level at which this game is actually different from the ones next to it on the shelf.

The blade and the meter

Grounded hits build juggle points. At 60 the enemy launches and hangs at the top of the arc for eight tenths of a second. That hang is the whole air combo window, and it is the same 0.8 seconds every time, so you can learn it.

Executions run on their own clock

The execution meter is read before the current hit's points land, which means the finisher is the swing after the one that fills the meter. Each enemy can be executed once.

The bow is an instant lane cast

There is no arrow to lead. The shot resolves along the lane the moment you release, and a clean release inside the perfect window is worth one and a half times damage, read off a charge ring drawn around the player.

You buy your movement

The wall jump and the dash cost 200 Gleam each at the hub. The generator knows which of the two you own and only builds rooms you can clear with them, so buying one visibly widens the game.

02

The hang

Here is the same eight tenths of a second the game gives you, laid out end to end. Grounded hits fill the juggle meter, and at 60 points the enemy launches. The shaded band is the hang at the top of the arc.

The two marks above the bar are the execution contract. The first swing fills the execution meter and the second one is the finisher, because readiness is checked before the current hit's points land. Stop hitting and the juggle meter drains, so a combo you abandon does not sit and wait for you.

fills the meter the finisher

Executed

Figure 2.1. The shaded band is eight tenths of a second of real time, measured against the clock rather than eased. The 60 point threshold, the 0.8 second hang and the 0.1 second hitstop at launch are the authored values. The spacing of the three grounded hits is a drawing choice.

03

The run

A run is five to seven levels long. The first level and the last one never change, and everything between them is a web you route through yourself. Each level names its own ways out, as labelled doors you press, with the rest between biomes as the fallback. One of those doors is the slip-away, which skips the boss and the boss reward together.

Layouts are a pure function of the seed, so the same run rebuilds itself identically every time. That is how a suspended run resumes without ever serialising a single tile of geometry.

10Biomes
31Routes
5–7Levels per run
The shipped run web A directed graph on four tiers. One entry node on the left leads to three tier two nodes, which lead to three tier three nodes, which lead to two tier four nodes, which lead to one finale node on the right. Some edges cross sideways to a sibling in the same tier, which lengthens the run. Two edges are bypasses that skip a boss. Emberfall Emberfall t2-a t2-a t2-b t2-b t2-c t2-c t3-a t3-a t3-b t3-b t3-c t3-c t4-a t4-a t4-b t4-b Demon King Demon King

31 routes, enumerated in your browser from the shipped adjacency.

Five levels
12
Six levels
13
Seven levels
6
Figure 3.1. Solid edges descend a tier. Dashed edges cross to a sibling, which adds a level to the run. Dotted edges are bypasses that skip a boss and its reward. Hover or focus a node to light every route through it.

04

Built to be authored

Dialogue, boss conversations and the story panels are content, not code. A writer opens a text file or the in-editor authoring tool, fills in the lines, and the game reads them on the next launch. No programmer sits in that loop and no rebuild happens.

The writing for this game has not been done yet. What you can see below is the surface it will arrive through, with the fields left empty, and the pipeline that carries a line of text from a file into the build.

Text a writer edits

GameContent.ini, dialogue files, .room drawings

Editor import

One menu item, validating as it reads

Definitions

Enemies, weapons, biomes, conversations

Validators

Two of them. One fails the build

The running game

And the shipped mod templates

Figure 4.1. The same path carries a boss conversation, an enemy's behaviour graph and a level drawing. A typo raises an error and leaves the existing value alone rather than quietly writing an empty one.

05

The same standard, for hire

Everything above is one codebase with 657 play-mode tests passing and zero failing, two content validators, one of which fails the build, and 21 versioned builds through the Steam pipeline. We take that pipeline into other people's projects.

Unity gameplay engineering

Character controllers, combat with real hit windows and hitstop, enemy AI authored as data, and procedural generation that proves its own output is walkable.

Tools your designers will open

Runtime debug panels, content workbenches, and scene-view tuners that share their maths with the gameplay code, so the preview cannot drift from the game.

Engine and graphics work

We wrote our own C++17 and OpenGL engine. It has an eleven-pass renderer, cascaded shadow maps, an ECS and a dockable editor. No game has shipped on it, and it is evidence that low-level work does not scare us.

Come back for the wishlist

The Steam page is not open yet. When it is, wishlisting will be the single most useful thing you can do for the game, because it costs nothing and it decides how many people ever see it.