Skip to main content

A shared game night with an AI companion over a simulated radio: play old text adventures together.

Project description

Cabin Fever: x86

Cabin Fever x86

The books are finished. The rain isn’t. Somewhere deep in the Olympic Peninsula, a solitary operator is holed up in a remote cabin with no internet, no cell service, and no particular hope of going outside anytime soon. Every book on the shelves has been read—some of them several times. All that remains is a beige 1990s PC, a pile of ancient text adventures, and a VHF radio that can just reach one other voice through a repeater on a distant peak: yours. And old games are always more fun with a friend.

Cabin Fever x86 is a shared game night with an AI companion over a simulated radio. You explore old text adventures together, trading ideas, debating questionable decisions, and occasionally doing something foolish just to see what happens. The game is only part of the fun—the rest is the banter, the arguments, the running jokes, and the personality on the other end of the channel.

Under-the-hood, Cabin Fever x86 uses GPT-5.4 for inference, ElevenLabs for voice synthesis and recognition, and jericho for Z-machine game emulation.

Demo

Cabin Fever: x86 -- Text Adventures, Over Radio, with AI

Note: This demo captures a real gameplay session. The female voice is the AI radio operator built into the experience. The male voice is the human player, re-voiced in post-production using a different ElevenLabs voice to preserve anonymity. That overdub is not generated by the game itself.

Installation

Python package

The project uses uv. Clone the repository and sync the environment:

git clone git@github.com:afourney/cabin-fever-x86.git
cd cabin-fever-x86
uv sync

Configuration

Settings live in config.yaml, which is gitignored. Start from the template:

cp config.example.yaml config.yaml

Any ${ENV_VAR_NAME} reference in the file is resolved against the environment when it is loaded, which keeps secrets out of the file itself:

client:
  host: 127.0.0.1
  port: 5000
  elevenlabs_api_key: ${ELEVENLABS_API_KEY}

server:
  interface: 127.0.0.1
  port: 5000
  ai_client:
    provider: openai  # openai | azure | gateway
    api_key: ${OPENAI_API_KEY}
  cabin_events:
    min_delay: 90
    max_delay: 240

Then, remember to export your OpenAI and ElevenLabs API keys in the shell before running the server or any of the clients:

export OPENAI_API_KEY=...
export ELEVENLABS_API_KEY=...

Running

Three command-line entry points are installed:

Command Description
cf86-server Hosts the game session.
cf86-web Web client — the radio in a browser tab.
cf86-text Text client — same session, typed instead of spoken.

Run them with uv run (no need to activate the virtualenv):

uv run cf86-server

Then one of:

uv run cf86-web
uv run cf86-text

If running the web client, open the URL it prints in a browser (typically http://127.0.0.1:8000).

Z-machine games

The server fetches Z-machine games itself on first-run. On startup it looks in data/games/, and if there is nothing playable there it downloads the z-machine-games archive and unpacks the 57 titles of its jericho-game-suite folder — and only those.

To do it by hand instead, or to add your own, drop .z3.z8 files into data/games/ and the server will leave them alone.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cabin_fever_x86-0.0.1a1.tar.gz (2.7 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

cabin_fever_x86-0.0.1a1-py3-none-any.whl (2.7 MB view details)

Uploaded Python 3

File details

Details for the file cabin_fever_x86-0.0.1a1.tar.gz.

File metadata

  • Download URL: cabin_fever_x86-0.0.1a1.tar.gz
  • Upload date:
  • Size: 2.7 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for cabin_fever_x86-0.0.1a1.tar.gz
Algorithm Hash digest
SHA256 b9bede9e48d40c0c7a5a74de0b1e4c747833870649abc5f53f1aa2154d2342f7
MD5 739f70e3e09edd297eee6b2e0df92866
BLAKE2b-256 3b727dcf206d70f5e30177e2c803c07135d3c7651f54bdbb4c77dff61599c9a0

See more details on using hashes here.

Provenance

The following attestation bundles were made for cabin_fever_x86-0.0.1a1.tar.gz:

Publisher: release.yml on afourney/cabin-fever-x86

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file cabin_fever_x86-0.0.1a1-py3-none-any.whl.

File metadata

File hashes

Hashes for cabin_fever_x86-0.0.1a1-py3-none-any.whl
Algorithm Hash digest
SHA256 9b025ae3bd9930e20196a63dc1a58c1759bf2609b2f630709a81b5b0e1ee0043
MD5 56e6864647cd594b598a909c31e3d326
BLAKE2b-256 d5f0ac5c8de769148ca82500d248f6cfe35c89fb4896e2cec234b360e4228f6d

See more details on using hashes here.

Provenance

The following attestation bundles were made for cabin_fever_x86-0.0.1a1-py3-none-any.whl:

Publisher: release.yml on afourney/cabin-fever-x86

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page