No description
Find a file
Samuel Bouchet c9f8a9566a Add adventure secret branches, Destiny finale, crafting system, and project docs
Integrate stats, resources, and cosmetics into adventures via conditional
branches gated by game state checks. Each of the 9 adventures now has a
secret branch that rewards exploration and encourages replay with subtle
hints on locked choices. The endgame box now triggers a Destiny adventure
that acknowledges all completed adventures and secret branches, with four
ending tiers culminating in an ultimate ending when all 9 secrets are found.

Also adds the crafting engine, CLAUDE.md and specifications.md for faster
onboarding.
2026-03-11 17:50:37 +01:00
content Add adventure secret branches, Destiny finale, crafting system, and project docs 2026-03-11 17:50:37 +01:00
docs Initial project setup: Open The Box CLI game 2026-03-10 18:24:01 +01:00
src/OpenTheBox Add adventure secret branches, Destiny finale, crafting system, and project docs 2026-03-11 17:50:37 +01:00
tests/OpenTheBox.Tests Add adventure secret branches, Destiny finale, crafting system, and project docs 2026-03-11 17:50:37 +01:00
.gitignore Fix runtime deserialization bugs, add test suite and publish support 2026-03-10 19:25:02 +01:00
CLAUDE.md Add adventure secret branches, Destiny finale, crafting system, and project docs 2026-03-11 17:50:37 +01:00
global.json Add complete content: recipes, French translations, music/cookie events 2026-03-10 18:45:54 +01:00
init.ps1 Add init.ps1 setup script, remove Loreline binaries from repo 2026-03-10 18:49:26 +01:00
OpenTheBox.slnx Fix runtime deserialization bugs, add test suite and publish support 2026-03-10 19:25:02 +01:00
publish.ps1 Fix runtime deserialization bugs, add test suite and publish support 2026-03-10 19:25:02 +01:00
README.md Fix runtime deserialization bugs, add test suite and publish support 2026-03-10 19:25:02 +01:00
specifications.md Add adventure secret branches, Destiny finale, crafting system, and project docs 2026-03-11 17:50:37 +01:00

Open The Box

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 scripting (Space, Medieval, Pirate, Contemporary, Sentimental, Prehistoric, Cosmic, Microscopic, Dark Fantasy).
  • 160+ items -- cosmetics, materials, consumables, adventure tokens, lore fragments, fortune cookies.
  • 34 crafting recipes across 16 workstation types.
  • Auto-activation system -- items interact automatically (key + chest, badge + adventure).
  • Character customization -- hair, eyes, body, legs, arms, tints with ASCII portrait.
  • Bilingual -- full English and French support (UI + adventures).
  • Save/Load -- JSON-based save files.
  • Music Box -- Console.Beep melodies (Windows).
  • Fortune Cookies -- 20 box-themed wisdom messages.

Architecture

The game follows the Black Box Sim pattern (Brian Cronin): strict separation between simulation and presentation.

Input (keyboard)
      |
      v
  GameAction         -- command sent to the simulation
      |
      v
+----------------+
| GameSimulation |   -- BLACK BOX: zero I/O, pure logic
|  (GameState)   |
+-------+--------+
        |
        v
   GameEvent[]       -- events describing what happened
        |
        v
+----------------+
|   IRenderer    |   -- BasicRenderer (phase 0) or SpectreRenderer (phases 1-8)
+----------------+

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

git clone <repo-url>
cd openthebox
.\init.ps1

The init script will:

  1. Check for .NET 10 SDK (offers to install if missing)
  2. Download Loreline v0.7.1 DLL
  3. Restore NuGet packages (Spectre.Console)

Build & Run

dotnet build
dotnet run --project src/OpenTheBox

Distribute

.\publish.ps1                    # Builds win-x64 by default
.\publish.ps1 -Runtime win-arm64 # Or target another platform

This produces a self-contained single-file executable in publish/<runtime>/. The target machine does not need .NET installed. Distribute the entire folder (exe + content/).

Tests

dotnet test

43 content validation tests verify all JSON data files deserialize correctly, cross-references are valid, and localization keys exist.

Project Structure

openthebox/
+-- src/OpenTheBox/
|   +-- Program.cs              # Entry point, game loop
|   +-- Core/                   # Pure models, enums, no dependencies
|   +-- Simulation/             # BLACK BOX: GameSimulation, engines, actions, events
|   +-- Rendering/              # IRenderer, BasicRenderer, SpectreRenderer, Panels
|   +-- Adventures/             # Loreline integration
|   +-- Persistence/            # Save/Load
|   +-- Localization/           # JSON string manager
+-- content/
|   +-- data/                   # boxes.json, items.json, interactions.json, recipes.json
|   +-- strings/                # en.json, fr.json
|   +-- adventures/             # 9 themes, each with .lor + .fr.lor files
+-- docs/GDD.md                 # Game Design Document (French)
+-- init.ps1                    # Setup script
+-- global.json                 # Pins .NET 10 SDK

Tech Stack

Component Technology
Runtime .NET 10, C# 14
CLI rendering Spectre.Console
Interactive fiction Loreline (.lor scripts)
Serialization System.Text.Json
Localization JSON string tables + Loreline translation files

License

All rights reserved.