
Catlantean 3D: a 1993-Style Shooter Built on a 256-Color Palette
Developer Marko Stanic has published the first devlog for Catlantean 3D, a first-person shooter built with early-90s techniques: 320x240 resolution, a 256-color palette and hand-written rendering.
Developer Marko Stanic has published the first development log for Catlantean 3D, a first-person shooter he has been building in his spare time for over a year and plans to release on Steam. The project is an exercise in deliberate constraint: the game is written from scratch, assets included, with rendering and sound mixing done by hand.
Rules borrowed from 1993
The target resolution is 320x240 with 256 colors — VGA Mode-X rather than the classic 320x200 Mode 13h, because showing 320x200 on a 4:3 display produces non-square pixels. Game logic uses fixed point arithmetic so behavior stays deterministic across platforms; rendering may use floating point. The only permitted platform layer covers a frame buffer, keyboard and mouse input, an audio buffer and file I/O. In palette rendering every pixel is a single byte indexing into a 256-color palette, so each color choice has to be deliberate. The 768-byte palette reserves entries for transparency, pure white and pure black, then fills the rest with blood reds, greens and blues for color-coded keys and doors, desert hues for the ancient-Egypt parody setting of Catlantis, and greys for the cybernetic installations occupying it.
Lighting without shaders
Catlantean 3D is a raycaster: the map is a grid of tiles and each screen column is traversed with the DDA algorithm. A hardware renderer would darken distant geometry by multiplying a color vector in a shader, but a palette renderer only knows indices, and scanning the palette for every pixel is far too slow. Instead the engine precomputes a colormap of 32 shade levels, each color getting 31 darker variants drawn from the palette itself. The closest match is found in Oklab perceptual color space rather than by Euclidean distance, which tended to pull everything toward grey, and darker shades are nudged toward warmer hues — the pixel-art technique known as hue shifting. At runtime the lookup is O(1): the row index comes from fragment distance over view distance, and because walls are vertical, floors horizontal and sprites flat, it is computed once per column, once per row and once per sprite.
Assets and tools
Art comes from hand-drawn sprites, procedurally generated textures assembled by Python scripts, and 3D models rigged and animated in Blender, then rendered into sprite sheets through Blender's Python API. The renders first came out blurry and washed out, so Stanic relies on Blender's compositor for contrast and edge clarity before a script quantizes the image to the palette and packs it into the game's TEX format. Enemy sprites are rendered for every animation in eight facing directions. Level editing started in Tiled but moved to a custom wxPython editor with per-cell light painting, cell flags and direct level launching; parts of its model use pybast, Python bindings over engine internals.
Release plans
Stanic expects to publish Catlantean 3D in the first quarter of 2027 for roughly $5–$8. The source code will be released as open source on GitHub, while the data archive of graphics, levels, sounds and music will require buying the game.
SiTech — AI-powered web development
We build fast, modern websites and bring AI into real business workflows. Have a project or a question? We'd love to help.