A wireframe tank arena, with hidden lines, LAN co-op and VR.
A clone of Spectre (Velocity, 1991), written from scratch in Python and pygame.
Drive a vector tank round a walled arena, run down every flag before the clock does, and stay out of the sights of the tanks that come looking for you.
It's all line art, but the solids are solid: faces are filled with the background and only their front edges are drawn, so a building hides whatever stands behind it. That's the trick that made the original Spectre's arenas feel like places rather than diagrams. It's done here in software, in plain pygame, fast enough to draw twice per frame for a headset.
![]() |
![]() |
| Cockpit view | Chase view (v) |
- Hidden-line wireframe. Filled faces, back-to-front painting, and seams sealed where two solids meet. No OpenGL is needed to play on the desk.
- Enemies that hunt you. Fast red hunters and slow, hard-hitting purple sentries track you by sight and lead their shots. Keep a building between you and them.
- Steering that winds up. Tap for half a degree of fine aim; hold, and it builds over 0.85 s to a full 132°/s swing, all on the same key.
- LAN co-op for up to four. No accounts and no servers, just an address. Levels are grown from a seed, so the arena is never sent over the network.
- VR over OpenXR. Sit in the tank with your head free to look round. Gauges hang in front of you, and the Touch controllers drive and fire. Tested with a Quest 3 over WiVRn.
- Synthesised sound. Every effect is built at startup from oscillators and noise, with no sample files. Sounds are positioned in stereo, so you can hear which side the shots are coming from.
- Small. One file for the game and a second only a headset loads.
Download Spectre-<version>-windows-setup.exe from the
latest release and run it.
It installs for your user alone, with no administrator prompt, and adds
Spectre and Spectre VR to the Start menu. It can be uninstalled from
Settings → Apps. The installer isn't signed, so Windows SmartScreen will warn
you the first time: choose More info, then Run anyway. There's also a
portable zip on the release, if you'd rather not install.
VR on Windows hasn't been tested yet. It should work through Quest Link, Air Link or SteamVR, but it has only been played on Linux so far. If you try it, please open an issue and say how it went. The game writes its log to
%LOCALAPPDATA%\Spectre.
Spectre is developed on Linux (Arch).
git clone https://github.com/RB211/Spectre.git
cd Spectre
./install.shThis copies the game into ~/.local/share/spectre with a Python environment of
its own, and adds two entries to your app launcher:
| Launcher | |
|---|---|
| Spectre | the game on your desktop |
| Spectre VR | the game in a headset. It starts WiVRn if needed, and it's listed in the WiVRn app on the Quest, so you can start it from inside the headset. |
Run ./install.sh again to update, and ./install.sh --uninstall to remove it.
Your settings (~/.config/spectre) are kept. Logs go to
~/.local/state/spectre/.
Run from source instead
python -m venv .venv
.venv/bin/pip install -r requirements.txt
.venv/bin/python spectre.py| Option | |
|---|---|
--fullscreen |
start full screen |
--mute |
no sound |
--vr |
play in a headset |
--vr-check |
check the headset side is working, without starting a session |
The desk game needs only pygame; PyOpenGL and pyopenxr are for --vr. In VS
Code, Ctrl+Shift+B starts the game in VR.
Collect every flag in the arena before the clock runs out. Octahedral pods are ammunition and cubes are shields, and destroyed tanks drop them too. Clearing a level pays a time bonus and adds another enemy tank.
| Key | |
|---|---|
W S / ↑ ↓ |
drive, reverse |
A D / ← → |
turn (tap to aim, hold to swing round) |
space |
fire |
shift |
turbo (drains while held, refills when you let go) |
v |
switch between cockpit and chase camera |
tab |
radar range: 55 m, 90 m or 150 m |
p |
pause |
f |
fullscreen |
esc |
in-game menu (back to the main menu, or quit) |
Spectre runs in any OpenXR headset whose runtime supports OpenGL. It's built and tested on Linux with a Quest 3 streaming wirelessly over WiVRn. On Windows it should work through Quest Link, Air Link or SteamVR; Windows VR startup has now been verified on a laptop with an active OpenXR runtime.
On Linux:
- Start Spectre VR from the app launcher, or from the WiVRn app on the Quest.
- If you started it on the PC, open the WiVRn app on the Quest. The game plays in a window until the headset connects, then switches to it. The window then mirrors the left eye.
In the headset your head is free inside the tank: look out the side while
the tank drives straight on. The gauges hang in two rows around your gaze
(score and clock above, shields, radar and flags below) so the middle stays
clear. The reticle sits out on the gun line, and menus appear on a single
sheet in front of you. Where you're sitting when the game starts becomes your
seat; press F12, click the left stick, or hold the Quest's Meta button to
recenter.
If WiVRn restarts or the link drops, the game carries on in the window until the headset reconnects.
| Touch controller | |
|---|---|
| left stick | drive, reverse and turn (the right stick turns too) |
| trigger | fire |
| grip | turbo |
A / B |
select / back (B or the menu button opens the in-game menu) |
Y |
cockpit / chase camera |
X |
radar range |
| right stick click | pause |
| left stick click | recenter |
You still need the keyboard to type a LAN address or your name.
Up to four tanks on the same network, over plain TCP on port 35700.
- One player picks HOST A LAN GAME. The lobby shows an address to read out.
- Everyone else picks JOIN A LAN GAME and types it in (
host:portworks if the port has been changed). - The host presses
enterwhen everyone's in.
Flags and the clock are shared, scores are per player, and the enemy tanks go after whoever is nearest. There's no friendly fire. Destroyed tanks respawn after a moment, and the mission only fails when the clock runs out. Every other tank flies its player's name over the turret; set yours under SETTINGS on the title screen.
Tiling window managers. The window's class is spectre, and it adapts to
whatever size the compositor gives it, even a tall, narrow tile. To float it
in Hyprland instead:
o.window("spectre", { float = true, center = true, size = { 1280, 800 } })The renderer, the hidden-line trick, the synthesised audio, the networking and the VR pipeline are written up in docs/how-it-works.md.
Spectre was created by Velocity Development and published in 1991. This is an independent, from-scratch clone made for fun. It is not affiliated with or endorsed by the original's authors, and it contains none of their code or assets.
Spectre is free software under the GNU General Public License v3.0: you can use, study, share and change it, and anything you distribute that's built on it must be shared under the same terms.


