Game Design

2026

Cattank

[ CLIENT ]

Personal Project

[ ROLE ]

Game Design & Development

[ YEAR ]

2026

Battle City with cats and tuna, in 3D with walls that break, tuned so a small kid can finish a stage.

[ THE CHALLENGE ]

Can a classic arcade game feel physical in 3D, with walls that really break into pieces, and still be easy enough for a small kid to win?

Battle City, with cats

Cattank, working title Whisker Battalion, is a 3D take on Battle City. You drive a small tank through a kitchen, shoot through brick and steel walls, and keep the tuna can safe from waves of robot tanks. My son kept asking for things to break, so everything on the field is made of voxels: every shot changes the map and every fight leaves a different kitchen behind.

01 / EVERY SHOT CHANGES THE MAP

Voxel walls

Walls are a grid of voxels. Shells carve craters and throw shards, and corners next to destroyed voxels are displaced so the craters come out angular. Your shots blast a full-height column out of a wall; enemy shots only nibble.

02 / THE BASE

Protect the tuna

The tuna can stands in the open with a long health bar, 30 hits in easy mode and 15 in normal. Lose it, or every life, and the stage is over. The shovel pick-up repairs 40% of it.

03 / THE ENEMIES

Four robot tanks

Basic tanks wander toward the can and shoot what is in line, fast ones rush the can, power ones hunt you, and armour ones are slow and dig straight through walls.

04 / PICK-UPS

Power-ups

A star for faster, double and steel-smashing shots, a bubble shield, a bomb that pops every tank, a clock that freezes them, a shovel to fix the tuna and an extra life.

05 / SCORE

Combos

Chain kills for DOUBLE and TRIPLE KILL multipliers, with score popups, and an extra life for every 20,000 points.

06 / FOR SMALL PLAYERS

Easy mode

On by default: 5 lives, 4 hits per tank, 12 enemies with 3 alive at once, enemies 25% slower, wider aim help and bigger pick-ups. Normal mode uses the Battle City numbers.

Test: walls that break in real time

Destructible 3D walls are expensive. The grid is the single source of truth, and the mesh is rebuilt in chunks of 8x8x8 voxels, a few per frame, with hidden faces culled. Debris is capped and retired once it settles, and thin slivers left behind are knocked down so a wall never looks half-broken.

Test: fair for a small kid

The game started from a question: can a classic arcade game be easy enough for a small kid? Easy mode is on by default, with more lives, fewer and slower enemies, a tougher can and bigger, longer-lasting pick-ups. It changes more than health: enemy shells fly slower, their guns turn slower, the aim assist bends toward a target up to 22 degrees off instead of 14, and your own shots never hurt the tuna. The first stage is winnable by a small player, and the Battle City numbers are one setting away.

Enemies on a changing map

Every shot rewrites the map, so paths can't be baked. Each enemy follows a flow field over the grid that is recomputed about once a second, and the four types choose different targets: the can, or you.

Feel first

The first milestone was a feel prototype. The tank runs on a state machine (idle, drive, boost, recovery, stunned, dead) with an energy gauge that pays for three boosts from full, and a jump high enough to land on a wall from a spring pad. A spring-damper layer squashes and stretches the mesh while the physics stays untouched, and hits come with hit-stop, camera shake, dust, sparks and scorch marks.

Icons, tank and sound

The HUD, menu and power-up icons were generated with a mix of image models on white and cut out by a small Godot tool, so every pick-up reads at a glance. The tank is a free stylised model by MrEliptik, split into hull and turret in code. The kitchen, the walls, the debris, the shaders and every sound and melody are built in code, and the audio is synthesised by a Python script.

Who did what

By hand: the game design document, the tuning, judged by playing each change, and the design questions: what makes it fun, what is fair for a small kid, and when something looks wrong. With AI: the Godot code, in small milestones, with every number in one tuning table so a change of feel is a one-line edit, and the icons. The tank is a free model by MrEliptik. Tools: Claude Fable, Claude Opus, Cursor, Gemini, Higgsfield, Figma Weave and Figma.

Where it stands

A feel prototype with one stage, in Godot 4.4. Still to build: ramps and jumps between levels, ice sliding, split-screen, online play, spring bones for the ears and tail, and cat animation.