A CLI box-opening game where curiosity is the engine and every box is a mystery. Built in C# on .NET 10 with a progressive interface that evolves as you play.
> *Open a box. It contains another box. That one has a key. The key opens a chest. The chest holds a story fragment. The story unlocks a character. The character reveals a place. The place offers an adventure. The adventure rewards... a box.*
## Features
- **Progressive CLI** -- Start with bare `Console.ReadLine` numbered menus. Unlock colors, arrow-key navigation, panels, portraits, and full layouts by finding Meta Boxes.
- **25+ box types** with weighted loot tables, conditional drops, and nested auto-opening boxes.
- **9 interactive adventures** powered by [Loreline](https://loreline.app) scripting (Space, Medieval, Pirate, Contemporary, Sentimental, Prehistoric, Cosmic, Microscopic, Dark Fantasy).
The game follows the **Black Box Sim** pattern ([Brian Cronin](https://www.youtube.com/watch?v=jhcHlg7YhPg)): strict separation between simulation and presentation.
```
Input (keyboard)
|
v
GameAction -- command sent to the simulation
|
v
+----------------+
| GameSimulation | -- BLACK BOX: zero I/O, pure logic
The simulation never reads input or writes output. It receives actions and returns events. The game loop in `Program.cs` bridges input/renderer to simulation.
## Prerequisites
- **Windows 10/11**
- **.NET 10 SDK** -- install via `winget install Microsoft.DotNet.SDK.10`
## Setup
```powershell
git clone <repo-url>
cd openthebox
.\init.ps1
```
The init script will:
1. Check for .NET 10 SDK (offers to install if missing)
This produces a self-contained single-file executable. The target machine does **not** need .NET installed. Distribute the entire folder (exe + `content/`).
The `publish/wwwroot/` folder contains a static site playable in any browser. Upload it to itch.io as an HTML5 project.
**CI/CD:** The GitHub Actions workflow `.github/workflows/deploy-itch.yml` automatically publishes to itch.io (user: Lythom, channel: html5) on every push to `main`. Requires the `BUTLER_API_KEY` secret configured in the repository.