Skip to main content

Psychic Cleaners

Build Status Coverage

A clean-room pygame-ce homage to a 1984 Activision C64 classic about running a paranormal-removal franchise: buy a vehicle and gear, watch the city map, drive to hauntings, snare stain-ghosts between two beams, dodge a rampaging gummy mascot, and — when the city's psychic residue maxes out — storm Threshold Tower. Mechanics and pacing follow the original; every name, sprite, sound, and melody is an original work. The full concept-by-concept theme mapping is in docs/superpowers/specs/2026-07-13-psychic-cleaners-design.md (section 3).

City map with the Depot, a wisp, haunted buildings, and the HUD Busting a stain-ghost between two beam-cleaners

Every sprite, sound, and melody shown above is generated in code at startup — no image or audio assets ship in this repo (see shell/gfx.py and shell/audio.py).

Provenance

This project is 100% vibe coded: no human looked at the game itself — played it, watched it run, or reviewed a screenshot — until it was published as v20260716-1. All design, implementation, and verification up to that point were done by an AI agent operating this repository end to end (specs, plans, tests, the scripted playtest harness, and CI), with the human author directing scope and reviewing written artifacts (specs, plans, diffs) rather than the running game.

Install

Requires Python >= 3.14.

pip install psychic-cleaners

Play

psychic-cleaners

Win condition: end the finale with a bankroll strictly greater than the one you started with. Your account code carries the bankroll into the next game.

Developing from a clone

Requires uv.

git clone https://github.com/DrGeoff/psychic-cleaners.git
cd psychic-cleaners
uv sync
uv run psychic-cleaners

Controls

Scene Keys
Title Type your name; Tab switches between the Name and Account code fields; Backspace deletes; Enter confirms (blank code = new franchise, filled code = restore account)
Shop Up/Down select; Enter buy vehicle or item; F finish shopping
City map Arrow keys move the cursor; Enter travel; B deploy gummy bait on an alert; S buy a snare at the Depot; L take a Depot loan; P repay a Depot loan
Driving Up/Down change lane; B deploy gummy bait on an alert
Busting Left/Right move cleaner or snare cursor; Enter place / lay snare; Space spring it; B deploy gummy bait on an alert
Finale Space send the next runner past the mascot
Game over Enter back to the title

Development

uv run pytest                 # full suite (SDL dummy drivers set by tests/conftest.py)
uv run ruff check .           # lint
uv run ruff format .          # format
uv run mypy                   # strict type-check of src and tests
uv run pre-commit install     # ruff + mypy on every commit

CI additionally enforces >= 90% coverage on the pure-logic core: uv run pytest --cov=psychic_cleaners.core --cov-fail-under=90 --override-ini="addopts=--cov-report=term-missing" (the override drops the package-wide --cov from pyproject addopts so the gate measures core/ only).

Project layout

src/psychic_cleaners/
  core/    # pure deterministic game logic — zero pygame imports
           # constants.py is the single tuning point for every gameplay number
  shell/   # all pygame-ce code: app loop, generated sprites/audio, one module per scene
tests/
  core/         # fast unit + Hypothesis property tests
  integration/  # scripted full-playthrough tests of core.game (no pygame)
  shell/        # SDL dummy-driver smoke tests

The shell feeds Command objects into core.game.Game.tick, which returns Event objects; the shell draws state and plays a sound per event. Same seed + same commands = same game, which is what makes the playthrough tests deterministic.

License

Public domain — see LICENSE (The Unlicense).

Metadata

Release files for psychic-cleaners 20260718.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for psychic-cleaners 20260718.2
File Size Uploaded
psychic_cleaners-20260718.2.tar.gz 319.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for psychic-cleaners 20260718.2
File Interpreter ABI Platform
psychic_cleaners-20260718.2-py3-none-any.whl Python 3 none any Details

Total release size: 376.5 kB

Release files / psychic_cleaners-20260718.2.tar.gz

Download URL psychic_cleaners-20260718.2.tar.gz
Size 319.8 kB
Tags Source
SHA-256 checksum
How to use checksums
1f134e8a35ab13de08c6aa5f77d98d3b8fd8852c3d1ddb15cbcb93bbb2b8774d
BLAKE2b-256 checksum
How to use checksums
49c82a33e679f440499f0cb1b21c301586dc8cae3811684cc170504526c5f985
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 18, 2026.

Transparency log

Release files / psychic_cleaners-20260718.2-py3-none-any.whl

Download URL psychic_cleaners-20260718.2-py3-none-any.whl
Size 56.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
7c59078e23e1bd1af3beb8b8346a9713503a1958df2a54a7ecd69b4c58b034a9
BLAKE2b-256 checksum
How to use checksums
77e8ad5c31f8144043fa48b815670be94c09a0912623e4acb3bf2c6b4262e0e8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 18, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

20260718.2 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page