| audio | ||
| data | ||
| game | ||
| rendering | ||
| .gitignore | ||
| conf.lua | ||
| icon.svg | ||
| install.sh | ||
| main.lua | ||
| README.md | ||
OMA-TANK
A first-person wireframe tank combat game for Omarchy Linux, inspired by classic 1980 arcade vector tank games. Built with Love2D — pure Lua, software-rendered 3D line graphics, no polygons, no textures.
Vertex models are traced directly from the publicly-archived 1980 arcade ROM (vertex table at $388e, draw-command table at $2472, both documented by the 6502 disassembly preservation project), so silhouettes, proportions, and draw orders match the cabinet.
Install
curl -sL https://git.no-signal.uk/nosignal/oma-tank/raw/branch/master/install.sh | bash
Uninstall
oma-tank-uninstall
Controls
Two control schemes, switchable on the title screen with TAB.
Modern simplified (default)
| Input | Action |
|---|---|
| Up / W | Drive forward |
| Down / S | Reverse |
| Left / A | Rotate left |
| Right / D | Rotate right |
| Space | Fire |
Classic dual-track
| Input | Action |
|---|---|
| W / S | Left track forward / back |
| I / K | Right track forward / back |
| Space | Fire |
Both tracks forward = drive straight. Opposing = pivot in place. A single track alone gives a 1.5× speed bonus.
Gamepad
| Input | Action |
|---|---|
| Left stick Y | Left track |
| Right stick Y | Right track |
| A / right trigger | Fire |
| Start | Start game |
| Y (title) | Toggle control mode |
Gameplay
- First-person view from inside a tank on an open plain, studded with indestructible cubes, pyramids, and slabs
- Only one hostile is on the field at a time — destroy it and another spawns after a short beat
- The saucer is a separate bonus target: doesn't attack, doesn't show on radar, flies at barrel height
- One hit kills you — the screen cracks and your tank explodes into tumbling debris
- You start with 3 tanks. Bonus tank at 15,000, another at 100,000, every 100,000 thereafter
- One shot on the playfield at a time: fire again the moment your shell dies
Enemies
| Target | Points |
|---|---|
| Slow tank | 1,000 |
| Guided missile | 2,000 |
| Super tank | 3,000 |
| Saucer (UFO) | 5,000 |
Difficulty progression
- Below 10,000 pts — slow tanks only
- 10,000+ — guided missiles enter the rotation (1-in-3 chance per spawn)
- After 6 missiles have launched — super tanks replace slow tanks
- From 2,000 pts — saucer starts drifting across the field at random 0–17 s intervals
Evasion penalty
Avoid a tank for 48–64 seconds without killing it and the game silently replaces it with a missile — you can't hide behind cover forever.
Shooting over cover
Low slabs (halfPrism) can be shot over. Tall blocks and pyramids cannot. Use low slabs to close distance while blocked from enemy fire, then pop out to shoot.
HUD
- Top-left: lives, and status text —
ENEMY IN RANGE,ENEMY TO LEFT / RIGHT / REAR, orMOTION BLOCKED BY OBJECT - Top-centre: circular radar with sweep and fading blips. Shows only the active tank/missile — not the saucer, not obstacles
- Top-right: score and high score (9-digit arcade format)
- Screen centre: two-bracket reticle. Curls flip from vertical to diagonal when an enemy is lined up; the whole reticle blinks while your shell is in flight (fire again the moment it stops)
Omarchy Integration
- Theme colours auto-detected from your active Omarchy Ghostty theme
- System font detected from your Waybar config
- Full-screen via SUPER+F (Hyprland compositor)
Requirements
- Love2D (
sudo pacman -S love) - Omarchy Linux (or any Arch-based distro)
Acknowledgements
Inspired by the 1980 Atari arcade cabinet. Model geometry extracted from the publicly-archived ROM via the 6502 disassembly preservation project. No arcade assets, logos, or trademarked names are reproduced.
License
MIT