escape-the-valley 1.0.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- escape_the_valley-1.0.0/.github/workflows/ci.yml +43 -0
- escape_the_valley-1.0.0/.github/workflows/pages.yml +50 -0
- escape_the_valley-1.0.0/.github/workflows/publish.yml +31 -0
- escape_the_valley-1.0.0/.gitignore +31 -0
- escape_the_valley-1.0.0/CHANGELOG.md +26 -0
- escape_the_valley-1.0.0/LICENSE +21 -0
- escape_the_valley-1.0.0/PKG-INFO +163 -0
- escape_the_valley-1.0.0/README.es.md +134 -0
- escape_the_valley-1.0.0/README.fr.md +134 -0
- escape_the_valley-1.0.0/README.hi.md +134 -0
- escape_the_valley-1.0.0/README.it.md +134 -0
- escape_the_valley-1.0.0/README.ja.md +134 -0
- escape_the_valley-1.0.0/README.md +134 -0
- escape_the_valley-1.0.0/README.pt-BR.md +134 -0
- escape_the_valley-1.0.0/README.zh.md +134 -0
- escape_the_valley-1.0.0/SECURITY.md +45 -0
- escape_the_valley-1.0.0/agents/skilled.py +279 -0
- escape_the_valley-1.0.0/assets/readme-logo.png +0 -0
- escape_the_valley-1.0.0/docs/survival-guide.md +53 -0
- escape_the_valley-1.0.0/pyproject.toml +58 -0
- escape_the_valley-1.0.0/scripts/sim_skilled.py +185 -0
- escape_the_valley-1.0.0/scripts/simulate.py +184 -0
- escape_the_valley-1.0.0/scripts/verify.sh +13 -0
- escape_the_valley-1.0.0/scripts/yaml_to_json.py +173 -0
- escape_the_valley-1.0.0/site/astro.config.mjs +13 -0
- escape_the_valley-1.0.0/site/package-lock.json +6141 -0
- escape_the_valley-1.0.0/site/package.json +17 -0
- escape_the_valley-1.0.0/site/src/pages/index.astro +33 -0
- escape_the_valley-1.0.0/site/src/site-config.ts +90 -0
- escape_the_valley-1.0.0/site/src/styles/global.css +7 -0
- escape_the_valley-1.0.0/site/tsconfig.json +5 -0
- escape_the_valley-1.0.0/src/escape_the_valley/__init__.py +3 -0
- escape_the_valley-1.0.0/src/escape_the_valley/adapter.py +321 -0
- escape_the_valley-1.0.0/src/escape_the_valley/backpack.py +508 -0
- escape_the_valley-1.0.0/src/escape_the_valley/backpack_models.py +92 -0
- escape_the_valley-1.0.0/src/escape_the_valley/backpack_ui.py +200 -0
- escape_the_valley-1.0.0/src/escape_the_valley/cli.py +507 -0
- escape_the_valley-1.0.0/src/escape_the_valley/data/__init__.py +0 -0
- escape_the_valley-1.0.0/src/escape_the_valley/data/event_skeletons.json +6548 -0
- escape_the_valley-1.0.0/src/escape_the_valley/engine.py +410 -0
- escape_the_valley-1.0.0/src/escape_the_valley/event_loader.py +144 -0
- escape_the_valley-1.0.0/src/escape_the_valley/events.py +1909 -0
- escape_the_valley-1.0.0/src/escape_the_valley/gm.py +431 -0
- escape_the_valley-1.0.0/src/escape_the_valley/intent.py +43 -0
- escape_the_valley-1.0.0/src/escape_the_valley/ledger.py +224 -0
- escape_the_valley-1.0.0/src/escape_the_valley/memory.py +397 -0
- escape_the_valley-1.0.0/src/escape_the_valley/memory_emitters.py +312 -0
- escape_the_valley-1.0.0/src/escape_the_valley/models.py +355 -0
- escape_the_valley-1.0.0/src/escape_the_valley/narration.py +169 -0
- escape_the_valley-1.0.0/src/escape_the_valley/physics.py +540 -0
- escape_the_valley-1.0.0/src/escape_the_valley/resources.py +96 -0
- escape_the_valley-1.0.0/src/escape_the_valley/save.py +409 -0
- escape_the_valley-1.0.0/src/escape_the_valley/step_engine.py +902 -0
- escape_the_valley-1.0.0/src/escape_the_valley/tui.tcss +140 -0
- escape_the_valley-1.0.0/src/escape_the_valley/tui_app.py +614 -0
- escape_the_valley-1.0.0/src/escape_the_valley/ui.py +297 -0
- escape_the_valley-1.0.0/src/escape_the_valley/voice.py +284 -0
- escape_the_valley-1.0.0/src/escape_the_valley/worldgen.py +281 -0
- escape_the_valley-1.0.0/tests/__init__.py +0 -0
- escape_the_valley-1.0.0/tests/test_adapter.py +103 -0
- escape_the_valley-1.0.0/tests/test_backpack.py +191 -0
- escape_the_valley-1.0.0/tests/test_backpack_ledger.py +110 -0
- escape_the_valley-1.0.0/tests/test_backpack_models.py +72 -0
- escape_the_valley-1.0.0/tests/test_backpack_save.py +96 -0
- escape_the_valley-1.0.0/tests/test_death_causes.py +235 -0
- escape_the_valley-1.0.0/tests/test_event_loader.py +58 -0
- escape_the_valley-1.0.0/tests/test_events.py +186 -0
- escape_the_valley-1.0.0/tests/test_gm.py +95 -0
- escape_the_valley-1.0.0/tests/test_ledger.py +156 -0
- escape_the_valley-1.0.0/tests/test_memory.py +359 -0
- escape_the_valley-1.0.0/tests/test_memory_emitters.py +256 -0
- escape_the_valley-1.0.0/tests/test_models.py +113 -0
- escape_the_valley-1.0.0/tests/test_narration.py +141 -0
- escape_the_valley-1.0.0/tests/test_physics.py +507 -0
- escape_the_valley-1.0.0/tests/test_save.py +113 -0
- escape_the_valley-1.0.0/tests/test_step_engine.py +455 -0
- escape_the_valley-1.0.0/tests/test_voice.py +87 -0
- escape_the_valley-1.0.0/tests/test_worldgen.py +160 -0
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
paths:
|
|
6
|
+
- "src/**"
|
|
7
|
+
- "tests/**"
|
|
8
|
+
- "pyproject.toml"
|
|
9
|
+
- ".github/workflows/**"
|
|
10
|
+
pull_request:
|
|
11
|
+
paths:
|
|
12
|
+
- "src/**"
|
|
13
|
+
- "tests/**"
|
|
14
|
+
- "pyproject.toml"
|
|
15
|
+
- ".github/workflows/**"
|
|
16
|
+
workflow_dispatch:
|
|
17
|
+
|
|
18
|
+
concurrency:
|
|
19
|
+
group: ${{ github.workflow }}-${{ github.ref }}
|
|
20
|
+
cancel-in-progress: true
|
|
21
|
+
|
|
22
|
+
jobs:
|
|
23
|
+
test:
|
|
24
|
+
runs-on: ubuntu-latest
|
|
25
|
+
strategy:
|
|
26
|
+
matrix:
|
|
27
|
+
python-version: ["3.11", "3.12"]
|
|
28
|
+
|
|
29
|
+
steps:
|
|
30
|
+
- uses: actions/checkout@v4
|
|
31
|
+
|
|
32
|
+
- uses: actions/setup-python@v5
|
|
33
|
+
with:
|
|
34
|
+
python-version: ${{ matrix.python-version }}
|
|
35
|
+
|
|
36
|
+
- name: Install dependencies
|
|
37
|
+
run: pip install -e ".[dev]"
|
|
38
|
+
|
|
39
|
+
- name: Lint
|
|
40
|
+
run: ruff check src/ tests/
|
|
41
|
+
|
|
42
|
+
- name: Test
|
|
43
|
+
run: pytest --tb=short -q
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
name: Deploy site to GitHub Pages
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
paths:
|
|
7
|
+
- 'site/**'
|
|
8
|
+
- '.github/workflows/pages.yml'
|
|
9
|
+
workflow_dispatch:
|
|
10
|
+
|
|
11
|
+
concurrency:
|
|
12
|
+
group: ${{ github.workflow }}-${{ github.ref }}
|
|
13
|
+
cancel-in-progress: true
|
|
14
|
+
|
|
15
|
+
permissions:
|
|
16
|
+
contents: read
|
|
17
|
+
pages: write
|
|
18
|
+
id-token: write
|
|
19
|
+
|
|
20
|
+
jobs:
|
|
21
|
+
build:
|
|
22
|
+
runs-on: ubuntu-latest
|
|
23
|
+
steps:
|
|
24
|
+
- uses: actions/checkout@v4
|
|
25
|
+
|
|
26
|
+
- uses: actions/setup-node@v4
|
|
27
|
+
with:
|
|
28
|
+
node-version: 22
|
|
29
|
+
|
|
30
|
+
- name: Install site dependencies
|
|
31
|
+
working-directory: site
|
|
32
|
+
run: npm ci
|
|
33
|
+
|
|
34
|
+
- name: Build site
|
|
35
|
+
working-directory: site
|
|
36
|
+
run: npm run build
|
|
37
|
+
|
|
38
|
+
- uses: actions/upload-pages-artifact@v3
|
|
39
|
+
with:
|
|
40
|
+
path: site/dist
|
|
41
|
+
|
|
42
|
+
deploy:
|
|
43
|
+
needs: build
|
|
44
|
+
runs-on: ubuntu-latest
|
|
45
|
+
environment:
|
|
46
|
+
name: github-pages
|
|
47
|
+
url: ${{ steps.deployment.outputs.page_url }}
|
|
48
|
+
steps:
|
|
49
|
+
- id: deployment
|
|
50
|
+
uses: actions/deploy-pages@v4
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
name: Publish to PyPI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
release:
|
|
5
|
+
types: [published]
|
|
6
|
+
|
|
7
|
+
concurrency:
|
|
8
|
+
group: ${{ github.workflow }}-${{ github.ref }}
|
|
9
|
+
cancel-in-progress: true
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
publish:
|
|
13
|
+
runs-on: ubuntu-latest
|
|
14
|
+
environment: pypi
|
|
15
|
+
permissions:
|
|
16
|
+
id-token: write
|
|
17
|
+
steps:
|
|
18
|
+
- uses: actions/checkout@v4
|
|
19
|
+
|
|
20
|
+
- uses: actions/setup-python@v5
|
|
21
|
+
with:
|
|
22
|
+
python-version: "3.12"
|
|
23
|
+
|
|
24
|
+
- name: Install build tools
|
|
25
|
+
run: pip install build
|
|
26
|
+
|
|
27
|
+
- name: Build package
|
|
28
|
+
run: python -m build
|
|
29
|
+
|
|
30
|
+
- name: Publish to PyPI
|
|
31
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
__pycache__/
|
|
2
|
+
*.py[cod]
|
|
3
|
+
*$py.class
|
|
4
|
+
*.egg-info/
|
|
5
|
+
dist/
|
|
6
|
+
build/
|
|
7
|
+
.eggs/
|
|
8
|
+
*.egg
|
|
9
|
+
|
|
10
|
+
# Virtual environments
|
|
11
|
+
.venv/
|
|
12
|
+
venv/
|
|
13
|
+
|
|
14
|
+
# Game state
|
|
15
|
+
.trail/
|
|
16
|
+
|
|
17
|
+
# IDE
|
|
18
|
+
.vscode/
|
|
19
|
+
.idea/
|
|
20
|
+
|
|
21
|
+
# Coverage
|
|
22
|
+
htmlcov/
|
|
23
|
+
.coverage
|
|
24
|
+
coverage.xml
|
|
25
|
+
|
|
26
|
+
# Ruff
|
|
27
|
+
.ruff_cache/
|
|
28
|
+
site/.astro/
|
|
29
|
+
node_modules/
|
|
30
|
+
site/dist/
|
|
31
|
+
.polyglot-cache.json
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to Escape the Valley are documented here.
|
|
4
|
+
|
|
5
|
+
## [1.0.0] - 2026-03-04
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
|
|
9
|
+
- Full-screen Textual TUI with camp actions, event choices, and route forks
|
|
10
|
+
- Three GM profiles: Chronicler (spare), Fireside (default), Lantern-Bearer (weird)
|
|
11
|
+
- Voice narration via local audio synthesis (optional)
|
|
12
|
+
- XRPL Testnet ledger backpack: supply tokens, settlement receipts, parcels (optional)
|
|
13
|
+
- Procedural world generation with seeded RNG for reproducible runs
|
|
14
|
+
- Party traits, twist deck, and doctrine/taboo system
|
|
15
|
+
- Maintenance windows (rest+repair combo) for breakdown resistance
|
|
16
|
+
- Escape valves: hard ration, desperate repair, abandon cargo
|
|
17
|
+
- Warning callouts toggle (`--callouts verbose|minimal`)
|
|
18
|
+
- Oregon Trail-style death causes in trail ledger
|
|
19
|
+
- Memory card system for GM narrative continuity
|
|
20
|
+
- Supply cache discovery at nodes
|
|
21
|
+
- Spoilage mechanic (food decays without salt)
|
|
22
|
+
- Night travel danger (needs lantern oil)
|
|
23
|
+
- Classic CLI mode (`trail new`, `trail play`)
|
|
24
|
+
- Save/load with full backward compatibility
|
|
25
|
+
- 316 tests, lint clean
|
|
26
|
+
- Survival guide (`docs/survival-guide.md`)
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 mcp-tool-shop
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: escape-the-valley
|
|
3
|
+
Version: 1.0.0
|
|
4
|
+
Summary: Oregon Trail-style survival game powered by Ollama GM with XRPL ledger-backed inventory
|
|
5
|
+
Author-email: mcp-tool-shop <64996768+mcp-tool-shop@users.noreply.github.com>
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
License-File: LICENSE
|
|
8
|
+
Keywords: game,ollama,survival,terminal,xrpl
|
|
9
|
+
Classifier: Development Status :: 4 - Beta
|
|
10
|
+
Classifier: Environment :: Console
|
|
11
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
12
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
14
|
+
Classifier: Topic :: Games/Entertainment
|
|
15
|
+
Requires-Python: >=3.11
|
|
16
|
+
Requires-Dist: httpx>=0.27
|
|
17
|
+
Requires-Dist: rich>=13.0
|
|
18
|
+
Requires-Dist: textual>=0.70
|
|
19
|
+
Requires-Dist: typer>=0.9
|
|
20
|
+
Provides-Extra: dev
|
|
21
|
+
Requires-Dist: pytest-cov>=5.0; extra == 'dev'
|
|
22
|
+
Requires-Dist: pytest>=8.0; extra == 'dev'
|
|
23
|
+
Requires-Dist: ruff>=0.4; extra == 'dev'
|
|
24
|
+
Provides-Extra: voice
|
|
25
|
+
Requires-Dist: voice-soundboard>=2.5; extra == 'voice'
|
|
26
|
+
Provides-Extra: xrpl
|
|
27
|
+
Requires-Dist: xrpl-py>=3.0; extra == 'xrpl'
|
|
28
|
+
Description-Content-Type: text/markdown
|
|
29
|
+
|
|
30
|
+
<p align="center">
|
|
31
|
+
<a href="README.ja.md">日本語</a> | <a href="README.zh.md">中文</a> | <a href="README.es.md">Español</a> | <a href="README.fr.md">Français</a> | <a href="README.hi.md">हिन्दी</a> | <a href="README.it.md">Italiano</a> | <a href="README.pt-BR.md">Português (BR)</a>
|
|
32
|
+
</p>
|
|
33
|
+
|
|
34
|
+
<p align="center">
|
|
35
|
+
<img src="https://raw.githubusercontent.com/mcp-tool-shop-org/brand/main/logos/escape-the-valley/readme.png" width="400" alt="Ledger Trail: Escape the Valley">
|
|
36
|
+
</p>
|
|
37
|
+
|
|
38
|
+
<p align="center">
|
|
39
|
+
<a href="https://github.com/mcp-tool-shop-org/escape-the-valley/actions"><img src="https://github.com/mcp-tool-shop-org/escape-the-valley/workflows/CI/badge.svg" alt="CI"></a>
|
|
40
|
+
<a href="https://pypi.org/project/escape-the-valley/"><img src="https://img.shields.io/pypi/v/escape-the-valley" alt="PyPI"></a>
|
|
41
|
+
<img src="https://img.shields.io/badge/license-MIT-blue" alt="MIT License">
|
|
42
|
+
<a href="https://mcp-tool-shop-org.github.io/escape-the-valley/"><img src="https://img.shields.io/badge/Landing_Page-live-blue" alt="Landing Page"></a>
|
|
43
|
+
</p>
|
|
44
|
+
|
|
45
|
+
<p align="center">
|
|
46
|
+
<em>A survival game where the trail is the teacher and the ledger keeps you honest.</em>
|
|
47
|
+
</p>
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## What Is This?
|
|
52
|
+
|
|
53
|
+
Escape the Valley is an Oregon Trail-style survival game that runs in your terminal. Lead a party of settlers through a procedurally generated wilderness. Manage food, water, wagon condition, and morale while navigating events, hazards, and hard choices.
|
|
54
|
+
|
|
55
|
+
An optional AI Game Master (powered by Ollama) narrates your journey with three distinct storytelling voices. An optional XRPL Testnet ledger backpack tracks your supply changes as on-chain receipts — proof that you survived, or proof that you tried.
|
|
56
|
+
|
|
57
|
+
## Quick Start
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
pip install escape-the-valley
|
|
61
|
+
|
|
62
|
+
# Launch the full-screen TUI (recommended)
|
|
63
|
+
trail tui --seed 42
|
|
64
|
+
|
|
65
|
+
# Resume a saved game
|
|
66
|
+
trail tui --continue
|
|
67
|
+
|
|
68
|
+
# With AI narration (requires Ollama running locally)
|
|
69
|
+
trail tui --seed 42 --voice
|
|
70
|
+
|
|
71
|
+
# Without AI narration (deterministic mode)
|
|
72
|
+
trail tui --seed 42 --gm-off
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## How to Play
|
|
76
|
+
|
|
77
|
+
Each turn you choose an action from camp:
|
|
78
|
+
|
|
79
|
+
| Action | What It Does |
|
|
80
|
+
|--------|-------------|
|
|
81
|
+
| **Travel** | Move toward the valley exit. Costs food and water. Risk of breakdown and events. |
|
|
82
|
+
| **Rest** | Heal the party, recover morale. Costs supplies but no progress. |
|
|
83
|
+
| **Hunt** | Spend ammo for a chance at food. Better in forests and plains. |
|
|
84
|
+
| **Repair** | Spend a spare part to fix the wagon. Critical for survival. |
|
|
85
|
+
|
|
86
|
+
**Events** interrupt travel with choices (A/B/C). Cautious choices are safer but cost time. Bold choices are faster but risky. There's no always-right answer.
|
|
87
|
+
|
|
88
|
+
**The wagon is everything.** If it breaks with no parts, the run is over. Keep it above half condition and do maintenance windows (rest then repair) for temporary breakdown resistance.
|
|
89
|
+
|
|
90
|
+
**Pace** controls speed vs. safety. Steady is the default. Hard pace covers more ground but burns more supplies and breaks wagons faster.
|
|
91
|
+
|
|
92
|
+
**Escape valves** (hard ration, desperate repair, abandon cargo) exist for emergencies. They have side effects and cooldowns — last resorts, not strategies.
|
|
93
|
+
|
|
94
|
+
For deeper tips, see the [Survival Guide](docs/survival-guide.md).
|
|
95
|
+
|
|
96
|
+
## GM Profiles
|
|
97
|
+
|
|
98
|
+
The AI narrator shapes the tone, not the mechanics. All three profiles play the same game.
|
|
99
|
+
|
|
100
|
+
- **Chronicler** — Grounded, practical, spare. Minimal folklore. Reports what happened.
|
|
101
|
+
- **Fireside** — Serious campfire narrator. Subtle uncanny moments. The default.
|
|
102
|
+
- **Lantern-Bearer** — Uncanny and liminal, but still grounded in consequences. The weird one.
|
|
103
|
+
|
|
104
|
+
Set with `--gm-profile`: `trail tui --gm-profile lantern`
|
|
105
|
+
|
|
106
|
+
## Ledger Backpack (Optional)
|
|
107
|
+
|
|
108
|
+
The Ledger Backpack tracks your 5 core supplies (food, water, meds, ammo, parts) as tokens on the XRPL Testnet. Every town checkpoint records a settlement receipt on-chain. At the end of your run, your trail ledger includes transaction IDs anyone can verify.
|
|
109
|
+
|
|
110
|
+
Completely optional. The game plays identically with it off (the default). Enable it from the L menu in the TUI or via CLI:
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
trail ledger enable
|
|
114
|
+
trail ledger status
|
|
115
|
+
trail ledger reconcile # retry failed settlements
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
Requires `pip install -e ".[xrpl]"` for the `xrpl-py` dependency.
|
|
119
|
+
|
|
120
|
+
## Commands
|
|
121
|
+
|
|
122
|
+
| Command | Description |
|
|
123
|
+
|---------|-------------|
|
|
124
|
+
| `trail tui` | Launch the full-screen Textual UI |
|
|
125
|
+
| `trail new` | Start a new run (classic CLI mode) |
|
|
126
|
+
| `trail play` | Continue a saved run (classic CLI mode) |
|
|
127
|
+
| `trail status` | Show party, wagon, and supplies |
|
|
128
|
+
| `trail journal` | Show recent journal entries |
|
|
129
|
+
| `trail self-check` | Check game environment health |
|
|
130
|
+
| `trail version` | Show version |
|
|
131
|
+
| `trail ledger status` | Show backpack status |
|
|
132
|
+
| `trail ledger enable` | Enable XRPL backpack |
|
|
133
|
+
| `trail ledger disable` | Disable XRPL backpack |
|
|
134
|
+
| `trail ledger settle` | Manually settle a checkpoint |
|
|
135
|
+
| `trail ledger reconcile` | Retry failed settlements |
|
|
136
|
+
| `trail ledger wallet` | Show wallet details |
|
|
137
|
+
| `trail parcel list` | List received parcels |
|
|
138
|
+
| `trail parcel accept <id>` | Accept a pending parcel |
|
|
139
|
+
|
|
140
|
+
## Warning Callouts
|
|
141
|
+
|
|
142
|
+
By default, the game shows verbose warnings to help new players spot danger early. Experienced players can switch to minimal mode, which only shows cliff-edge warnings (last-moment, critical threats):
|
|
143
|
+
|
|
144
|
+
```bash
|
|
145
|
+
trail tui --callouts minimal
|
|
146
|
+
trail new --callouts minimal
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
## Requirements
|
|
150
|
+
|
|
151
|
+
- Python 3.11+
|
|
152
|
+
- Ollama (optional, for AI narration)
|
|
153
|
+
- xrpl-py (optional, for ledger backpack)
|
|
154
|
+
|
|
155
|
+
## Security
|
|
156
|
+
|
|
157
|
+
No telemetry. No accounts. All network features (Ollama, XRPL) are opt-in and disabled by default. XRPL operations use Testnet only. See [SECURITY.md](SECURITY.md) for the full threat model.
|
|
158
|
+
|
|
159
|
+
## License
|
|
160
|
+
|
|
161
|
+
MIT
|
|
162
|
+
|
|
163
|
+
Built by <a href="https://mcp-tool-shop.github.io/">MCP Tool Shop</a>
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<a href="README.ja.md">日本語</a> | <a href="README.zh.md">中文</a> | <a href="README.md">English</a> | <a href="README.fr.md">Français</a> | <a href="README.hi.md">हिन्दी</a> | <a href="README.it.md">Italiano</a> | <a href="README.pt-BR.md">Português (BR)</a>
|
|
3
|
+
</p>
|
|
4
|
+
|
|
5
|
+
<p align="center">
|
|
6
|
+
<img src="https://raw.githubusercontent.com/mcp-tool-shop-org/brand/main/logos/escape-the-valley/readme.png" width="400" alt="Ledger Trail: Escape the Valley">
|
|
7
|
+
</p>
|
|
8
|
+
|
|
9
|
+
<p align="center">
|
|
10
|
+
<a href="https://github.com/mcp-tool-shop-org/escape-the-valley/actions"><img src="https://github.com/mcp-tool-shop-org/escape-the-valley/workflows/CI/badge.svg" alt="CI"></a>
|
|
11
|
+
<img src="https://img.shields.io/badge/license-MIT-blue" alt="MIT License">
|
|
12
|
+
<img src="https://img.shields.io/badge/version-1.0.0-green" alt="Version">
|
|
13
|
+
<a href="https://mcp-tool-shop-org.github.io/escape-the-valley/"><img src="https://img.shields.io/badge/Landing_Page-live-blue" alt="Landing Page"></a>
|
|
14
|
+
</p>
|
|
15
|
+
|
|
16
|
+
<p align="center">
|
|
17
|
+
<em>A survival game where the trail is the teacher and the ledger keeps you honest.</em>
|
|
18
|
+
</p>
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## ¿Qué es esto?
|
|
23
|
+
|
|
24
|
+
Escape the Valley es un juego de supervivencia al estilo de Oregon Trail que se ejecuta en tu terminal. Dirige un grupo de colonos a través de un terreno generado aleatoriamente. Administra alimentos, agua, el estado del carro y la moral, mientras navegas por eventos, peligros y decisiones difíciles.
|
|
25
|
+
|
|
26
|
+
Un narrador de inteligencia artificial (IA) opcional (impulsado por Ollama) narra tu viaje con tres voces narrativas distintas. Una "mochila" opcional de registro de la red de pruebas XRPL rastrea tus cambios de suministros como recibos en la cadena de bloques, una prueba de que sobreviviste, o una prueba de que lo intentaste.
|
|
27
|
+
|
|
28
|
+
## Guía de inicio rápido
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
pip install -e ".[dev]"
|
|
32
|
+
|
|
33
|
+
# Launch the full-screen TUI (recommended)
|
|
34
|
+
trail tui --seed 42
|
|
35
|
+
|
|
36
|
+
# Resume a saved game
|
|
37
|
+
trail tui --continue
|
|
38
|
+
|
|
39
|
+
# With AI narration (requires Ollama running locally)
|
|
40
|
+
trail tui --seed 42 --voice
|
|
41
|
+
|
|
42
|
+
# Without AI narration (deterministic mode)
|
|
43
|
+
trail tui --seed 42 --gm-off
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Cómo jugar
|
|
47
|
+
|
|
48
|
+
En cada turno, eliges una acción desde el campamento:
|
|
49
|
+
|
|
50
|
+
| Acción | Lo que hace |
|
|
51
|
+
|--------|-------------|
|
|
52
|
+
| **Travel** | Avanza hacia la salida del valle. Consume alimentos y agua. Riesgo de avería y eventos. |
|
|
53
|
+
| **Rest** | Restaura la moral del grupo. Consume suministros, pero no avanza. |
|
|
54
|
+
| **Hunt** | Usa munición para tener una oportunidad de obtener alimentos. Es más efectivo en bosques y llanuras. |
|
|
55
|
+
| **Repair** | Usa una pieza de repuesto para reparar el carro. Es crucial para la supervivencia. |
|
|
56
|
+
|
|
57
|
+
**Eventos:** Interrumpen el viaje con opciones (A/B/C). Las opciones cautelosas son más seguras, pero consumen tiempo. Las opciones audaces son más rápidas, pero arriesgadas. No siempre hay una respuesta correcta.
|
|
58
|
+
|
|
59
|
+
**El carro es lo más importante.** Si se avería y no tienes piezas de repuesto, el juego termina. Mantén su estado por encima de la mitad y realiza mantenimientos (descansa y luego repara) para una resistencia temporal a las averías.
|
|
60
|
+
|
|
61
|
+
**Ritmo:** Controla la velocidad frente a la seguridad. El ritmo constante es el predeterminado. Un ritmo rápido cubre más terreno, pero consume más suministros y avería los carros más rápido.
|
|
62
|
+
|
|
63
|
+
**Válvulas de escape** (racionamiento extremo, reparación desesperada, abandonar carga) existen para emergencias. Tienen efectos secundarios y tiempos de recuperación; son un último recurso, no una estrategia.
|
|
64
|
+
|
|
65
|
+
Para obtener más consejos, consulta la [Guía de Supervivencia](docs/survival-guide.md).
|
|
66
|
+
|
|
67
|
+
## Perfiles del Narrador (IA)
|
|
68
|
+
|
|
69
|
+
El narrador de IA define el tono, no la mecánica del juego. Los tres perfiles juegan el mismo juego.
|
|
70
|
+
|
|
71
|
+
- **Chronicler (Cronista):** Práctico, directo y conciso. Mínimo folclore. Informa sobre lo que sucedió.
|
|
72
|
+
- **Fireside (Junto al Fuego):** Narrador serio, como si estuvieras junto a una fogata. Tiene momentos sutiles e inquietantes. Es el predeterminado.
|
|
73
|
+
- **Lantern-Bearer (Portador de la Linterna):** Inquietante y enigmático, pero aún arraigado en las consecuencias. Es el más extraño.
|
|
74
|
+
|
|
75
|
+
Configura con `--gm-profile`: `trail tui --gm-profile lantern`
|
|
76
|
+
|
|
77
|
+
## Mochila de Registro (Opcional)
|
|
78
|
+
|
|
79
|
+
La mochila de registro rastrea tus 5 suministros principales (alimentos, agua, medicamentos, munición, piezas) como tokens en la red de pruebas XRPL. Cada punto de control de la ciudad registra un recibo de asentamiento en la cadena de bloques. Al final de tu partida, tu registro incluye los ID de transacción que cualquier persona puede verificar.
|
|
80
|
+
|
|
81
|
+
Completamente opcional. El juego se juega de la misma manera con ella desactivada (que es la opción predeterminada). Actívala desde el menú L en la interfaz de usuario de texto o a través de la línea de comandos:
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
trail ledger enable
|
|
85
|
+
trail ledger status
|
|
86
|
+
trail ledger reconcile # retry failed settlements
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
Requiere `pip install -e ".[xrpl]"` para la dependencia `xrpl-py`.
|
|
90
|
+
|
|
91
|
+
## Comandos
|
|
92
|
+
|
|
93
|
+
| Comando | Descripción |
|
|
94
|
+
|---------|-------------|
|
|
95
|
+
| `trail tui` | Inicia la interfaz de usuario de texto en pantalla completa |
|
|
96
|
+
| `trail new` | Comienza una nueva partida (modo clásico de línea de comandos) |
|
|
97
|
+
| `trail play` | Continúa una partida guardada (modo clásico de línea de comandos) |
|
|
98
|
+
| `trail status` | Muestra el estado del grupo, el carro y los suministros |
|
|
99
|
+
| `trail journal` | Muestra las entradas recientes del diario |
|
|
100
|
+
| `trail self-check` | Verifica el estado del entorno del juego |
|
|
101
|
+
| `trail version` | Muestra la versión |
|
|
102
|
+
| `trail ledger status` | Muestra el estado de la mochila |
|
|
103
|
+
| `trail ledger enable` | Activa la mochila XRPL |
|
|
104
|
+
| `trail ledger disable` | Desactiva la mochila XRPL |
|
|
105
|
+
| `trail ledger settle` | Realiza manualmente un asentamiento en un punto de control |
|
|
106
|
+
| `trail ledger reconcile` | Reintenta asentamientos fallidos |
|
|
107
|
+
| `trail ledger wallet` | Muestra los detalles de la billetera |
|
|
108
|
+
| `trail parcel list` | Lista los paquetes recibidos |
|
|
109
|
+
| `trail parcel accept <id>` | Acepta un paquete pendiente |
|
|
110
|
+
|
|
111
|
+
## Advertencias
|
|
112
|
+
|
|
113
|
+
Por defecto, el juego muestra advertencias detalladas para ayudar a los nuevos jugadores a identificar el peligro desde el principio. Los jugadores experimentados pueden cambiar al modo mínimo, que solo muestra las advertencias de "borde del precipicio" (amenazas críticas de último momento):
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
trail tui --callouts minimal
|
|
117
|
+
trail new --callouts minimal
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
## Requisitos
|
|
121
|
+
|
|
122
|
+
- Python 3.11 o superior
|
|
123
|
+
- Ollama (opcional, para la narración con inteligencia artificial)
|
|
124
|
+
- xrpl-py (opcional, para la función de "ledger backpack")
|
|
125
|
+
|
|
126
|
+
## Seguridad
|
|
127
|
+
|
|
128
|
+
No se recopilan datos de telemetría. No se utilizan cuentas. Todas las funciones de red (Ollama, XRPL) son opcionales y están desactivadas por defecto. Las operaciones de XRPL solo utilizan la red de pruebas (Testnet). Consulte el archivo [SECURITY.md](SECURITY.md) para obtener información completa sobre el modelo de amenazas.
|
|
129
|
+
|
|
130
|
+
## Licencia
|
|
131
|
+
|
|
132
|
+
MIT
|
|
133
|
+
|
|
134
|
+
Desarrollado por <a href="https://mcp-tool-shop.github.io/">MCP Tool Shop</a>
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<a href="README.ja.md">日本語</a> | <a href="README.zh.md">中文</a> | <a href="README.es.md">Español</a> | <a href="README.md">English</a> | <a href="README.hi.md">हिन्दी</a> | <a href="README.it.md">Italiano</a> | <a href="README.pt-BR.md">Português (BR)</a>
|
|
3
|
+
</p>
|
|
4
|
+
|
|
5
|
+
<p align="center">
|
|
6
|
+
<img src="https://raw.githubusercontent.com/mcp-tool-shop-org/brand/main/logos/escape-the-valley/readme.png" width="400" alt="Ledger Trail: Escape the Valley">
|
|
7
|
+
</p>
|
|
8
|
+
|
|
9
|
+
<p align="center">
|
|
10
|
+
<a href="https://github.com/mcp-tool-shop-org/escape-the-valley/actions"><img src="https://github.com/mcp-tool-shop-org/escape-the-valley/workflows/CI/badge.svg" alt="CI"></a>
|
|
11
|
+
<img src="https://img.shields.io/badge/license-MIT-blue" alt="MIT License">
|
|
12
|
+
<img src="https://img.shields.io/badge/version-1.0.0-green" alt="Version">
|
|
13
|
+
<a href="https://mcp-tool-shop-org.github.io/escape-the-valley/"><img src="https://img.shields.io/badge/Landing_Page-live-blue" alt="Landing Page"></a>
|
|
14
|
+
</p>
|
|
15
|
+
|
|
16
|
+
<p align="center">
|
|
17
|
+
<em>A survival game where the trail is the teacher and the ledger keeps you honest.</em>
|
|
18
|
+
</p>
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Qu'est-ce que c'est ?
|
|
23
|
+
|
|
24
|
+
Escape the Valley est un jeu de survie de type Oregon Trail qui fonctionne dans votre terminal. Guidez un groupe de colons à travers une nature générée aléatoirement. Gérez la nourriture, l'eau, l'état du chariot et le moral, tout en gérant les événements, les dangers et les choix difficiles.
|
|
25
|
+
|
|
26
|
+
Un Maître du Jeu IA optionnel (alimenté par Ollama) raconte votre aventure avec trois voix narratives distinctes. Un "sac à dos" de registre XRPL optionnel suit les changements de vos provisions sous forme de reçus sur la blockchain, prouvant que vous avez survécu, ou que vous avez essayé.
|
|
27
|
+
|
|
28
|
+
## Démarrage rapide
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
pip install -e ".[dev]"
|
|
32
|
+
|
|
33
|
+
# Launch the full-screen TUI (recommended)
|
|
34
|
+
trail tui --seed 42
|
|
35
|
+
|
|
36
|
+
# Resume a saved game
|
|
37
|
+
trail tui --continue
|
|
38
|
+
|
|
39
|
+
# With AI narration (requires Ollama running locally)
|
|
40
|
+
trail tui --seed 42 --voice
|
|
41
|
+
|
|
42
|
+
# Without AI narration (deterministic mode)
|
|
43
|
+
trail tui --seed 42 --gm-off
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Comment jouer
|
|
47
|
+
|
|
48
|
+
À chaque tour, vous choisissez une action au camp :
|
|
49
|
+
|
|
50
|
+
| Action | Ce que cela fait |
|
|
51
|
+
|--------|-------------|
|
|
52
|
+
| **Travel** | Avancez vers la sortie de la vallée. Coûte de la nourriture et de l'eau. Risque de panne et d'événements. |
|
|
53
|
+
| **Rest** | Soignez le groupe, améliorez le moral. Coûte des provisions, mais ne fait pas progresser. |
|
|
54
|
+
| **Hunt** | Utilisez des munitions pour avoir une chance d'obtenir de la nourriture. Plus efficace dans les forêts et les plaines. |
|
|
55
|
+
| **Repair** | Utilisez une pièce de rechange pour réparer le chariot. Essentiel pour la survie. |
|
|
56
|
+
|
|
57
|
+
**Les événements** interrompent le voyage et proposent des choix (A/B/C). Les choix prudents sont plus sûrs, mais coûtent du temps. Les choix audacieux sont plus rapides, mais risqués. Il n'y a pas toujours de bonne réponse.
|
|
58
|
+
|
|
59
|
+
**Le chariot est essentiel.** S'il tombe en panne et que vous n'avez plus de pièces, la partie est terminée. Maintenez-le en bon état (plus de la moitié) et effectuez des périodes de maintenance (repos puis réparation) pour une résistance temporaire aux pannes.
|
|
60
|
+
|
|
61
|
+
**Le rythme** contrôle la vitesse par rapport à la sécurité. Le rythme normal est le réglage par défaut. Un rythme rapide couvre plus de terrain, mais consomme plus de provisions et abîme les chariots plus rapidement.
|
|
62
|
+
|
|
63
|
+
Des **solutions de secours** (rations minimales, réparation désespérée, abandon de la cargaison) existent en cas d'urgence. Elles ont des effets secondaires et des temps de recharge ; ce sont des solutions de dernier recours, pas des stratégies.
|
|
64
|
+
|
|
65
|
+
Pour obtenir des conseils plus approfondis, consultez le [Guide de survie](docs/survival-guide.md).
|
|
66
|
+
|
|
67
|
+
## Profils du Maître du Jeu
|
|
68
|
+
|
|
69
|
+
Le narrateur IA façonne le ton, pas les mécanismes. Les trois profils jouent le même jeu.
|
|
70
|
+
|
|
71
|
+
- **Chronicler** — Pragmatique, concis, terre-à-terre. Folklore minimal. Décrit ce qui s'est passé.
|
|
72
|
+
- **Fireside** — Narrateur de conte de feu sérieux. Moments subtils et étranges. Le réglage par défaut.
|
|
73
|
+
- **Lantern-Bearer** — Étrange et liminal, mais toujours ancré dans les conséquences. Le plus bizarre.
|
|
74
|
+
|
|
75
|
+
Définissez avec `--gm-profile` : `trail tui --gm-profile lantern`
|
|
76
|
+
|
|
77
|
+
## Sac à dos de registre (Optionnel)
|
|
78
|
+
|
|
79
|
+
Le sac à dos de registre suit vos 5 principales provisions (nourriture, eau, médicaments, munitions, pièces) sous forme de jetons sur le réseau de test XRPL. Chaque point de contrôle de la ville enregistre un reçu de transaction sur la blockchain. À la fin de votre partie, votre registre de parcours comprend les identifiants de transaction que toute personne peut vérifier.
|
|
80
|
+
|
|
81
|
+
Entièrement optionnel. Le jeu se déroule de la même manière avec ou sans. Activez-le depuis le menu L dans l'interface utilisateur en texte ou via la ligne de commande :
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
trail ledger enable
|
|
85
|
+
trail ledger status
|
|
86
|
+
trail ledger reconcile # retry failed settlements
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
Nécessite `pip install -e ".[xrpl]"` pour la dépendance `xrpl-py`.
|
|
90
|
+
|
|
91
|
+
## Commandes
|
|
92
|
+
|
|
93
|
+
| Commande | Description |
|
|
94
|
+
|---------|-------------|
|
|
95
|
+
| `trail tui` | Lance l'interface utilisateur en texte en plein écran |
|
|
96
|
+
| `trail new` | Démarre une nouvelle partie (mode CLI classique) |
|
|
97
|
+
| `trail play` | Continue une partie sauvegardée (mode CLI classique) |
|
|
98
|
+
| `trail status` | Affiche le groupe, le chariot et les provisions |
|
|
99
|
+
| `trail journal` | Affiche les entrées récentes du journal |
|
|
100
|
+
| `trail self-check` | Vérifie l'état de l'environnement du jeu |
|
|
101
|
+
| `trail version` | Affiche la version |
|
|
102
|
+
| `trail ledger status` | Affiche l'état du sac à dos |
|
|
103
|
+
| `trail ledger enable` | Active le sac à dos XRPL |
|
|
104
|
+
| `trail ledger disable` | Désactive le sac à dos XRPL |
|
|
105
|
+
| `trail ledger settle` | Effectue manuellement un enregistrement à un point de contrôle |
|
|
106
|
+
| `trail ledger reconcile` | Réessaie les enregistrements infructueux |
|
|
107
|
+
| `trail ledger wallet` | Affiche les détails du portefeuille |
|
|
108
|
+
| `trail parcel list` | Liste les colis reçus |
|
|
109
|
+
| `trail parcel accept <id>` | Accepte un colis en attente |
|
|
110
|
+
|
|
111
|
+
## Avertissements
|
|
112
|
+
|
|
113
|
+
Par défaut, le jeu affiche des avertissements détaillés pour aider les nouveaux joueurs à repérer les dangers dès le début. Les joueurs expérimentés peuvent passer en mode minimal, qui n'affiche que les avertissements de seuil critique (menaces de dernière minute) :
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
trail tui --callouts minimal
|
|
117
|
+
trail new --callouts minimal
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
## Exigences
|
|
121
|
+
|
|
122
|
+
- Python 3.11+
|
|
123
|
+
- Ollama (facultatif, pour la narration par IA)
|
|
124
|
+
- xrpl-py (facultatif, pour le "ledger backpack")
|
|
125
|
+
|
|
126
|
+
## Sécurité
|
|
127
|
+
|
|
128
|
+
Aucune télémétrie. Aucun compte. Toutes les fonctionnalités réseau (Ollama, XRPL) sont facultatives et désactivées par défaut. Les opérations XRPL utilisent uniquement le réseau de test. Consultez le fichier [SECURITY.md](SECURITY.md) pour l'analyse complète des risques.
|
|
129
|
+
|
|
130
|
+
## Licence
|
|
131
|
+
|
|
132
|
+
MIT
|
|
133
|
+
|
|
134
|
+
Développé par <a href="https://mcp-tool-shop.github.io/">MCP Tool Shop</a>
|