Metadata-Version: 2.5
Name: deadair
Version: 1.3.1
Summary: A first-person cave-horror game for the terminal, with scenes raymarched at runtime and lit by your own lamp.
Project-URL: Homepage, https://github.com/AustinGuidry/dead-air
Project-URL: Source, https://github.com/AustinGuidry/dead-air
Project-URL: Issues, https://github.com/AustinGuidry/dead-air/issues
Author: Austin Guidry
License-Expression: MIT
License-File: LICENSE
Keywords: game,horror,interactive-fiction,terminal,textual,tui
Classifier: Development Status :: 5 - Production/Stable
Classifier: Environment :: Console
Classifier: Intended Audience :: End Users/Desktop
Classifier: License :: OSI Approved :: MIT License
Classifier: Natural Language :: English
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Games/Entertainment
Requires-Python: >=3.12
Requires-Dist: numpy>=1.26
Requires-Dist: pillow>=10.0
Requires-Dist: textual-image>=0.13
Requires-Dist: textual>=8.0
Description-Content-Type: text/markdown

# DEAD AIR

A first-person cave-horror game for the terminal. You are a search-and-rescue
officer entering an unsurveyed sink in Piney Ridge National Park, nineteen
hours behind a solo caver who did not come out.

It opens above ground. You have one evening of light to walk the approach,
read the ground, and talk to the people who saw Wren Alcott last — and then
you go down the hole.

Every room draws itself. The scenes are raymarched at runtime and lit by your
actual lamp, so the picture loses reach and detail as the cell dies, for the
same reason the prose does.

Built with [Textual](https://textual.textualize.io/), so it runs anywhere
Python 3.12 does — Linux, macOS and Windows, in a local terminal, over SSH,
or inside tmux.

Every room is drawn to whatever the terminal can manage. The kitty graphics
protocol gives the sharpest picture — kitty, Ghostty, WezTerm and Konsole
speak it; terminals with sixel get that instead; everything else falls back
to Unicode half-blocks, which is just text and works everywhere, including
the plain Windows command prompt. It looks best in a terminal that can draw
and it plays fine in one that can't.

## Install

Needs Python 3.12 or newer. [pipx](https://pipx.pypa.io) is the tidiest way —
it keeps the game and its dependencies in their own environment and puts
`deadair` on your PATH:

    pipx install git+https://github.com/AustinGuidry/dead-air

Or with plain pip, ideally into a virtualenv:

    pip install git+https://github.com/AustinGuidry/dead-air

Then, from anywhere:

    deadair

Pass `--seed N` to fix the run's coin-flips — the same seed always gives you
the same cave noises. `--help` lists the options.

## Updating

PyPI does not push updates — you pick them up when you ask for them:

    pipx upgrade deadair          # or: pipx upgrade-all
    pip install --upgrade deadair  # if you used plain pip

Once a day, on startup, the game quietly asks PyPI whether there is a newer
release and caches the answer; if you are behind, the menu says so and tells
you the command. The check runs on a background thread, times out fast, and
fails silently when you are offline. Set `DEADAIR_NO_UPDATE_CHECK` to any
value to turn it off. Running from a clone never checks.

## Running from a clone

If you would rather have the source to hand:

    git clone https://github.com/AustinGuidry/dead-air
    cd dead-air
    python3 -m venv .venv
    .venv/bin/pip install -r requirements.txt
    ./play

## Controls

| key   | action |
|-------|--------|
| `1`–`9` | take the numbered action — someone to talk to, something to look at, or a way on |
| `L`   | listen |
| `R`   | radio basecamp |
| `X`   | look again |
| `F`   | switch the helmet lamp on or off |
| `D`   | stop the beam down — half the burn rate, half the sight |
| `C`   | swap in a spare cell |
| `N`   | new run |
| `Q` / `ESC` | back to the menu (which has new run and quit) |

`F` is for above ground — you start in daylight with the lamp off, and the
evening does not wait for you. `D` and `C` are underground only, where the
lamp is not something you get to switch off.

## Saving

The game opens on a menu — resume, new run, controls, quit — and saves itself
after every action, so quitting and closing the terminal are the same thing as
putting it down. There is one slot and it is the run you are in. Finishing a
run, however it finishes, clears it.

The file goes wherever your machine keeps application state: on Linux
`~/.local/state/deadair/save.json`, on macOS `~/Library/Application
Support/deadair/save.json`, on Windows `%LOCALAPPDATA%\deadair\save.json`.
Setting `XDG_STATE_HOME` overrides all three. Deleting the file is a supported
way to start over.

Take your time in the first few rooms. The cave teaches you what it wants
before it asks you for anything.

You cannot see everything in the park before the light goes, and that is the
point of the park.

## Design notes

Mechanics, escalation, module layout, and tuning constants are documented in
[DESIGN.md](DESIGN.md) — **that file spoils the game**, so read it only if you
are here to work on the code rather than to play.

[RELEASING.md](RELEASING.md) covers cutting a version. It does not spoil
anything.

## License

MIT — see [LICENSE](LICENSE).
