← All projects
GAME In Development

Untitled Cat Game

A Celeste-inspired 2D platformer built with a custom engine — a father and son project

About

Untitled Cat Game is a Celeste-inspired precision 2D platformer built as a father and son project. The game is written in C# on a custom engine called Tuxedo — built on top of FNA, an open-source reimplementation of Microsoft XNA 4.0. Jack designs levels using the built-in editor; Richy builds the engine and game code.

The engine is the real project inside the project. Tuxedo is a clean, game-agnostic C# library that handles rendering, tile maps, entity management, a component system, physics resolution, lighting, effects, and a full scene system. The cat-specific mechanics — character states, movement physics, camera behaviour — live in a separate CatGame layer that sits on top of Tuxedo.

Character movement is handled entirely by hand: no physics engine, just a component stack that runs every frame. The MovementComponent handles acceleration, deceleration, coyote time, jump buffering, jump cut, and wall-jump lockout. The GravityComponent adds gravity every frame. PhysicsResolver runs two passes — vertical first, then horizontal — against the tile map to resolve collisions and set contact flags.

The state machine drives everything visual: idle, walk/run, jump, fall, wall slide, crouch, slide, and die. States decide when to leave themselves; the machine executes the transition. Add no-input-for-5-seconds and the cat sits down.

Levels are JSON files authored in the built-in ImGui editor — the same tile renderer runs in both editor and game, so the editor preview is pixel-perfect. Level objects communicate through an event-driven switch system: push buttons, trigger zones, moving platforms on waypoint tracks, teleporters, fireball emitters, and crate spawners all wire together through authored target references resolved at session start.

The lighting system computes a CPU lightmap at 1/4 room resolution every frame. Dynamic lights — from the player character, teleporters, light crates, and live fireballs — punch radial gradients into a darkness overlay that's blended over the scene. There's also a special additive overflow pass for light sources brighter than ambient.

In action

Gameplay

Features

Tuxedo Engine

A custom, game-agnostic C# engine built on FNA/XNA. Handles rendering, tile maps, entity and component management, physics, lighting, effects, and scene switching — all separated from game-specific code.

Precision Platformer Physics

Hand-rolled physics with per-frame velocity, coyote time, jump buffering, jump cut, and wall-jump lockout. No physics engine — two-pass collision resolution against the tile map every frame.

9-State Character Machine

Idle, walk/run, jump, fall, wall slide, crouch, slide, and die — states own their own exit conditions. Leave the cat alone long enough and it sits down.

Built-in Level Editor

An integrated ImGui editor that runs in the same process as the game. The same tile renderer powers both, so the editor preview is always pixel-perfect with gameplay. Jack uses it to build the levels.

Event-Driven Level Objects

Switches, trigger zones, moving platforms on waypoint tracks, teleporters, fireball emitters, and crate spawners wire together through an authored target/action system resolved at session start.

Dynamic Lighting

Per-room CPU lightmap at 1/4 resolution. Players, teleporters, light crates, and live fireballs all punch radial gradients into a darkness overlay — with an additive overflow pass for brighter-than-ambient sources.

Four Tileset Themes

Castle, Dungeon, Greenzone, and Nature — each with a tileset config that defines collision behaviours, half-tile zones, lethal tiles, and wall-jump surfaces per tile type.

Dad Code, Jack Levels

Jack's job: design levels with the editor, test them, break them, and ask for new features. Richy's job: make the engine do whatever Jack wants next.