The Jovian Humanitarian Conflict — terminal version
The second version, alongside web/ (browser). Runs on the
magmacrunch.engine terminal backend.
python -m jovian
Arrows or WASD to fly, Z or Space to fire, P to pause, R to restart.
It is also a cabinet in the magmacrunch
arcade and plays identically either way.
jovian/config.py |
Every constant, transcribed from web/js/config.js |
jovian/projection.py |
The pseudo-3D transform, pure |
jovian/cells.py |
That canvas onto character cells |
jovian/player.py |
The ship: flight, banking, guns, invincibility |
jovian/entities.py |
Contacts, shots, particles — and the IFF rules |
jovian/world.py |
The rail: camera drift, the cloud deck, stars |
jovian/scenes.py |
The screens |
tests/ |
The rules with no engine, the port against the shipped JS, the screens, the plain-terminal render |
Two verbs, on opposite sides of one seam
A terminal never reports a key release and goes silent for its repeat delay, so the engine offers two input semantics and this is the first cabinet that needs both at once.
Steering is a held direction feeding an accelerate-and-coast model, where
overshoot is survivable and the stakes are only which way the ship drifts. That
is what decay is for, so this is the first cabinet to ask for hold_ms above
zero — 180ms.
Firing is the opposite. The whole game is that refusing to shoot is a decision, so the moment of pressing is the game; it is read as a discrete press and never from held state. Auto-fire would delete the game rather than simplify it.
Why a terminal port is possible at all
The game's central mechanic is a transponder blink drawn at a constant screen
size at every depth — motion rather than colour, and readable from the frame
a contact spawns. That channel owes nothing to resolution, sub-cell position or
hue, so it survives a character grid intact. The web build's own
js/entities.js ranks its four identification channels and puts it first for
exactly that reason.
The palette makes the same point from the other side: amber against magenta,
never red/green, chosen so the distinction "survives being read in greyscale".
A game built to stay legible without hue is one that survives NO_COLOR.
Running the tests
python -m pytest
python -m pytest rather than bare pytest, because the module form puts the
current directory on sys.path and the package is not installed. No engine is
needed: config and projection import nothing outside the standard library,
and a test asserts that rather than trusting it.
tests/test_oracle.py additionally needs node, which it uses to run the real
web/js/ modules in a vm and compare every number against the Python. It skips
where node is absent, so a Python-only machine still runs the rest.
Development
pip install -e ".[dev]"
python -m pytest
ruff check .
What is still to come
The screens, the arcade entry point and the command, and the cell mapping that
turns the 480x270 canvas into character rows. The last of those is the open
question: FOCAL spreads contacts across 270 pixels of smooth falloff, and a
terminal has perhaps eighteen rows with nothing between them, so depth probably
needs a second channel — glyph weight, or a dim-to-bright ramp — rather than
row position alone.
Licence
PolyForm Noncommercial 1.0.0. LICENSE and NOTICE here are copies of the
ones at the repository root, carried so they land inside the built wheel.
Metadata
Release files for magmacrunch-jhc 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| magmacrunch_jhc-0.1.0.tar.gz | 60.4 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| magmacrunch_jhc-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 104.5 kB
Release files / magmacrunch_jhc-0.1.0.tar.gz
| Download URL | magmacrunch_jhc-0.1.0.tar.gz |
|---|---|
| Size | 60.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ee6cd8c30b49c9913cf61514ce1578405331d4cb4b570a07b0013ea5c06d47e2
|
|
BLAKE2b-256 checksum How to use checksums |
610c6d07952f1d93736648154c7f899d19628adb4e29bd990ca3a960d4170fd4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Sep 6, 2026.
Transparency logRelease files / magmacrunch_jhc-0.1.0-py3-none-any.whl
| Download URL | magmacrunch_jhc-0.1.0-py3-none-any.whl |
|---|---|
| Size | 44.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
0bc153a4a3961a74d1a47c92b8f17eade4d9e06a956cf67ba4d24cd7344f130b
|
|
BLAKE2b-256 checksum How to use checksums |
b364b2f94fde54981663a63f1a1eb3915cb61f614152e503778edf1fe6e36084
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Sep 6, 2026.
Transparency logSecurity for magmacrunch-jhc 0.1.0
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.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for magmacrunch_jhc-0.1.0.tar.gz
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 Sep 6, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.