Skip to main content

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.1

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

Source distribution (sdist)

Source distribution for magmacrunch-jhc 0.1.1
File Size Uploaded Provenance
magmacrunch_jhc-0.1.1.tar.gz 55.3 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for magmacrunch-jhc 0.1.1
File Interpreter ABI Platform
magmacrunch_jhc-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 99.4 kB

Release files / magmacrunch_jhc-0.1.1.tar.gz

Download URL magmacrunch_jhc-0.1.1.tar.gz
Size 55.3 kB
Tags Source
SHA-256 checksum
How to use checksums
bae5a76b90b38a3179098025c0962d5dc1c0cd2afca490187b3c603872819fca
BLAKE2b-256 checksum
How to use checksums
7ea504f9f74da37dfa9c26943bc7bb94cfd2032b3470d531bb832ea41ee74b1b
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 Oct 22, 2026.

Transparency log

Release files / magmacrunch_jhc-0.1.1-py3-none-any.whl

Download URL magmacrunch_jhc-0.1.1-py3-none-any.whl
Size 44.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
9606f5d92e6c74f29427ecf64f465469b3449fc0b682d4ba8fdb12b277fdf9d4
BLAKE2b-256 checksum
How to use checksums
e5d0c91c7f05135ba171d38ed137bb2653082d48114451fd14291574c326bce7
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 Oct 22, 2026.

Transparency log

Security for magmacrunch-jhc 0.1.1

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.

Select from 2 files

Attestation for magmacrunch_jhc-0.1.1.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 Oct 22, 2026.

Transparency log

A 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.

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files Full provenance

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