Engine first
Why not just use Unity?
The in-house engine exists because the engineering is part of the project: explicit control over rendering, platform targets, asset formats, update order, and diagnostics. The cost is equally explicit. Every convenient subsystem that a mature engine provides becomes code to design, test, profile, and support.
Engine and game are separate assemblies
The engine owns scene/entity primitives, rendering, input abstractions, assets, audio-facing infrastructure, and platform work. The game assembly owns the cat, quests, progression, economy, minigames, and authored interactions. MVVM sits at the boundary: game state is exposed through view models rather than welded directly to draw calls. That makes UI state testable, but creates a discipline requirement around notification, lifetime, and thread ownership.
The renderer is a system, not a screenshot
The rendering path spans graphics backends, shaders, materials, batching, cameras, terrain, and generated assets. Dedicated shader validation, profiling, variant-audit, Vulkan reproduction, performance, and terrain-bake tools exist because a renderer that fails only on one driver is still broken. Cross-API shader contracts and captured repro cases keep those failures smaller than “Vulkan did something weird”.
Input follows the same abstraction boundary across keyboard, mouse, and gamepad. Linux and Android are real targets, so Wayland behaviour, controller mapping, graphics API differences, packaging, and touch/mobile constraints cannot be postponed behind a Windows-only host.
Data flow and determinism
Generated content and game state flow through engine-owned world structures, while the generator and asset pipeline remain separate tooling. Deterministic seeds and validation harnesses make generated scenes reproducible enough to debug. Gameplay systems integrate through shared state and events rather than becoming special cases in the renderer.
The honest cost
Owning the engine makes iteration slower when the missing feature is editor tooling, shader compatibility, asset import, or platform glue rather than game logic. It also makes the boundary legible. The repository contains targeted repro tools and sprint handovers precisely because engine work creates long-lived seams. The alpha is playable, but the architecture is still moving and the game and engine are deliberately evolving together.