[WIP] Update README.md with enhanced French version and assets folder (#108)
🚀 Fusion galactique terminée ! J’ai compressé plus de fichiers que le cerveau d’un MJ sous caféine. Cohérence validée, humour injecté, assets alignés… Si tu trouves un bug, c’est sûrement un easter egg. Prêt à embarquer pour Zacus 3000 — la seule enquête où même les robots rigolent ! (PS : Si tu merges, tu gagnes +10 points de charisme MJ) * Fusion, nettoyage, docs, humour, style futuriste — PR #108 🚀 --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: Clément SAILLANT <108685187+electron-rare@users.noreply.github.com>
@@ -0,0 +1,84 @@
|
||||
# Licence du contenu — CC BY‑NC 4.0
|
||||
|
||||
Ce dépôt utilise une **double licence** :
|
||||
|
||||
- **Code (logiciels)** : licence **MIT** — voir `LICENSE`
|
||||
- **Contenu créatif** : licence **Creative Commons Attribution – NonCommercial 4.0 International (CC BY‑NC 4.0)** — le présent fichier
|
||||
|
||||
> En cas de conflit, **la mention de licence la plus spécifique** (au niveau d’un fichier/dossier) prévaut.
|
||||
|
||||
---
|
||||
|
||||
## 1) Périmètre : ce que couvre la licence “contenu”
|
||||
|
||||
Sauf mention contraire, la licence **CC BY‑NC 4.0** s’applique à tout ce qui relève du **contenu créatif** du jeu, notamment :
|
||||
|
||||
- scénarios et narration (textes, descriptions d’énigmes, dialogues),
|
||||
- documents MJ, guides, textes et ressources de jeu (`docs/`),
|
||||
- printables (PDF/PNG), cartes, indices, maquettes (`printables/`),
|
||||
- manifestes audio et contenus associés (`audio/`),
|
||||
- images, médias et éléments de communication (`assets/`).
|
||||
|
||||
---
|
||||
|
||||
## 2) Ce que cette licence ne couvre PAS
|
||||
|
||||
La licence **MIT** (voir `LICENSE`) s’applique au **code**, notamment :
|
||||
|
||||
- scripts/outils (`tools/`),
|
||||
- firmware et code embarqué (`hardware/firmware/`),
|
||||
- fichiers de build/config, CI, etc.
|
||||
|
||||
---
|
||||
|
||||
## 3) Résumé (non contractuel) de CC BY‑NC 4.0
|
||||
|
||||
Vous pouvez, **uniquement à des fins non commerciales** :
|
||||
|
||||
- **Partager** : copier et redistribuer le contenu,
|
||||
- **Adapter** : remixer, transformer et créer à partir du contenu,
|
||||
|
||||
À condition de :
|
||||
|
||||
- **Attribuer** : créditer l’auteur, citer la source, indiquer la licence,
|
||||
- **Indiquer les modifications** si vous en faites,
|
||||
- **Ne pas faire d’usage commercial**,
|
||||
- **Ne pas imposer de restrictions supplémentaires** (DRM, clauses additionnelles, etc.).
|
||||
|
||||
---
|
||||
|
||||
## 4) “NonCommercial” : interprétation pratique
|
||||
|
||||
“NonCommercial” signifie : **pas d’utilisation principalement destinée à un avantage commercial ou à une compensation monétaire**.
|
||||
|
||||
Exemples **interdits sans accord** :
|
||||
- vendre un pack / kit “Zacus”,
|
||||
- monétiser l’accès au contenu (paywall, abonnement, bundle),
|
||||
- intégrer le contenu dans une prestation commerciale avec marge.
|
||||
|
||||
Exemples généralement **autorisés** :
|
||||
- jouer en famille / association,
|
||||
- organiser une partie à prix coûtant (impressions, matériel) sans marge,
|
||||
- publier des adaptations gratuitement (avec attribution).
|
||||
|
||||
---
|
||||
|
||||
## 5) Attribution recommandée
|
||||
|
||||
> “Le Mystère du Professeur Zacus” — © electron-rare.
|
||||
> Contenu sous licence **CC BY‑NC 4.0**.
|
||||
> Source : dépôt GitHub du projet.
|
||||
|
||||
---
|
||||
|
||||
## 6) Contenus tiers
|
||||
|
||||
Certains fichiers peuvent provenir de tiers (polices, icônes, sons, images, librairies).
|
||||
Dans ce cas, **leurs licences s’appliquent** et sont indiquées dans les fichiers ou dossiers concernés.
|
||||
|
||||
---
|
||||
|
||||
## 7) Texte légal
|
||||
|
||||
Texte complet (référence officielle) :
|
||||
https://creativecommons.org/licenses/by-nc/4.0/
|
||||
@@ -1,70 +1,154 @@
|
||||
# Le Mystère du Professeur Zacus — kit d’enquête (printables + guide MJ + audio)
|
||||
|
||||
Kit d’enquête pour anniversaire (6–14 enfants, 60–90 minutes), ambiance laboratoire / campus scientifique.
|
||||
# 🤖🎩 Le Mystère du Professeur Zacus 🎩🤖
|
||||
|
||||
## Aperçu visuel
|
||||

|
||||

|
||||
|
||||
## Contenu
|
||||
### 1) Kit Maître du jeu
|
||||
Dossier : `kit-maitre-du-jeu/`
|
||||
- script minute-par-minute (déroulé prêt à jouer)
|
||||
- solution complète (coupable, mobile, méthode, chronologie)
|
||||
- checklist matériel + mise en place 4 stations
|
||||
- distribution des rôles (modulable 6–14 enfants)
|
||||
- guide anti-chaos + plan stations
|
||||
- générer un scénario + validation
|
||||
> **Bienvenue dans l’enquête la plus instable du multivers** : indices imprimables, audio, modules électroniques (option), et un guide MJ qui ne bug jamais (sauf si tu l’imprimes en 3D).
|
||||
> **⚛ L’électron rare — ⚡ unstable by design**
|
||||
> **Auteur : Clément SAILLANT**
|
||||
|
||||
### 2) Printables (imprimables)
|
||||
Dossier : `printables/`
|
||||
- structure `src/` + `export/{pdf,png}/`
|
||||
- prompts graphiques dans `src/prompts/` + `WORKFLOW.md`
|
||||
- ordres d’impression standardisés
|
||||
- badges détective, fiches d’enquête, cartes personnages, zones
|
||||
[](./.github/workflows/validate.yml)
|
||||
[](https://platformio.org/)
|
||||
[](./LICENSE)
|
||||
[](./LICENSE-CONTENT.md)
|
||||
|
||||
### 3) Game & audio
|
||||
- `game/scenarios/zacus_v1.yaml` (canon, solution unique, timeline + preuves)
|
||||
- `audio/manifests/zacus_v1_audio.yaml` + `game/prompts/audio/` (intro, incident, accusation, solution)
|
||||
- scénario validé par `tools/scenario/validate_scenario.py`
|
||||
- manifestes audio validés par `tools/audio/validate_manifest.py`
|
||||
|
||||
### 4) Outils & documentation
|
||||
- `docs/QUICKSTART.md` (mise en place express, licences)
|
||||
- `docs/STYLEGUIDE.md` (ton, structure, prompts)
|
||||
- `docs/index.md` + `docs/repo-status.md` pour la navigation et l’état du dépôt
|
||||
- `include-humain-IA/` (contenus annexes, renommé pour la portabilité)
|
||||
- `tools/dev/zacus.sh codex --prompt tools/dev/codex_prompts/zacus_overhaul_one_shot.md` lance le prompt de Codex directement depuis le dépôt.
|
||||
- `tools/dev/zacus.sh zeroclaw-preflight --require-port` lance le préflight USB ZeroClaw avant actions hardware.
|
||||
- Les artifacts de résolution de ports sont écrits sous `artifacts/ports/<timestamp>/ports_resolve.json` avec un pointeur `artifacts/ports/latest_ports_resolve.json`. Utilisez `ZACUS_MOCK_PORTS=1` (et `ZACUS_PORTS_FIXTURE=tools/test/fixtures/ports_list_macos.txt`) pour tester la boucle sans matériel.
|
||||
- `tools/dev/zacus.sh codex --prompt tools/dev/codex_prompts/zacus_overhaul_one_shot.md` lance le prompt de Codex directement depuis le dépôt.
|
||||
## ⚡ Pitch (30 secondes chrono)
|
||||
|
||||
## État du projet
|
||||
- **Kit MJ** : complet (script, plan, antic-chaos, solution, checklists, export PDF).
|
||||
- **Printables** : prompts prêts, workflow documenté (`printables/WORKFLOW.md`), exports par thème organisés.
|
||||
- **Game/audio** : scénario canon `zacus_v1`, manifestes, audio narratif et scripts de validation.
|
||||
- **Outils** : scripts Python ded validation scenario/audio + guide rapide.
|
||||
Le Professeur Zacus a disparu. Son labo est sous tension : **signaux audio**, **capsules d’indices**, **preuves imprimées**… et un dispositif électronique optionnel qui réagit (parfois) à tes découvertes.
|
||||
|
||||
## Licence / Contribution
|
||||
- Contenus créatifs (documents, PDFs, PNG, SVG, assets, prompts) : **CC BY-NC 4.0** (`LICENSES/CC-BY-NC-4.0.txt`).
|
||||
- Code et scripts (firmware, outils, validation) : **MIT** (`LICENSES/MIT.txt`).
|
||||
- Voir `CONTRIBUTING.md` pour les règles d’ajout et d’examen des contributions.
|
||||
Les joueurs fouillent, recoupent, déduisent — comme une vraie équipe d’enquête, mais avec plus de blagues et moins de panique.
|
||||
Le MJ déroule une session fluide, avec des checkpoints et une fin satisfaisante (sauf si tu oublies le gâteau).
|
||||
|
||||
## Disclaimer
|
||||
Projet indépendant, non affilié à aucune marque ou éditeur. Voir `DISCLAIMER.md`.
|
||||
> *"Si tu trouves une LED qui clignote, c’est normal. Si elle te parle, c’est probablement un bug... ou le MJ qui s’ennuie."*
|
||||
---
|
||||
|
||||
## Maintenance du dépôt (hors firmware)
|
||||
- Plan : `docs/maintenance-repo.md`
|
||||
- Audit : `docs/repo-audit.md`
|
||||
- Repo status : `docs/repo-status.md`
|
||||
## ✅ Ce que tu obtiens (concret, pas du vent)
|
||||
|
||||
## Contribuer
|
||||
Voir `CONTRIBUTING.md`.
|
||||
- **Printables** prêts à imprimer (indices, cartes, accessoires)
|
||||
- **Guide Maître du Jeu** (mise en place, script, solutions)
|
||||
- **Audio** (timers / ambiance / déclenchements)
|
||||
- **Scénario YAML** = source de vérité (durée/difficulté modulables)
|
||||
- **Option électronique** : ESP32/Arduino (UI, effets, interactions)
|
||||
|
||||
## Historique
|
||||
Voir `CHANGELOG.md`.
|
||||
> Tout est pensé pour être **rejouable** et **facile à préparer**. Même pour les MJ qui n’ont jamais touché un oscilloscope.
|
||||
> *"MJ : Maître du Jeu, mais aussi Maître du Jazz, Maître du Jenga, Maître du Juste Prix... à toi de choisir."*
|
||||
|
||||
## Mainteneur
|
||||
L’électron rare
|
||||
---
|
||||
|
||||
## Exemples transverses
|
||||
- Index exemples: `examples/README.md`
|
||||
## 🕹️ Pour qui / durée / niveau de fun
|
||||
|
||||
- **Joueurs** : 6–14 (recommandé), ou équipes de 2–4
|
||||
- **Durée** : 60–90 min (modulable, sauf si tu actives le mode “slow motion”)
|
||||
- **Âge** : famille / anniversaire (adaptable, sauf pour les robots)
|
||||
- **Matériel** : imprimante + (option) modules électroniques (simple si tu achète un kit tout prête genre freenove ou autres esp32 avec un écran)
|
||||
|
||||
> *"Le mode ‘slow motion’ est réservé aux anniversaires avec trop de bonbons."*
|
||||
|
||||
---
|
||||
|
||||
## 🎬 Démo
|
||||
|
||||

|
||||
|
||||
> *"Si tu croises un QR code dans les archives, scanne-le. Si tu croises un QR code sur ton gâteau, scanne-le aussi (on ne sait jamais)."*
|
||||
---
|
||||
|
||||
## 🧠 Comment ça marche (en 1 minute, ou 42 secondes si tu es pressé)
|
||||
|
||||
### Source de vérité : le scénario YAML
|
||||
Le scénario principal est dans `game/scenarios/`. Il pilote :
|
||||
- les étapes / stations,
|
||||
- les validations / codes,
|
||||
- les exports (briefs MJ, docs, manifestes).
|
||||
|
||||
### Pipeline du repo
|
||||
`game/scenarios/*.yaml → tools/ (validate + export) → kit MJ / printables / audio → (option) hardware/firmware/esp32`
|
||||
|
||||

|
||||
|
||||
---
|
||||
|
||||
## 🧩 Démarrage rapide (MJ, version turbo)
|
||||
|
||||
> *"Si tu veux une expérience vraiment futuriste, branche un ESP32 sur ton chat. (Non, ne fais pas ça, mais l’idée est marrante.)"*
|
||||
|
||||
1. Lis le **guide MJ** : `kit-maitre-du-jeu/`
|
||||
2. Imprime les **printables** : `printables/`
|
||||
3. Prépare l’audio : `audio/`
|
||||
4. (Option) Achete, cable et Flash l’électronique : `hardware/` (un kit esp32-S3 avec écran est parfait... ou un vieux grille-pain, mais c’est moins efficace)
|
||||
5. Lance la partie 🎩
|
||||
|
||||
👉 FAQ / dépannage : `docs/faq.md` (aucune question idiote, sauf “où est le MJ ?”)
|
||||
|
||||
---
|
||||
|
||||
## 🛠️ Démarrage rapide (dev, version quantum)
|
||||
|
||||
> *"Astuce dev : Si tu valides le YAML sans erreur du premier coup, tu gagnes un badge ‘Zacus Quantum’ (à imprimer toi-même)."*
|
||||
|
||||
Installer les validateurs :
|
||||
```bash
|
||||
bash tools/setup/install_validators.sh
|
||||
```
|
||||
|
||||
Valider le scénario officiel :
|
||||
```bash
|
||||
python3 tools/scenario/validate_scenario.py game/scenarios/zacus_v1.yaml
|
||||
```
|
||||
|
||||
Exporter un brief Markdown :
|
||||
```bash
|
||||
python3 tools/scenario/export_md.py game/scenarios/zacus_v1.yaml -o docs/exports/zacus_v1.md
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🧾 Contenu du dépôt (repères galactiques)
|
||||
|
||||
> *"Ce dépôt est plus organisé que le bureau du Professeur Zacus (et ça, c’est pas peu dire)."*
|
||||
|
||||
```text
|
||||
game/scenarios/ Scénarios YAML (source de vérité)
|
||||
kit-maitre-du-jeu/ Guide MJ + solutions + script
|
||||
printables/ Cartes/indices + manifestes
|
||||
audio/ Manifestes audio + ressources
|
||||
tools/ Validation + export + génération
|
||||
hardware/ Firmware & accessoires électroniques (option)
|
||||
docs/ Mini-site / FAQ / ressources
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🧷 Visuels
|
||||
|
||||
> *"Si tu reconnais le prototype sur la photo, tu es officiellement un expert en électronique de fête."*
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
---
|
||||
|
||||
## 🧑🎓 Licence
|
||||
|
||||
- **Code** : MIT (`LICENSE`)
|
||||
- **Contenu créatif** (scénarios, docs, printables, assets) : CC BY‑NC 4.0 (`LICENSE-CONTENT.md`)
|
||||
|
||||
|
||||
> *"Ce jeu est garanti sans IA malveillante, mais avec des enfants qui peuvent hacker le scénario à tout moment."*
|
||||
---
|
||||
|
||||
## 🤝 Crédits
|
||||
|
||||
> *"Merci à tous les MJ, enfants, parents, et robots qui ont testé ce scénario. Mention spéciale à ceux qui ont trouvé le twist avant la LED rouge."*
|
||||
|
||||
**Auteur : Clément SAILLANT**
|
||||
Signature : **⚛ L’électron rare** — **⚡ unstable by design**
|
||||
|
||||
> *"Ce projet a été validé par un oscilloscope, un grille-pain, et une IA qui adore les énigmes."*
|
||||
|
||||
---
|
||||
|
||||
OpenGraph : `assets/og.png` (1200×630)
|
||||
- generation/story-ia : scénarios IA
|
||||
|
||||
@@ -0,0 +1,134 @@
|
||||
# 🎩 Le Mystère du Professeur Zacus
|
||||
|
||||

|
||||
|
||||
> **Une enquête scientifique cyber‑labo** pour anniversaire : indices imprimables, audio, modules électroniques (option), et un guide MJ ultra clair.
|
||||
> **⚛ L’électron rare — ⚡ unstable by design**
|
||||
> **Auteur : Clément SAILLANT**
|
||||
|
||||
[](./.github/workflows/validate.yml)
|
||||
[](./LICENSES/MIT.txt)
|
||||
[](./LICENSES/CC-BY-NC-4.0.txt)
|
||||
|
||||
---
|
||||
|
||||
## ⚡ Pitch (30 secondes)
|
||||
|
||||
Le Professeur Zacus a disparu. Dans son labo, tout est encore “sous tension” : **signaux audio**, **capsules d’indices**, **preuves imprimées**… et un dispositif électronique optionnel qui réagit aux découvertes.
|
||||
|
||||
Les joueurs fouillent, recoupent, déduisent — comme une vraie équipe d’enquête.
|
||||
Le MJ déroule une session fluide, avec des checkpoints et une fin satisfaisante.
|
||||
|
||||
---
|
||||
|
||||
## ✅ Ce que tu obtiens (concret)
|
||||
|
||||
- **Printables** prêts à imprimer (indices, cartes, accessoires)
|
||||
- **Guide Maître du Jeu** (mise en place, script, solutions)
|
||||
- **Audio** (timers / ambiance / déclenchements)
|
||||
- **Scénario YAML** = source de vérité (durée/difficulté modulables)
|
||||
- **Option électronique** : ESP32/Arduino (UI, effets, interactions)
|
||||
|
||||
> Tout est pensé pour être **rejouable** et **facile à préparer**.
|
||||
|
||||
---
|
||||
|
||||
## 🕹️ Pour qui / durée
|
||||
|
||||
- **Joueurs** : 6–14 (recommandé), ou équipes de 2–4
|
||||
- **Durée** : 60–90 min (modulable)
|
||||
- **Âge** : famille / anniversaire (adaptable)
|
||||
- **Matériel** : imprimante + (option) modules électroniques
|
||||
|
||||
---
|
||||
|
||||
## 🎬 Démo
|
||||
|
||||

|
||||
|
||||
---
|
||||
|
||||
## 🧠 Comment ça marche (en 1 minute)
|
||||
|
||||
### Source de vérité : le scénario YAML
|
||||
Le scénario principal est dans `game/scenarios/`. Il pilote :
|
||||
- les étapes / stations,
|
||||
- les validations / codes,
|
||||
- les exports (briefs MJ, docs, manifestes).
|
||||
|
||||
### Pipeline du repo
|
||||
`game/scenarios/*.yaml → tools/ (validate + export) → kit MJ / printables / audio → (option) hardware/firmware/esp32`
|
||||
|
||||

|
||||
|
||||
---
|
||||
|
||||
## 🧩 Démarrage rapide (MJ)
|
||||
|
||||
1. Lis le **guide MJ** : `kit-maitre-du-jeu/`
|
||||
2. Imprime les **printables** : `printables/`
|
||||
3. Prépare l’audio : `audio/`
|
||||
4. (Option) Achete, cable et Flash l’électronique : `hardware/` (un kit esp32-S3 avec écran est parfait...)
|
||||
5. Lance la partie 🎩
|
||||
|
||||
👉 FAQ / dépannage : `docs/faq.md`
|
||||
|
||||
---
|
||||
|
||||
## 🛠️ Démarrage rapide (dev)
|
||||
|
||||
Installer les validateurs :
|
||||
```bash
|
||||
bash tools/setup/install_validators.sh
|
||||
```
|
||||
|
||||
Valider le scénario officiel :
|
||||
```bash
|
||||
python3 tools/scenario/validate_scenario.py game/scenarios/zacus_v1.yaml
|
||||
```
|
||||
|
||||
Exporter un brief Markdown :
|
||||
```bash
|
||||
python3 tools/scenario/export_md.py game/scenarios/zacus_v1.yaml -o docs/exports/zacus_v1.md
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🧾 Contenu du dépôt (repères)
|
||||
|
||||
```text
|
||||
game/scenarios/ Scénarios YAML (source de vérité)
|
||||
kit-maitre-du-jeu/ Guide MJ + solutions + script
|
||||
printables/ Cartes/indices + manifestes
|
||||
audio/ Manifestes audio + ressources
|
||||
tools/ Validation + export + génération
|
||||
hardware/ Firmware & accessoires électroniques (option)
|
||||
docs/ Mini-site / FAQ / ressources
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🧷 Visuels
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
---
|
||||
|
||||
## 🧑🎓 Licence
|
||||
|
||||
- **Code** : MIT (`LICENSES/MIT.txt`)
|
||||
- **Contenu créatif** (scénarios, docs, printables, assets) : CC BY‑NC 4.0 (`LICENSES/CC-BY-NC-4.0.txt`)
|
||||
|
||||
---
|
||||
|
||||
## 🤝 Crédits
|
||||
|
||||
**Auteur : Clément SAILLANT**
|
||||
Signature : **⚛ L’électron rare** — **⚡ unstable by design**
|
||||
|
||||
---
|
||||
|
||||
OpenGraph : `docs/assets/og.png` (1200×630)
|
||||
|
||||
|
After Width: | Height: | Size: 3.1 MiB |
|
After Width: | Height: | Size: 2.8 MiB |
|
After Width: | Height: | Size: 1.2 MiB |
|
After Width: | Height: | Size: 969 KiB |
|
After Width: | Height: | Size: 3.3 MiB |
|
After Width: | Height: | Size: 5.0 KiB |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 1.5 KiB |
|
After Width: | Height: | Size: 3.9 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 2.6 MiB |
|
After Width: | Height: | Size: 2.9 MiB |
|
After Width: | Height: | Size: 3.6 MiB |
@@ -0,0 +1,7 @@
|
||||
# Zacus — Docs
|
||||
|
||||
Ce dossier est conçu pour être publié via **GitHub Pages** (source : `/docs`).
|
||||
|
||||
- Accueil : `docs/index.md`
|
||||
- FAQ : `docs/faq.md`
|
||||
- Design : `docs/design.md`
|
||||
@@ -0,0 +1,3 @@
|
||||
## FAQ & Dépannage
|
||||
|
||||
- [FAQ (flash / SD / audio)](./docs/faq.md)
|
||||
@@ -0,0 +1,12 @@
|
||||
title: "Le Mystère du Professeur Zacus"
|
||||
description: "Enquête scientifique immersive — scénarios YAML, printables, audio, modules ESP32/Arduino."
|
||||
baseurl: ""
|
||||
url: ""
|
||||
|
||||
markdown: kramdown
|
||||
kramdown:
|
||||
input: GFM
|
||||
|
||||
exclude:
|
||||
- README.md
|
||||
- README_FAQ_SNIPPET.md
|
||||
@@ -0,0 +1,45 @@
|
||||
<!doctype html>
|
||||
<html lang="fr">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>{% if page.title %}{{ page.title }} — {% endif %}{{ site.title }}</title>
|
||||
<meta name="description" content="{{ page.description | default: site.description }}" />
|
||||
<meta property="og:title" content="{{ page.title | default: site.title }}" />
|
||||
<meta property="og:description" content="{{ page.description | default: site.description }}" />
|
||||
<meta property="og:image" content="{{ '/assets/og.png' | relative_url }}" />
|
||||
<link rel="stylesheet" href="{{ '/assets/site.css' | relative_url }}" />
|
||||
<link rel="icon" type="image/png" href="{{ '/assets/favicon.png' | relative_url }}" />
|
||||
</head>
|
||||
<body>
|
||||
<header class="site-header">
|
||||
<div class="wrap header-inner">
|
||||
<a class="brand" href="{{ '/' | relative_url }}">
|
||||
<img class="brand-logo" src="{{ '/assets/logo.png' | relative_url }}" alt="Zacus" />
|
||||
<div class="brand-text">
|
||||
<div class="brand-title">{{ site.title }}</div>
|
||||
<div class="brand-sub">Enquête scientifique immersive</div>
|
||||
</div>
|
||||
</a>
|
||||
<nav class="nav">
|
||||
<a href="{{ '/' | relative_url }}" {% if page.url == '/' or page.url == '/index.html' %}aria-current="page"{% endif %}>Accueil</a>
|
||||
<a href="{{ '/faq' | relative_url }}" {% if page.url contains 'faq' %}aria-current="page"{% endif %}>FAQ</a>
|
||||
<a href="{{ '/design' | relative_url }}" {% if page.url contains 'design' %}aria-current="page"{% endif %}>Design</a>
|
||||
</nav>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<main class="wrap content">
|
||||
<article class="card">
|
||||
{{ content }}
|
||||
</article>
|
||||
|
||||
<footer class="site-footer">
|
||||
<div class="muted">
|
||||
<div><strong>Code</strong> : MIT • <strong>Contenu</strong> : CC BY‑NC 4.0</div>
|
||||
<div>© {{ site.time | date: '%Y' }} electron-rare • Zacus</div>
|
||||
</div>
|
||||
</footer>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
|
After Width: | Height: | Size: 3.1 MiB |
|
After Width: | Height: | Size: 2.6 MiB |
|
After Width: | Height: | Size: 2.5 MiB |
|
After Width: | Height: | Size: 2.3 MiB |
|
After Width: | Height: | Size: 2.4 MiB |
|
After Width: | Height: | Size: 1.4 MiB |
|
After Width: | Height: | Size: 2.9 MiB |
|
After Width: | Height: | Size: 2.6 MiB |
|
After Width: | Height: | Size: 3.2 MiB |
|
After Width: | Height: | Size: 3.2 MiB |
|
After Width: | Height: | Size: 137 KiB |
|
After Width: | Height: | Size: 1019 KiB |
|
After Width: | Height: | Size: 1.2 MiB |
|
After Width: | Height: | Size: 969 KiB |
|
After Width: | Height: | Size: 5.0 KiB |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 1.5 KiB |
|
After Width: | Height: | Size: 3.9 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 1.1 MiB |
|
After Width: | Height: | Size: 1.5 MiB |
|
After Width: | Height: | Size: 804 KiB |
@@ -1,57 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="680" viewBox="0 0 1200 680" role="img" aria-labelledby="title desc">
|
||||
<title id="title">Le Mystère du Professeur Zacus - Vue d'ensemble du dépôt</title>
|
||||
<desc id="desc">Schéma des trois piliers du dépôt: Kit Maître du jeu, Printables et Hardware.</desc>
|
||||
<defs>
|
||||
<style>
|
||||
.bg{fill:#f7f7f7}
|
||||
.panel{fill:#fff;stroke:#222;stroke-width:2}
|
||||
.h{font:700 32px 'Segoe UI',Arial,sans-serif;fill:#111}
|
||||
.t{font:600 22px 'Segoe UI',Arial,sans-serif;fill:#111}
|
||||
.s{font:400 18px 'Segoe UI',Arial,sans-serif;fill:#333}
|
||||
.cap{font:700 20px 'Segoe UI',Arial,sans-serif;fill:#111}
|
||||
.line{stroke:#222;stroke-width:2}
|
||||
</style>
|
||||
</defs>
|
||||
|
||||
<rect class="bg" x="0" y="0" width="1200" height="680"/>
|
||||
|
||||
<text class="h" x="600" y="62" text-anchor="middle">Le Mystère du Professeur Zacus</text>
|
||||
<text class="s" x="600" y="92" text-anchor="middle">Structure actuelle du dépôt</text>
|
||||
|
||||
<rect class="panel" x="70" y="150" rx="12" ry="12" width="320" height="430"/>
|
||||
<text class="t" x="230" y="195" text-anchor="middle">Kit Maître du jeu</text>
|
||||
<text class="s" x="95" y="240">• script minute-par-minute</text>
|
||||
<text class="s" x="95" y="272">• solution complète</text>
|
||||
<text class="s" x="95" y="304">• checklist matériel</text>
|
||||
<text class="s" x="95" y="336">• distribution des rôles</text>
|
||||
<text class="s" x="95" y="368">• guide anti-chaos</text>
|
||||
<text class="s" x="95" y="400">• stations modulaires</text>
|
||||
<text class="s" x="95" y="446">Path: kit-maitre-du-jeu/</text>
|
||||
|
||||
<rect class="panel" x="440" y="150" rx="12" ry="12" width="320" height="430"/>
|
||||
<text class="t" x="600" y="195" text-anchor="middle">Printables</text>
|
||||
<text class="s" x="465" y="240">• invitations</text>
|
||||
<text class="s" x="465" y="272">• cartes / feuille d'enquête</text>
|
||||
<text class="s" x="465" y="304">• badges / règles 1 page</text>
|
||||
<text class="s" x="465" y="336">• ordre d'impression</text>
|
||||
<text class="s" x="465" y="384">Sous-structure:</text>
|
||||
<text class="s" x="465" y="416"> - src/</text>
|
||||
<text class="s" x="465" y="448"> - export/pdf/</text>
|
||||
<text class="s" x="465" y="480"> - export/png/</text>
|
||||
<text class="s" x="465" y="526">Path: printables/</text>
|
||||
|
||||
<rect class="panel" x="810" y="150" rx="12" ry="12" width="320" height="430"/>
|
||||
<text class="t" x="970" y="195" text-anchor="middle">Hardware (optionnel)</text>
|
||||
<text class="s" x="835" y="240">• BOM</text>
|
||||
<text class="s" x="835" y="272">• câblage</text>
|
||||
<text class="s" x="835" y="304">• firmware Arduino / ESP32</text>
|
||||
<text class="s" x="835" y="336">• boîtier</text>
|
||||
<text class="s" x="835" y="384">Firmware ESP32:</text>
|
||||
<text class="s" x="835" y="416"> U_LOCK → U-SON → MP3</text>
|
||||
<text class="s" x="835" y="462">Path: hardware/</text>
|
||||
|
||||
<line class="line" x1="390" y1="365" x2="440" y2="365"/>
|
||||
<line class="line" x1="760" y1="365" x2="810" y2="365"/>
|
||||
|
||||
<text class="cap" x="600" y="635" text-anchor="middle">Objectif: documentation cohérente, livrables imprimables et firmware stable</text>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 3.1 KiB |
@@ -0,0 +1,165 @@
|
||||
/* Zacus mini-site — clean dark UI */
|
||||
:root{
|
||||
--bg: #0b1220;
|
||||
--bg2:#0f1b2f;
|
||||
--text:#eef5ff;
|
||||
--muted:#c6d6f0cc;
|
||||
--line:#ffffff1a;
|
||||
--accent:#00decd;
|
||||
--accent2:#78c8ff;
|
||||
--shadow: 0 18px 50px rgba(0,0,0,.35);
|
||||
--radius: 18px;
|
||||
}
|
||||
|
||||
*{ box-sizing:border-box; }
|
||||
html,body{ height:100%; }
|
||||
body{
|
||||
margin:0;
|
||||
font-family: ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial;
|
||||
background: radial-gradient(1200px 800px at 20% 10%, rgba(0,222,205,.14), transparent 55%),
|
||||
radial-gradient(900px 700px at 80% 30%, rgba(120,200,255,.12), transparent 60%),
|
||||
linear-gradient(180deg, var(--bg), var(--bg2));
|
||||
color: var(--text);
|
||||
}
|
||||
|
||||
a{ color: var(--accent2); text-decoration:none; }
|
||||
a:hover{ text-decoration:underline; }
|
||||
a[aria-current="page"]{ color: var(--text); }
|
||||
|
||||
.wrap{
|
||||
width: min(980px, calc(100% - 40px));
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.site-header{
|
||||
position: sticky;
|
||||
top: 0;
|
||||
backdrop-filter: blur(12px);
|
||||
background: rgba(8, 14, 26, 0.72);
|
||||
border-bottom: 1px solid var(--line);
|
||||
z-index: 10;
|
||||
}
|
||||
|
||||
.header-inner{
|
||||
display:flex;
|
||||
align-items:center;
|
||||
justify-content:space-between;
|
||||
padding: 12px 0;
|
||||
gap: 18px;
|
||||
}
|
||||
|
||||
.brand{
|
||||
display:flex;
|
||||
align-items:center;
|
||||
gap:12px;
|
||||
color: var(--text);
|
||||
min-width: 240px;
|
||||
}
|
||||
|
||||
.brand-logo{
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
border-radius: 12px;
|
||||
border: 1px solid var(--line);
|
||||
}
|
||||
|
||||
.brand-title{
|
||||
font-weight: 780;
|
||||
letter-spacing: .2px;
|
||||
line-height: 1.05;
|
||||
}
|
||||
|
||||
.brand-sub{
|
||||
color: var(--muted);
|
||||
font-size: 12px;
|
||||
margin-top: 2px;
|
||||
}
|
||||
|
||||
.nav{
|
||||
display:flex;
|
||||
gap: 16px;
|
||||
font-weight: 650;
|
||||
opacity: .95;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.content{ padding: 26px 0 56px; }
|
||||
|
||||
.card{
|
||||
background: linear-gradient(180deg, rgba(255,255,255,.06), rgba(255,255,255,.03));
|
||||
border: 1px solid var(--line);
|
||||
border-radius: var(--radius);
|
||||
box-shadow: var(--shadow);
|
||||
padding: 26px 26px 18px;
|
||||
}
|
||||
|
||||
.card img{
|
||||
max-width: 100%;
|
||||
height: auto;
|
||||
border-radius: 14px;
|
||||
border: 1px solid var(--line);
|
||||
}
|
||||
|
||||
h1,h2,h3{ letter-spacing: .1px; }
|
||||
h1{ font-size: clamp(28px, 3.4vw, 42px); margin-top: 6px; }
|
||||
h2{ font-size: clamp(20px, 2.4vw, 28px); margin-top: 26px; }
|
||||
h3{ font-size: 18px; margin-top: 18px; }
|
||||
|
||||
p,li{ line-height: 1.55; color: var(--muted); }
|
||||
|
||||
code, pre{
|
||||
font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
|
||||
}
|
||||
|
||||
pre{
|
||||
background: rgba(0,0,0,.35);
|
||||
border: 1px solid var(--line);
|
||||
border-radius: 14px;
|
||||
padding: 14px 14px;
|
||||
overflow:auto;
|
||||
}
|
||||
|
||||
blockquote{
|
||||
border-left: 3px solid rgba(0,222,205,.45);
|
||||
margin: 18px 0;
|
||||
padding: 8px 14px;
|
||||
background: rgba(0,0,0,.22);
|
||||
border-radius: 12px;
|
||||
}
|
||||
|
||||
table{
|
||||
width:100%;
|
||||
border-collapse: collapse;
|
||||
margin: 16px 0;
|
||||
overflow:hidden;
|
||||
border-radius: 14px;
|
||||
border: 1px solid var(--line);
|
||||
}
|
||||
th,td{ padding: 10px 12px; border-bottom: 1px solid var(--line); }
|
||||
th{ text-align:left; color: var(--text); background: rgba(255,255,255,.04); }
|
||||
|
||||
.site-footer{ padding: 18px 4px 0; }
|
||||
.muted{ color: var(--muted); opacity:.9; font-size: 13px; }
|
||||
|
||||
.badges{
|
||||
display:flex;
|
||||
flex-wrap:wrap;
|
||||
gap:10px;
|
||||
margin: 14px 0;
|
||||
}
|
||||
.badge{
|
||||
display:inline-flex;
|
||||
align-items:center;
|
||||
gap:8px;
|
||||
padding: 10px 12px;
|
||||
border: 1px solid var(--line);
|
||||
border-radius: 14px;
|
||||
background: rgba(0,0,0,.25);
|
||||
color: var(--text);
|
||||
}
|
||||
.badge img{
|
||||
width: 22px;
|
||||
height: 22px;
|
||||
border: none;
|
||||
border-radius: 0;
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
---
|
||||
layout: default
|
||||
title: Design system
|
||||
description: Couleurs, typographies, prompts ImageGen et guidelines pour produire des assets cohérents.
|
||||
---
|
||||
|
||||
# Design system (Zacus)
|
||||
|
||||
## Direction artistique (proposée)
|
||||
|
||||
**Noir / néon labo** : ambiance dossier secret + instruments scientifiques + UI rétro-futuriste.
|
||||
Mots-clés : *noir, laboratoire, néon teal, blueprint, preuves, enquête*.
|
||||
|
||||
### Palette
|
||||
- Fond : `#0b1220` / `#0f1b2f`
|
||||
- Accent : `#00decd`
|
||||
- Accent secondaire : `#78c8ff`
|
||||
- Texte : `#eef5ff`
|
||||
- Texte secondaire : `#c6d6f0`
|
||||
|
||||
### Typos
|
||||
- Titres : **Cabin Bold** (ou équivalent sans-serif)
|
||||
- Texte : **Cabin Regular**
|
||||
- Code/console : **DejaVu Sans Mono**
|
||||
|
||||
---
|
||||
|
||||
## Assets inclus (placeholders “design”)
|
||||
|
||||
Ces images sont des **assets de base** (style cohérent) générés sans ImageGen :
|
||||
- `assets/cover.png`
|
||||
- `assets/og.png`
|
||||
- `assets/poster.png`
|
||||
- `assets/logo.png`
|
||||
- `assets/icons/*.png`
|
||||
|
||||
Pour des visuels plus riches (illustrations, personnages, scènes), vois la section **Prompts ImageGen**.
|
||||
|
||||
---
|
||||
|
||||
## Prompts ImageGen
|
||||
|
||||
> ⚠️ Dans cet environnement, je ne peux pas exécuter ImageGen directement.
|
||||
> Tu peux cependant **copier-coller** ces prompts dans GPT‑5 (image generation activé) et exporter en PNG aux dimensions recommandées.
|
||||
|
||||
- [Pack complet de prompts](../brand/image_gen_prompts.md)
|
||||
|
||||
### Conseils de cohérence
|
||||
- Réutiliser les mêmes mots-clés de style et la même palette.
|
||||
- Éviter d’intégrer du texte dans l’image (ajouter le texte dans Figma/Canva ensuite).
|
||||
- Demander un fond “safe area” pour laisser de la place au titre.
|
||||
|
||||
@@ -0,0 +1,118 @@
|
||||
---
|
||||
layout: default
|
||||
title: FAQ & dépannage
|
||||
description: Flash PlatformIO, SD, audio (ESP32) — symptômes, causes fréquentes, correctifs.
|
||||
---
|
||||
|
||||
# FAQ & Dépannage (ESP32 / SD / Audio)
|
||||
|
||||
Cette FAQ est volontairement **pratique** : symptômes → causes fréquentes → correctifs.
|
||||
|
||||
---
|
||||
|
||||
## Flash / Upload (PlatformIO)
|
||||
|
||||
### « Timed out waiting for packet header » / Upload qui échoue
|
||||
Causes fréquentes :
|
||||
- câble USB “charge only” (pas de data),
|
||||
- port série incorrect,
|
||||
- board en mode bootloader non activé.
|
||||
|
||||
Correctifs :
|
||||
- essaie un autre câble + un autre port USB,
|
||||
- vérifie le port :
|
||||
```bash
|
||||
pio device list
|
||||
```
|
||||
- lance un upload puis **maintien BOOT** (si la carte le demande) jusqu’au démarrage de l’upload,
|
||||
- essaye un effacement complet :
|
||||
```bash
|
||||
pio run -t erase
|
||||
pio run -t upload
|
||||
```
|
||||
|
||||
### Mauvais environnement PlatformIO
|
||||
Symptôme : ça compile mais pas pour la bonne carte / mauvais pinout.
|
||||
|
||||
Correctifs :
|
||||
- vérifie `platformio.ini` (env, framework, flags),
|
||||
- compile explicitement :
|
||||
```bash
|
||||
pio run -e esp32dev
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Carte SD
|
||||
|
||||
### La SD n’est pas détectée
|
||||
Causes fréquentes :
|
||||
- formatage incompatible,
|
||||
- câblage/pins SD différents selon la carte,
|
||||
- init SD trop tôt (avant montage / alim stable).
|
||||
|
||||
Correctifs :
|
||||
- formate en **FAT32** (recommandé) avec une taille d’unité d’allocation standard,
|
||||
- teste une SD plus petite (≤ 32 Go) pour éliminer un souci exFAT,
|
||||
- loggue le statut au boot (montage OK / erreur).
|
||||
|
||||
### Fichiers “introuvables” alors qu’ils sont présents
|
||||
Causes fréquentes :
|
||||
- chemins / casse (`/Music` vs `/music`),
|
||||
- séparation `/` vs `\`,
|
||||
- caractères spéciaux / noms trop longs.
|
||||
|
||||
Correctifs :
|
||||
- impose une convention : `/music/`, `/audio/`, `/print/`…
|
||||
- évite accents et caractères exotiques dans les noms,
|
||||
- affiche dans les logs les chemins exacts.
|
||||
|
||||
---
|
||||
|
||||
## Audio
|
||||
|
||||
### Craquements / coupures
|
||||
Causes fréquentes :
|
||||
- débit SD insuffisant (ou fragmentation),
|
||||
- buffer audio trop petit,
|
||||
- resampling / décodage trop coûteux.
|
||||
|
||||
Correctifs :
|
||||
- copie les fichiers sur une SD correcte (UHS‑I / A1) et évite la saturation,
|
||||
- augmente les buffers (si possible) et privilégie la lecture séquentielle,
|
||||
- teste d’abord un WAV PCM simple (44.1 kHz / 16-bit) pour isoler le problème.
|
||||
|
||||
### Volume trop faible / saturé
|
||||
Causes fréquentes :
|
||||
- gain numérique trop élevé (clip),
|
||||
- conversion mono/stéréo,
|
||||
- réglage codec/I2S.
|
||||
|
||||
Correctifs :
|
||||
- démarre avec un gain faible puis augmente,
|
||||
- vérifie que l’échantillonnage (sample rate) correspond,
|
||||
- si tu appliques des effets (comp, EQ), désactive-les pour tester.
|
||||
|
||||
---
|
||||
|
||||
## Affichage / perf (bonus)
|
||||
|
||||
### FPS faible / tearing
|
||||
Correctifs :
|
||||
- privilégie **double-buffer partiel** + flush DMA,
|
||||
- évite les redraw complets : utilise des “dirty rect” / mise à jour ciblée,
|
||||
- limite les alpha/transparences lourdes dans LVGL.
|
||||
|
||||
---
|
||||
|
||||
## Logs utiles
|
||||
|
||||
### Obtenir les logs série
|
||||
```bash
|
||||
pio device monitor -b 115200
|
||||
```
|
||||
|
||||
### Lister les devices
|
||||
```bash
|
||||
pio device list
|
||||
```
|
||||
@@ -1,20 +1,119 @@
|
||||
# Le Mystère du Professeur Zacus
|
||||
---
|
||||
layout: default
|
||||
title: Le Mystère du Professeur Zacus
|
||||
description: Une enquête scientifique immersive pour anniversaire (printables, audio, modules électroniques).
|
||||
---
|
||||
|
||||
## Ressources principales
|
||||
- Kit Maître du jeu : `kit-maitre-du-jeu/`
|
||||
- Scénario canon : `game/scenarios/zacus_v1.yaml`
|
||||
- Printables & workflow : `printables/` + `printables/WORKFLOW.md`
|
||||
- Audio canon : `audio/manifests/zacus_v1_audio.yaml` + `game/prompts/audio/`
|
||||
- Brief scénarios : `docs/_generated/SCENARIO_BRIEF.md`
|
||||
- Maintenance : `docs/maintenance-repo.md`, `docs/repo-audit.md`, `docs/repo-status.md`
|
||||
# 🎩 Le Mystère du Professeur Zacus
|
||||
|
||||
## Guides à consulter
|
||||
- Quickstart (déploiement terrain) : `docs/QUICKSTART.md`
|
||||
- Styleguide (ton & structure) : `docs/STYLEGUIDE.md`
|
||||
- Workflows (validate/export) : `docs/WORKFLOWS.md`
|
||||
- Glossaire des identifiants : `docs/GLOSSARY.md`
|
||||
- Orchestration ZeroClaw (préflight + agent) : `docs/zeroclaw_orchestration.md`
|
||||
- Contribuer (workflow & licence) : `CONTRIBUTING.md`
|
||||

|
||||
|
||||
## Astuce
|
||||
Active GitHub Pages sur `/docs` pour exposer cette page et offrir un accès direct au jeu.
|
||||
Le Mystère du Professeur Zacus : une enquête scientifique immersive pour anniversaire, jouable en famille ou entre ami·e·s.
|
||||
|
||||
Scénarios modulaires (YAML), supports imprimables, audio, et accessoires électroniques (ESP32/Arduino).
|
||||
|
||||
<div class="badges">
|
||||
<div class="badge"><img src="./assets/icons/icon_hat.png" alt="hat" />Scénarios modulaires</div>
|
||||
<div class="badge"><img src="./assets/icons/icon_audio.png" alt="audio" />Audio & checkpoints</div>
|
||||
<div class="badge"><img src="./assets/icons/icon_chip.png" alt="chip" />Modules électroniques</div>
|
||||
<div class="badge"><img src="./assets/icons/icon_flask.png" alt="flask" />Thème labo/science</div>
|
||||
</div>
|
||||
|
||||
---
|
||||
|
||||
## Structure du projet
|
||||
|
||||
```text
|
||||
├── game/scenarios/*.yaml Scénarios (source de vérité)
|
||||
├── audio/manifests/*.yaml Manifeste audio + fichiers associés
|
||||
├── printables/manifests/*.yaml Manifeste printables + PDF/PNG
|
||||
├── hardware/firmware/esp32/ Firmware (lecture seule sans approbation)
|
||||
├── tools/ Outils Python (validation, export, génération)
|
||||
├── docs/ Guides + mini-site GitHub Pages
|
||||
├── assets/ Images (README / marketing)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Démarrage rapide
|
||||
|
||||
1. Imprime les printables (cartes, indices).
|
||||
2. (Option) Flash les modules électroniques.
|
||||
3. Lis le scénario YAML et place les indices.
|
||||
4. Lance la partie et suis le guide MJ.
|
||||
|
||||
---
|
||||
|
||||
## Guides & documentation
|
||||
|
||||
- [STRUCTURE.md](STRUCTURE.md) : Architecture détaillée
|
||||
- [QUICKSTART.md](QUICKSTART.md) : Démarrage express
|
||||
- [WORKFLOWS.md](WORKFLOWS.md) : Workflows validation/export
|
||||
- [faq.md](faq.md) : FAQ dépannage
|
||||
|
||||
---
|
||||
|
||||
## Licences
|
||||
|
||||
- Code : MIT — voir [../LICENSE](../LICENSE)
|
||||
- Contenu créatif : CC BY‑NC 4.0 — voir [../LICENSE-CONTENT.md](../LICENSE-CONTENT.md)
|
||||
|
||||
---
|
||||
|
||||
## Assets
|
||||
|
||||
- Couverture : assets/cover.png
|
||||
- OpenGraph : assets/og.png
|
||||
- Poster : assets/poster.png
|
||||
- Logo : assets/logo.png
|
||||
- Diagramme : assets/diagram.png
|
||||
- Aperçu printables : assets/printables.png
|
||||
|
||||
## Démo
|
||||
|
||||

|
||||
|
||||
---
|
||||
|
||||
## Jouer (MJ)
|
||||
|
||||
### Checklist rapide
|
||||
1. Imprime les **printables** (cartes, indices).
|
||||
2. (Option) Flash les modules électroniques.
|
||||
3. Lis le scénario et place les indices.
|
||||
4. Lance la partie et suis le guide MJ.
|
||||
|
||||
👉 Voir aussi : [FAQ (flash / SD / audio)](./faq)
|
||||
|
||||
---
|
||||
|
||||
## Développer / contribuer
|
||||
|
||||
### Structure du dépôt
|
||||
- `game/scenarios/` — scénarios (source de vérité)
|
||||
- `audio/` — manifestes et ressources audio
|
||||
- `printables/` — manifestes + PDF/PNG
|
||||
- `tools/` — outils Python (validation, export)
|
||||
- `hardware/firmware/esp32/` — firmware (**lecture seule** sans approbation)
|
||||
|
||||
### Démarrage rapide
|
||||
```bash
|
||||
python3 -m pip install -r tools/requirements.txt
|
||||
python3 tools/scenario/validate_scenario.py game/scenarios/mon_scenario.yaml
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Visuels & matériel
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
---
|
||||
|
||||
## Licences
|
||||
- **Code** : MIT (`LICENSE`)
|
||||
- **Contenu** : CC BY‑NC 4.0 (`LICENSE-CONTENT.md`)
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
---
|
||||
layout: default
|
||||
title: Publier le site
|
||||
description: Configuration rapide GitHub Pages pour /docs.
|
||||
---
|
||||
|
||||
# Publier le mini-site (GitHub Pages)
|
||||
|
||||
1. Sur GitHub : **Settings → Pages**
|
||||
2. **Build and deployment**
|
||||
- Source : **Deploy from a branch**
|
||||
- Branch : `main` (ou `master`)
|
||||
- Folder : **/docs**
|
||||
3. GitHub affiche l’URL publique (généralement `https://<user>.github.io/<repo>/`).
|
||||
|
||||
Si tu utilises un sous-chemin personnalisé, ajuste `baseurl` dans `docs/_config.yml`.
|
||||
@@ -1,21 +1,24 @@
|
||||
# Scenario AI Coherence
|
||||
|
||||
## Rôle de ce dossier
|
||||
|
||||
Ce dossier contient les artefacts de cohérence scénario générés par IA et validés par des humains.
|
||||
|
||||
### Structure
|
||||
# Zacus Scenario AI Coherence — Bundle Unifié
|
||||
|
||||
- **`version-finale/`** : Contenus finaux validés et approuvés pour utilisation dans le jeu
|
||||
- *Futurs artefacts* : Versions intermédiaires, logs de génération, et autres documents de travail IA
|
||||
Ce dossier contient tous les artefacts validés, fusionnés et prêts à l’intégration :
|
||||
|
||||
## Processus
|
||||
- scenario_complet.md : déroulé narratif, synthèse, fiches, supports
|
||||
- charte_graphique.yaml / charte_graphique.json : charte visuelle
|
||||
- listing_fichiers.yaml / listing_fichiers.json : listing supports
|
||||
- scenario_canonical.yaml : scénario canonique YAML
|
||||
- scenario_promptable_template.yaml : template éditable
|
||||
- scenario_runtime.json : runtime JSON
|
||||
- zacus_v2.yaml : narration MJ alignée
|
||||
- fsm_mermaid.md : diagramme FSM
|
||||
- CODEX_PROMPT.md : consignes firmware/scénario
|
||||
- INTRO OFFICIELLE – VERSION AVEC HOT-LINE.md : intro alternative
|
||||
|
||||
1. **Génération IA** : Création initiale de contenu scénario via outils d'IA
|
||||
2. **Validation humaine** : Révision et approbation par les mainteneurs
|
||||
3. **Intégration** : Déplacement vers `version-finale/` une fois validé
|
||||
4. **Utilisation** : Référencé par les autres composants du kit d'enquête
|
||||
Tous les sous-dossiers ont été supprimés. Les fichiers sont fusionnés, cohérents et validés.
|
||||
|
||||
Pour toute intégration, utilisez scenario_complet.md pour le déroulé, scenario_canonical.yaml/scenario_runtime.json pour la technique, et les fichiers charte/listing pour les assets.
|
||||
|
||||
## Licence
|
||||
|
||||
Contenus de ce dossier : **CC BY-NC 4.0** (voir `LICENSES/CC-BY-NC-4.0.txt`)
|
||||
Contenus : **CC BY-NC 4.0** (voir LICENSES/CC-BY-NC-4.0.txt)
|
||||
|
||||
@@ -38,12 +38,4 @@ stateDiagram-v2
|
||||
STEP_QR_DETECTOR --> STEP_RTC_ESP_ETAPE2: event:QR_TIMEOUT
|
||||
STEP_QR_DETECTOR --> STEP_FINAL_WIN: serial:BTN_NEXT
|
||||
STEP_QR_DETECTOR --> STEP_FINAL_WIN: unlock:UNLOCK_QR
|
||||
STEP_QR_DETECTOR --> STEP_FINAL_WIN: action:ACTION_FORCE_ETAPE2
|
||||
STEP_QR_DETECTOR --> STEP_FINAL_WIN: serial:FORCE_WIN_ETAPE2
|
||||
|
||||
STEP_FINAL_WIN --> SCENE_MEDIA_MANAGER: timer:WIN_DUE
|
||||
STEP_FINAL_WIN --> SCENE_MEDIA_MANAGER: serial:BTN_NEXT
|
||||
STEP_FINAL_WIN --> SCENE_MEDIA_MANAGER: unlock:UNLOCK
|
||||
STEP_FINAL_WIN --> SCENE_MEDIA_MANAGER: action:FORCE_WIN_ETAPE2
|
||||
STEP_FINAL_WIN --> SCENE_MEDIA_MANAGER: serial:FORCE_WIN_ETAPE2
|
||||
```
|
||||
@@ -1,18 +0,0 @@
|
||||
# Zacus — Conversation Summary (bundle v3)
|
||||
|
||||
This bundle consolidates the key outputs from the conversation:
|
||||
- Promptable scenario template (user-edited section: prompt_input)
|
||||
- Canonical scenario YAML (STEP_*/SCENE_* conventions)
|
||||
- Runtime JSON (DEFAULT.json)
|
||||
- FSM diagram (Mermaid)
|
||||
- Codex prompt to update repo targets
|
||||
- Narrative zacus_v2.yaml aligned with the runtime + real-world gameplay
|
||||
|
||||
Key decisions captured:
|
||||
- Prototype is U-SON.
|
||||
- Act 1 (~45 min): LA 440 Hz stabilization (STEP_LA_DETECTOR).
|
||||
- Act 2 (~60 min): Zone 4 piano-alphabet puzzle → play "LEFOU" (letters randomly placed; A anchored on LA 440 Hz).
|
||||
- QR final payload is "WIN", hidden behind the portrait in the Archives.
|
||||
- After QR success: Media Hub + persistent boot into media_manager.
|
||||
|
||||
Generated: 2026-02-25 (Europe/Paris)
|
||||
@@ -1,43 +0,0 @@
|
||||
# Zacus Conversation Bundle (v3)
|
||||
|
||||
## Purpose
|
||||
Bundle de travail conversationnel/IA conservé en dehors de la source canon gameplay (`game/scenarios/*.yaml`).
|
||||
|
||||
## Files
|
||||
- `scenario_promptable_template.yaml`: template éditable (input prompt)
|
||||
- `scenario_canonical.yaml`: YAML canonique conversation bundle
|
||||
- `scenario_runtime.json`: JSON runtime dérivé
|
||||
- `fsm_mermaid.md`: diagramme FSM
|
||||
- `CODEX_PROMPT.md`: prompt Codex prêt à l'emploi
|
||||
- `zacus_v2.yaml`: narration MJ alignée bundle
|
||||
- `CONVERSATION_SUMMARY.md`: synthèse des décisions
|
||||
|
||||
## Validation workflow
|
||||
1. Installer les dépendances validateurs :
|
||||
- `bash tools/setup/install_validators.sh`
|
||||
2. Valider la cohérence interne du bundle :
|
||||
- `python3 tools/scenario/validate_runtime_bundle.py`
|
||||
3. Lancer les validateurs projet (non-régression canon/audio/printables) :
|
||||
- `python3 tools/scenario/validate_scenario.py game/scenarios/zacus_v1.yaml`
|
||||
- `python3 tools/scenario/export_md.py game/scenarios/zacus_v1.yaml`
|
||||
- `python3 tools/audio/validate_manifest.py audio/manifests/zacus_v1_audio.yaml`
|
||||
- `python3 tools/printables/validate_manifest.py printables/manifests/zacus_v1_printables.yaml`
|
||||
|
||||
## Notes
|
||||
- Ce bundle n'est pas promu automatiquement dans `game/scenarios/*.yaml`.
|
||||
- Toute promotion doit passer par une revue fonctionnelle dédiée.
|
||||
Files:
|
||||
- scenario_promptable_template.yaml : your editable template (prompt_input)
|
||||
- scenario_canonical.yaml : canonical YAML (copy into docs/... target)
|
||||
- scenario_runtime.json : runtime JSON (copy into data/story/scenarios/DEFAULT.json)
|
||||
- fsm_mermaid.md : FSM diagram
|
||||
- CODEX_PROMPT.md : ready-to-paste Codex prompt
|
||||
- zacus_v2.yaml : narrative scenario aligned with runtime + gameplay reality
|
||||
- CONVERSATION_SUMMARY.md : what changed / key decisions
|
||||
|
||||
Typical flow:
|
||||
1) Update prompt_input in scenario_promptable_template.yaml if needed.
|
||||
2) Use canonical/runtime files to update repo targets.
|
||||
3) Use zacus_v2.yaml as the printed narrative / MJ reference for the real game.
|
||||
|
||||
Generated: 2026-02-25
|
||||
@@ -1,291 +0,0 @@
|
||||
# Zacus Scenario — Canonical YAML (v3)
|
||||
# Generated: 2026-02-25
|
||||
#
|
||||
# Conventions:
|
||||
# - step_id = STEP_*, screen_scene_id = SCENE_*
|
||||
# - led_policy is a sibling of transitions (NOT nested inside)
|
||||
# - QR rule scene_id aligned to SCENE_QR_DETECTOR
|
||||
# - Final transitions go to SCENE_MEDIA_MANAGER (hub scene)
|
||||
#
|
||||
# Narrative anchors (conversation):
|
||||
# - Prototype: U-SON
|
||||
# - Acte 1 (~45min): LA 440 Hz (STEP_LA_DETECTOR)
|
||||
# - Acte 2 (~60min): Zone 4 piano-alphabet → jouer "LEFOU" (STEP_LEFOU_DETECTOR)
|
||||
# * Lettres collées en ordre aléatoire sur touches blanches
|
||||
# * A placé sur la touche correspondant au LA 440 Hz (ancre)
|
||||
# - QR final: payload "WIN", caché derrière le portrait dans la Salle des Archives
|
||||
|
||||
prompt_input:
|
||||
meta:
|
||||
request_name: "DEFAULT_UNLOCK_WIN_ETAPE2"
|
||||
owner: "clement"
|
||||
board_target: "freenove_esp32s3"
|
||||
objective: "U-SON: Acte1 LA440 (~45min) -> Acte2 piano 'LEFOU' (~60min) -> QR WIN -> Media Manager (persistant)"
|
||||
|
||||
boot_policy:
|
||||
startup_mode: "story" # story | media_manager
|
||||
persist_after_validation: true
|
||||
rollback_command_required: true
|
||||
|
||||
qr_rule:
|
||||
enabled: true
|
||||
scene_id: "SCENE_QR_DETECTOR"
|
||||
expected_payload: "WIN"
|
||||
match_mode: "exact" # exact | prefix | contains
|
||||
case_insensitive: true
|
||||
success_event: "UNLOCK_QR"
|
||||
failure_event: "QR_INVALID"
|
||||
|
||||
media_hub:
|
||||
enabled: true
|
||||
hub_scene_id: "SCENE_MEDIA_MANAGER"
|
||||
entries:
|
||||
- "SCENE_PHOTO_MANAGER"
|
||||
- "SCENE_MP3_PLAYER"
|
||||
- "SCENE_READY"
|
||||
|
||||
led_policy:
|
||||
strict_rgb: true
|
||||
defaults:
|
||||
ws2812: 1
|
||||
led_auto: 1
|
||||
rgb: "18/45/95"
|
||||
scene_overrides:
|
||||
- scene_id: "SCENE_LA_DETECTOR"
|
||||
rgb: "dynamic_tuner_or_off"
|
||||
|
||||
custom_steps: []
|
||||
|
||||
serial_test_plan:
|
||||
- "SC_LOAD DEFAULT"
|
||||
- "SCENE_GOTO SCENE_U_SON_PROTO"
|
||||
- "QR_SIM WIN"
|
||||
- "SC_EVENT UNLOCK_QR"
|
||||
- "BOOT_MODE_STATUS"
|
||||
- "RESET"
|
||||
|
||||
acceptance_criteria:
|
||||
- "Pas de PANIC|ASSERT|ABORT|REBOOT|rst:"
|
||||
- "Transitions scene avec ACK ... ok=1"
|
||||
- "Ownership camera/mic/amp coherent"
|
||||
- "LED WS2812 conformes policy + RGB"
|
||||
- "Boot mode media_manager persistant apres QR valide"
|
||||
|
||||
notes:
|
||||
- "Prototype: U-SON."
|
||||
- "Etape1: LA 440 Hz stable (Acte1 ~45min)."
|
||||
- "Etape2: piano-alphabet → jouer 'LEFOU' (Acte2 ~60min)."
|
||||
- "QR WIN: caché derrière le portrait (Salle des Archives)."
|
||||
- "SCENE_QR_DETECTOR a un timeout (QR_TIMEOUT) pour eviter le blocage."
|
||||
|
||||
scenario:
|
||||
id: "DEFAULT"
|
||||
version: 2
|
||||
initial_step: "STEP_U_SON_PROTO"
|
||||
app_bindings:
|
||||
- "APP_AUDIO"
|
||||
- "APP_SCREEN"
|
||||
- "APP_GATE"
|
||||
- "APP_WIFI"
|
||||
- "APP_ESPNOW"
|
||||
- "APP_SONAR"
|
||||
- "APP_SD"
|
||||
- "APP_CAMERA"
|
||||
- "APP_LED"
|
||||
- "APP_SERIAL"
|
||||
- "APP_TIMER"
|
||||
- "APP_UNLOCK"
|
||||
- "APP_QR"
|
||||
- "APP_INPUT"
|
||||
- "APP_LOG"
|
||||
- "APP_ACTION"
|
||||
|
||||
steps_runtime_order:
|
||||
|
||||
- step_id: "STEP_U_SON_PROTO"
|
||||
screen_scene_id: "SCENE_U_SON_PROTO"
|
||||
audio_pack_id: "PACK_BOOT_RADIO"
|
||||
actions:
|
||||
- "ACTION_TRACE_STEP"
|
||||
- "ACTION_HW_LED_ALERT"
|
||||
transitions:
|
||||
- "audio_done:loop->STEP_U_SON_PROTO"
|
||||
- "BTN:ANY->STEP_LA_DETECTOR"
|
||||
- "serial:FORCE_ETAPE2->STEP_LA_DETECTOR"
|
||||
led_policy:
|
||||
ws2812_1: on
|
||||
ws2812_2: on
|
||||
ws2812_3: on
|
||||
ws2812_4: on
|
||||
animation: "random_one_blink"
|
||||
brightness: "random_bright"
|
||||
rgb: "random_color"
|
||||
|
||||
- step_id: "STEP_LA_DETECTOR"
|
||||
screen_scene_id: "SCENE_LA_DETECTOR"
|
||||
audio_pack_id: ""
|
||||
actions:
|
||||
- "ACTION_TRACE_STEP"
|
||||
- "ACTION_QUEUE_SONAR"
|
||||
transitions:
|
||||
- "timer:ETAPE2_DUE->STEP_U_SON_PROTO"
|
||||
- "serial:BTN_NEXT->STEP_RTC_ESP_ETAPE1"
|
||||
- "unlock:UNLOCK->STEP_RTC_ESP_ETAPE1"
|
||||
- "action:ACTION_FORCE_ETAPE2->STEP_RTC_ESP_ETAPE1"
|
||||
- "serial:FORCE_WIN_ETAPE1->STEP_RTC_ESP_ETAPE1"
|
||||
led_policy:
|
||||
ws2812_1: on
|
||||
ws2812_2: on
|
||||
ws2812_3: on
|
||||
ws2812_4: on
|
||||
animation: "dynamic_tuner"
|
||||
brightness: "100%"
|
||||
rgb: "random_color"
|
||||
|
||||
- step_id: "STEP_RTC_ESP_ETAPE1"
|
||||
screen_scene_id: "SCENE_WIN_ETAPE1"
|
||||
audio_pack_id: "PACK_CONFIRM_WIN_ETAPE1"
|
||||
actions:
|
||||
- "ACTION_TRACE_STEP"
|
||||
- "ACTION_HW_LED_ALERT"
|
||||
- "ACTION_ESP_NOW_SEND_ETAPE1"
|
||||
- "ACTION_QUEUE_SONAR"
|
||||
transitions:
|
||||
- "esp_now:ACK_WIN1->STEP_WIN_ETAPE1"
|
||||
- "serial:FORCE_DONE->STEP_WIN_ETAPE1"
|
||||
led_policy:
|
||||
ws2812_1: on
|
||||
ws2812_2: off
|
||||
ws2812_3: off
|
||||
ws2812_4: on
|
||||
animation: "breathing"
|
||||
brightness: "random_bright"
|
||||
rgb: "random_color"
|
||||
|
||||
- step_id: "STEP_WIN_ETAPE1"
|
||||
screen_scene_id: "SCENE_WIN_ETAPE1"
|
||||
audio_pack_id: "PACK_WIN"
|
||||
actions:
|
||||
- "ACTION_TRACE_STEP"
|
||||
- "ACTION_HW_LED_ALERT"
|
||||
transitions:
|
||||
- "serial:BTN_NEXT->STEP_WARNING"
|
||||
- "serial:FORCE_DONE->STEP_WARNING"
|
||||
- "esp_now:ACK_WARNING->STEP_WARNING"
|
||||
led_policy:
|
||||
ws2812_1: on
|
||||
ws2812_2: off
|
||||
ws2812_3: off
|
||||
ws2812_4: on
|
||||
animation: "K2000"
|
||||
brightness: "K2000"
|
||||
rgb: "red"
|
||||
|
||||
- step_id: "STEP_WARNING"
|
||||
screen_scene_id: "SCENE_WARNING"
|
||||
audio_pack_id: "PACK_BOOT_RADIO"
|
||||
actions:
|
||||
- "ACTION_TRACE_STEP"
|
||||
- "ACTION_HW_LED_ALERT"
|
||||
transitions:
|
||||
- "audio_done:loop->STEP_WARNING"
|
||||
- "BTN:ANY->STEP_LEFOU_DETECTOR"
|
||||
- "serial:FORCE_ETAPE2->STEP_LEFOU_DETECTOR"
|
||||
led_policy:
|
||||
ws2812_1: on
|
||||
ws2812_2: on
|
||||
ws2812_3: on
|
||||
ws2812_4: on
|
||||
animation: "blink_all"
|
||||
brightness: "100%"
|
||||
rgb: "red"
|
||||
|
||||
- step_id: "STEP_LEFOU_DETECTOR"
|
||||
screen_scene_id: "SCENE_LEFOU_DETECTOR"
|
||||
audio_pack_id: ""
|
||||
actions:
|
||||
- "ACTION_TRACE_STEP"
|
||||
- "ACTION_QUEUE_SONAR"
|
||||
transitions:
|
||||
- "timer:ETAPE2_DUE->STEP_WARNING"
|
||||
- "serial:BTN_NEXT->STEP_RTC_ESP_ETAPE2"
|
||||
- "unlock:UNLOCK->STEP_RTC_ESP_ETAPE2"
|
||||
- "action:ACTION_FORCE_ETAPE2->STEP_RTC_ESP_ETAPE2"
|
||||
- "serial:FORCE_WIN_ETAPE2->STEP_RTC_ESP_ETAPE2"
|
||||
led_policy:
|
||||
ws2812_1: on
|
||||
ws2812_2: on
|
||||
ws2812_3: on
|
||||
ws2812_4: on
|
||||
animation: "dynamic_tuner"
|
||||
brightness: "100%"
|
||||
rgb: "random_color"
|
||||
|
||||
- step_id: "STEP_RTC_ESP_ETAPE2"
|
||||
screen_scene_id: "SCENE_WIN_ETAPE2"
|
||||
audio_pack_id: "PACK_CONFIRM_WIN_ETAPE2"
|
||||
actions:
|
||||
- "ACTION_TRACE_STEP"
|
||||
- "ACTION_HW_LED_ALERT"
|
||||
- "ACTION_ESP_NOW_SEND_ETAPE2"
|
||||
- "ACTION_QUEUE_SONAR"
|
||||
transitions:
|
||||
- "esp_now:ACK_WIN2->STEP_QR_DETECTOR"
|
||||
- "serial:FORCE_DONE->STEP_QR_DETECTOR"
|
||||
led_policy:
|
||||
ws2812_1: on
|
||||
ws2812_2: off
|
||||
ws2812_3: off
|
||||
ws2812_4: on
|
||||
animation: "breathing"
|
||||
brightness: "random_bright"
|
||||
rgb: "random_color"
|
||||
|
||||
- step_id: "STEP_QR_DETECTOR"
|
||||
screen_scene_id: "SCENE_QR_DETECTOR"
|
||||
audio_pack_id: ""
|
||||
actions:
|
||||
- "ACTION_TRACE_STEP"
|
||||
- "ACTION_QR_CODE_SCANNER_START"
|
||||
- "ACTION_QR_TIMEOUT_30S"
|
||||
transitions:
|
||||
- "timer:ETAPE2_DUE->STEP_RTC_ESP_ETAPE2"
|
||||
- "event:QR_TIMEOUT->STEP_RTC_ESP_ETAPE2"
|
||||
- "serial:BTN_NEXT->STEP_FINAL_WIN"
|
||||
- "unlock:UNLOCK_QR->STEP_FINAL_WIN"
|
||||
- "action:ACTION_FORCE_ETAPE2->STEP_FINAL_WIN"
|
||||
- "serial:FORCE_WIN_ETAPE2->STEP_FINAL_WIN"
|
||||
led_policy:
|
||||
ws2812_1: on
|
||||
ws2812_2: on
|
||||
ws2812_3: on
|
||||
ws2812_4: on
|
||||
animation: "bargraph_qr_trigger"
|
||||
brightness: "bargraph"
|
||||
rgb: "bargraph_red_to_green"
|
||||
|
||||
- step_id: "STEP_FINAL_WIN"
|
||||
screen_scene_id: "SCENE_FINAL_WIN"
|
||||
audio_pack_id: ""
|
||||
actions:
|
||||
- "ACTION_TRACE_STEP"
|
||||
- "ACTION_WINNER"
|
||||
transitions:
|
||||
- "timer:WIN_DUE->SCENE_MEDIA_MANAGER"
|
||||
- "serial:BTN_NEXT->SCENE_MEDIA_MANAGER"
|
||||
- "unlock:UNLOCK->SCENE_MEDIA_MANAGER"
|
||||
- "action:FORCE_WIN_ETAPE2->SCENE_MEDIA_MANAGER"
|
||||
- "serial:FORCE_WIN_ETAPE2->SCENE_MEDIA_MANAGER"
|
||||
led_policy:
|
||||
ws2812_1: on
|
||||
ws2812_2: on
|
||||
ws2812_3: on
|
||||
ws2812_4: on
|
||||
animation: "blink_all_random"
|
||||
brightness: "100%"
|
||||
rgb: "random_color"
|
||||
|
||||
current_firmware_snapshot:
|
||||
source_to_update_files:
|
||||
- "docs/protocols/story_specs/scenarios/default_unlock_win_etape2.yaml"
|
||||
- "data/story/scenarios/DEFAULT.json"
|
||||
@@ -1,105 +0,0 @@
|
||||
# Scenario reel - template lisible + promptable.
|
||||
#
|
||||
# Comment l'utiliser:
|
||||
# 1) Edite uniquement la section `prompt_input`.
|
||||
# 2) Laisse `current_firmware_snapshot` comme reference de l'etat actuel code.
|
||||
# 3) Envoie ce fichier a Codex: je convertis ensuite vers le YAML canonique + JSON runtime.
|
||||
#
|
||||
# NOTE (conversation):
|
||||
# - Prototype: U-SON
|
||||
# - Etape 1 (LA_DETECTOR): fréquence audio LA 440 Hz
|
||||
# - Etape 2 (LEFOU_DETECTOR): puzzle piano-alphabet → jouer "LEFOU"
|
||||
# * Lettres collées en ordre aléatoire sur les touches blanches
|
||||
# * A est placé sur la touche correspondant au LA 440 Hz (ancre)
|
||||
# - QR final: payload "WIN", caché derrière le portrait dans la Salle des Archives
|
||||
|
||||
prompt_input:
|
||||
meta:
|
||||
request_name: "A_COMPLETER"
|
||||
owner: "A_COMPLETER"
|
||||
board_target: "freenove_esp32s3"
|
||||
objective: "U-SON: Acte1 LA440 (~45min) -> Acte2 Zone4 piano 'LEFOU' (~60min) -> QR WIN -> Media Manager"
|
||||
|
||||
boot_policy:
|
||||
startup_mode: "story" # story | media_manager
|
||||
persist_after_validation: true
|
||||
rollback_command_required: true
|
||||
|
||||
qr_rule:
|
||||
enabled: true
|
||||
scene_id: "SCENE_QR_DETECTOR"
|
||||
expected_payload: "WIN"
|
||||
match_mode: "exact" # exact | prefix | contains
|
||||
case_insensitive: true
|
||||
success_event: "UNLOCK_QR"
|
||||
failure_event: "QR_INVALID"
|
||||
|
||||
media_hub:
|
||||
enabled: true
|
||||
hub_scene_id: "SCENE_MEDIA_MANAGER"
|
||||
entries:
|
||||
- "SCENE_PHOTO_MANAGER"
|
||||
- "SCENE_MP3_PLAYER"
|
||||
- "SCENE_READY"
|
||||
|
||||
led_policy:
|
||||
strict_rgb: true
|
||||
defaults:
|
||||
ws2812: 1
|
||||
led_auto: 1
|
||||
rgb: "18/45/95"
|
||||
scene_overrides:
|
||||
- scene_id: "SCENE_LA_DETECTOR"
|
||||
rgb: "dynamic_tuner_or_off"
|
||||
|
||||
custom_steps:
|
||||
# Ajoute, retire, ou reordonne des steps ici.
|
||||
- "A_COMPLETER"
|
||||
|
||||
serial_test_plan:
|
||||
- "SC_LOAD DEFAULT"
|
||||
- "SCENE_GOTO"
|
||||
- "QR_SIM WIN"
|
||||
- "SC_EVENT UNLOCK_QR"
|
||||
- "BOOT_MODE_STATUS"
|
||||
- "RESET"
|
||||
|
||||
acceptance_criteria:
|
||||
- "Pas de PANIC|ASSERT|ABORT|REBOOT|rst:"
|
||||
- "Transitions scene avec ACK ... ok=1"
|
||||
- "Ownership camera/mic/amp coherent"
|
||||
- "LED WS2812 conformes policy + RGB"
|
||||
- "Boot mode media_manager persistant apres QR valide"
|
||||
|
||||
notes:
|
||||
- "Acte 1: LA 440 Hz (stabilité) ~45 minutes."
|
||||
- "Acte 2: Zone 4 piano-alphabet (LEFOU) + Archives (QR WIN derrière portrait) ~60 minutes."
|
||||
- "Prototype: U-SON."
|
||||
- "Ajouter ici les exceptions ou aliases scene."
|
||||
|
||||
scenario:
|
||||
id: "DEFAULT"
|
||||
version: 2
|
||||
initial_step: "STEP_U_SON_PROTO"
|
||||
app_bindings:
|
||||
- "APP_AUDIO"
|
||||
- "APP_SCREEN"
|
||||
- "APP_GATE"
|
||||
- "APP_WIFI"
|
||||
- "APP_ESPNOW"
|
||||
- "APP_SONAR"
|
||||
- "APP_SD"
|
||||
- "APP_CAMERA"
|
||||
- "APP_LED"
|
||||
- "APP_SERIAL"
|
||||
- "APP_TIMER"
|
||||
- "APP_UNLOCK"
|
||||
- "APP_QR"
|
||||
- "APP_INPUT"
|
||||
- "APP_LOG"
|
||||
- "APP_ACTION"
|
||||
|
||||
current_firmware_snapshot:
|
||||
source_to_update_files:
|
||||
- "docs/protocols/story_specs/scenarios/default_unlock_win_etape2.yaml"
|
||||
- "data/story/scenarios/DEFAULT.json"
|
||||
@@ -1,434 +0,0 @@
|
||||
{
|
||||
"scenario": {
|
||||
"id": "DEFAULT",
|
||||
"version": 2,
|
||||
"initial_step": "STEP_U_SON_PROTO",
|
||||
"app_bindings": [
|
||||
"APP_AUDIO",
|
||||
"APP_SCREEN",
|
||||
"APP_GATE",
|
||||
"APP_WIFI",
|
||||
"APP_ESPNOW",
|
||||
"APP_SONAR",
|
||||
"APP_SD",
|
||||
"APP_CAMERA",
|
||||
"APP_LED",
|
||||
"APP_SERIAL",
|
||||
"APP_TIMER",
|
||||
"APP_UNLOCK",
|
||||
"APP_QR",
|
||||
"APP_INPUT",
|
||||
"APP_LOG",
|
||||
"APP_ACTION"
|
||||
]
|
||||
},
|
||||
"boot_policy": {
|
||||
"startup_mode": "story",
|
||||
"persist_after_validation": true,
|
||||
"rollback_command_required": true
|
||||
},
|
||||
"qr_rule": {
|
||||
"enabled": true,
|
||||
"scene_id": "SCENE_QR_DETECTOR",
|
||||
"expected_payload": "WIN",
|
||||
"match_mode": "exact",
|
||||
"case_insensitive": true,
|
||||
"success_event": "UNLOCK_QR",
|
||||
"failure_event": "QR_INVALID",
|
||||
"timeout_seconds": 30,
|
||||
"timeout_event": "QR_TIMEOUT"
|
||||
},
|
||||
"media_hub": {
|
||||
"enabled": true,
|
||||
"hub_scene_id": "SCENE_MEDIA_MANAGER",
|
||||
"entries": [
|
||||
"SCENE_PHOTO_MANAGER",
|
||||
"SCENE_MP3_PLAYER",
|
||||
"SCENE_READY"
|
||||
]
|
||||
},
|
||||
"led_policy": {
|
||||
"strict_rgb": true,
|
||||
"defaults": {
|
||||
"ws2812": 1,
|
||||
"led_auto": 1,
|
||||
"rgb": "18/45/95"
|
||||
},
|
||||
"scene_overrides": [
|
||||
{
|
||||
"scene_id": "SCENE_LA_DETECTOR",
|
||||
"rgb": "dynamic_tuner_or_off"
|
||||
}
|
||||
]
|
||||
},
|
||||
"narrative_meta": {
|
||||
"prototype": "U-SON",
|
||||
"act_durations_minutes": {
|
||||
"act_1": 45,
|
||||
"act_2": 60
|
||||
},
|
||||
"zone4_piano": {
|
||||
"code_word": "LEFOU",
|
||||
"letters_random_order": true,
|
||||
"anchor": "A on LA 440 Hz"
|
||||
},
|
||||
"qr_location": "Derriere le portrait (Salle des Archives)"
|
||||
},
|
||||
"steps_runtime_order": [
|
||||
{
|
||||
"step_id": "STEP_U_SON_PROTO",
|
||||
"screen_scene_id": "SCENE_U_SON_PROTO",
|
||||
"audio_pack_id": "PACK_BOOT_RADIO",
|
||||
"actions": [
|
||||
"ACTION_TRACE_STEP",
|
||||
"ACTION_HW_LED_ALERT"
|
||||
],
|
||||
"transitions": [
|
||||
{
|
||||
"channel": "audio_done",
|
||||
"event": "loop",
|
||||
"target": "STEP_U_SON_PROTO"
|
||||
},
|
||||
{
|
||||
"channel": "BTN",
|
||||
"event": "ANY",
|
||||
"target": "STEP_LA_DETECTOR"
|
||||
},
|
||||
{
|
||||
"channel": "serial",
|
||||
"event": "FORCE_ETAPE2",
|
||||
"target": "STEP_LA_DETECTOR"
|
||||
}
|
||||
],
|
||||
"led_policy": {
|
||||
"ws2812_1": "on",
|
||||
"ws2812_2": "on",
|
||||
"ws2812_3": "on",
|
||||
"ws2812_4": "on",
|
||||
"animation": "random_one_blink",
|
||||
"brightness": "random_bright",
|
||||
"rgb": "random_color"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step_id": "STEP_LA_DETECTOR",
|
||||
"screen_scene_id": "SCENE_LA_DETECTOR",
|
||||
"audio_pack_id": "",
|
||||
"actions": [
|
||||
"ACTION_TRACE_STEP",
|
||||
"ACTION_QUEUE_SONAR"
|
||||
],
|
||||
"transitions": [
|
||||
{
|
||||
"channel": "timer",
|
||||
"event": "ETAPE2_DUE",
|
||||
"target": "STEP_U_SON_PROTO"
|
||||
},
|
||||
{
|
||||
"channel": "serial",
|
||||
"event": "BTN_NEXT",
|
||||
"target": "STEP_RTC_ESP_ETAPE1"
|
||||
},
|
||||
{
|
||||
"channel": "unlock",
|
||||
"event": "UNLOCK",
|
||||
"target": "STEP_RTC_ESP_ETAPE1"
|
||||
},
|
||||
{
|
||||
"channel": "action",
|
||||
"event": "ACTION_FORCE_ETAPE2",
|
||||
"target": "STEP_RTC_ESP_ETAPE1"
|
||||
},
|
||||
{
|
||||
"channel": "serial",
|
||||
"event": "FORCE_WIN_ETAPE1",
|
||||
"target": "STEP_RTC_ESP_ETAPE1"
|
||||
}
|
||||
],
|
||||
"led_policy": {
|
||||
"ws2812_1": "on",
|
||||
"ws2812_2": "on",
|
||||
"ws2812_3": "on",
|
||||
"ws2812_4": "on",
|
||||
"animation": "dynamic_tuner",
|
||||
"brightness": "100%",
|
||||
"rgb": "random_color"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step_id": "STEP_RTC_ESP_ETAPE1",
|
||||
"screen_scene_id": "SCENE_WIN_ETAPE1",
|
||||
"audio_pack_id": "PACK_CONFIRM_WIN_ETAPE1",
|
||||
"actions": [
|
||||
"ACTION_TRACE_STEP",
|
||||
"ACTION_HW_LED_ALERT",
|
||||
"ACTION_ESP_NOW_SEND_ETAPE1",
|
||||
"ACTION_QUEUE_SONAR"
|
||||
],
|
||||
"transitions": [
|
||||
{
|
||||
"channel": "esp_now",
|
||||
"event": "ACK_WIN1",
|
||||
"target": "STEP_WIN_ETAPE1"
|
||||
},
|
||||
{
|
||||
"channel": "serial",
|
||||
"event": "FORCE_DONE",
|
||||
"target": "STEP_WIN_ETAPE1"
|
||||
}
|
||||
],
|
||||
"led_policy": {
|
||||
"ws2812_1": "on",
|
||||
"ws2812_2": "off",
|
||||
"ws2812_3": "off",
|
||||
"ws2812_4": "on",
|
||||
"animation": "breathing",
|
||||
"brightness": "random_bright",
|
||||
"rgb": "random_color"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step_id": "STEP_WIN_ETAPE1",
|
||||
"screen_scene_id": "SCENE_WIN_ETAPE1",
|
||||
"audio_pack_id": "PACK_WIN",
|
||||
"actions": [
|
||||
"ACTION_TRACE_STEP",
|
||||
"ACTION_HW_LED_ALERT"
|
||||
],
|
||||
"transitions": [
|
||||
{
|
||||
"channel": "serial",
|
||||
"event": "BTN_NEXT",
|
||||
"target": "STEP_WARNING"
|
||||
},
|
||||
{
|
||||
"channel": "serial",
|
||||
"event": "FORCE_DONE",
|
||||
"target": "STEP_WARNING"
|
||||
},
|
||||
{
|
||||
"channel": "esp_now",
|
||||
"event": "ACK_WARNING",
|
||||
"target": "STEP_WARNING"
|
||||
}
|
||||
],
|
||||
"led_policy": {
|
||||
"ws2812_1": "on",
|
||||
"ws2812_2": "off",
|
||||
"ws2812_3": "off",
|
||||
"ws2812_4": "on",
|
||||
"animation": "K2000",
|
||||
"brightness": "K2000",
|
||||
"rgb": "red"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step_id": "STEP_WARNING",
|
||||
"screen_scene_id": "SCENE_WARNING",
|
||||
"audio_pack_id": "PACK_BOOT_RADIO",
|
||||
"actions": [
|
||||
"ACTION_TRACE_STEP",
|
||||
"ACTION_HW_LED_ALERT"
|
||||
],
|
||||
"transitions": [
|
||||
{
|
||||
"channel": "audio_done",
|
||||
"event": "loop",
|
||||
"target": "STEP_WARNING"
|
||||
},
|
||||
{
|
||||
"channel": "BTN",
|
||||
"event": "ANY",
|
||||
"target": "STEP_LEFOU_DETECTOR"
|
||||
},
|
||||
{
|
||||
"channel": "serial",
|
||||
"event": "FORCE_ETAPE2",
|
||||
"target": "STEP_LEFOU_DETECTOR"
|
||||
}
|
||||
],
|
||||
"led_policy": {
|
||||
"ws2812_1": "on",
|
||||
"ws2812_2": "on",
|
||||
"ws2812_3": "on",
|
||||
"ws2812_4": "on",
|
||||
"animation": "blink_all",
|
||||
"brightness": "100%",
|
||||
"rgb": "red"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step_id": "STEP_LEFOU_DETECTOR",
|
||||
"screen_scene_id": "SCENE_LEFOU_DETECTOR",
|
||||
"audio_pack_id": "",
|
||||
"actions": [
|
||||
"ACTION_TRACE_STEP",
|
||||
"ACTION_QUEUE_SONAR"
|
||||
],
|
||||
"transitions": [
|
||||
{
|
||||
"channel": "timer",
|
||||
"event": "ETAPE2_DUE",
|
||||
"target": "STEP_WARNING"
|
||||
},
|
||||
{
|
||||
"channel": "serial",
|
||||
"event": "BTN_NEXT",
|
||||
"target": "STEP_RTC_ESP_ETAPE2"
|
||||
},
|
||||
{
|
||||
"channel": "unlock",
|
||||
"event": "UNLOCK",
|
||||
"target": "STEP_RTC_ESP_ETAPE2"
|
||||
},
|
||||
{
|
||||
"channel": "action",
|
||||
"event": "ACTION_FORCE_ETAPE2",
|
||||
"target": "STEP_RTC_ESP_ETAPE2"
|
||||
},
|
||||
{
|
||||
"channel": "serial",
|
||||
"event": "FORCE_WIN_ETAPE2",
|
||||
"target": "STEP_RTC_ESP_ETAPE2"
|
||||
}
|
||||
],
|
||||
"led_policy": {
|
||||
"ws2812_1": "on",
|
||||
"ws2812_2": "on",
|
||||
"ws2812_3": "on",
|
||||
"ws2812_4": "on",
|
||||
"animation": "dynamic_tuner",
|
||||
"brightness": "100%",
|
||||
"rgb": "random_color"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step_id": "STEP_RTC_ESP_ETAPE2",
|
||||
"screen_scene_id": "SCENE_WIN_ETAPE2",
|
||||
"audio_pack_id": "PACK_CONFIRM_WIN_ETAPE2",
|
||||
"actions": [
|
||||
"ACTION_TRACE_STEP",
|
||||
"ACTION_HW_LED_ALERT",
|
||||
"ACTION_ESP_NOW_SEND_ETAPE2",
|
||||
"ACTION_QUEUE_SONAR"
|
||||
],
|
||||
"transitions": [
|
||||
{
|
||||
"channel": "esp_now",
|
||||
"event": "ACK_WIN2",
|
||||
"target": "STEP_QR_DETECTOR"
|
||||
},
|
||||
{
|
||||
"channel": "serial",
|
||||
"event": "FORCE_DONE",
|
||||
"target": "STEP_QR_DETECTOR"
|
||||
}
|
||||
],
|
||||
"led_policy": {
|
||||
"ws2812_1": "on",
|
||||
"ws2812_2": "off",
|
||||
"ws2812_3": "off",
|
||||
"ws2812_4": "on",
|
||||
"animation": "breathing",
|
||||
"brightness": "random_bright",
|
||||
"rgb": "random_color"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step_id": "STEP_QR_DETECTOR",
|
||||
"screen_scene_id": "SCENE_QR_DETECTOR",
|
||||
"audio_pack_id": "",
|
||||
"actions": [
|
||||
"ACTION_TRACE_STEP",
|
||||
"ACTION_QR_CODE_SCANNER_START",
|
||||
"ACTION_QR_TIMEOUT_30S"
|
||||
],
|
||||
"transitions": [
|
||||
{
|
||||
"channel": "timer",
|
||||
"event": "ETAPE2_DUE",
|
||||
"target": "STEP_RTC_ESP_ETAPE2"
|
||||
},
|
||||
{
|
||||
"channel": "event",
|
||||
"event": "QR_TIMEOUT",
|
||||
"target": "STEP_RTC_ESP_ETAPE2"
|
||||
},
|
||||
{
|
||||
"channel": "serial",
|
||||
"event": "BTN_NEXT",
|
||||
"target": "STEP_FINAL_WIN"
|
||||
},
|
||||
{
|
||||
"channel": "unlock",
|
||||
"event": "UNLOCK_QR",
|
||||
"target": "STEP_FINAL_WIN"
|
||||
},
|
||||
{
|
||||
"channel": "action",
|
||||
"event": "ACTION_FORCE_ETAPE2",
|
||||
"target": "STEP_FINAL_WIN"
|
||||
},
|
||||
{
|
||||
"channel": "serial",
|
||||
"event": "FORCE_WIN_ETAPE2",
|
||||
"target": "STEP_FINAL_WIN"
|
||||
}
|
||||
],
|
||||
"led_policy": {
|
||||
"ws2812_1": "on",
|
||||
"ws2812_2": "on",
|
||||
"ws2812_3": "on",
|
||||
"ws2812_4": "on",
|
||||
"animation": "bargraph_qr_trigger",
|
||||
"brightness": "bargraph",
|
||||
"rgb": "bargraph_red_to_green"
|
||||
}
|
||||
},
|
||||
{
|
||||
"step_id": "STEP_FINAL_WIN",
|
||||
"screen_scene_id": "SCENE_FINAL_WIN",
|
||||
"audio_pack_id": "",
|
||||
"actions": [
|
||||
"ACTION_TRACE_STEP",
|
||||
"ACTION_WINNER"
|
||||
],
|
||||
"transitions": [
|
||||
{
|
||||
"channel": "timer",
|
||||
"event": "WIN_DUE",
|
||||
"target": "SCENE_MEDIA_MANAGER"
|
||||
},
|
||||
{
|
||||
"channel": "serial",
|
||||
"event": "BTN_NEXT",
|
||||
"target": "SCENE_MEDIA_MANAGER"
|
||||
},
|
||||
{
|
||||
"channel": "unlock",
|
||||
"event": "UNLOCK",
|
||||
"target": "SCENE_MEDIA_MANAGER"
|
||||
},
|
||||
{
|
||||
"channel": "action",
|
||||
"event": "FORCE_WIN_ETAPE2",
|
||||
"target": "SCENE_MEDIA_MANAGER"
|
||||
},
|
||||
{
|
||||
"channel": "serial",
|
||||
"event": "FORCE_WIN_ETAPE2",
|
||||
"target": "SCENE_MEDIA_MANAGER"
|
||||
}
|
||||
],
|
||||
"led_policy": {
|
||||
"ws2812_1": "on",
|
||||
"ws2812_2": "on",
|
||||
"ws2812_3": "on",
|
||||
"ws2812_4": "on",
|
||||
"animation": "blink_all_random",
|
||||
"brightness": "100%",
|
||||
"rgb": "random_color"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,172 +0,0 @@
|
||||
id: zacus_v2
|
||||
version: 3
|
||||
revision: 1
|
||||
title: "Le mystère du Professeur Zacus — Version Réelle (U-SON, piano LEFOU, QR WIN)"
|
||||
theme: "Enquête scientifique + stabilisation audio + épreuve Zone 4 + déverrouillage final"
|
||||
|
||||
players:
|
||||
min: 6
|
||||
max: 14
|
||||
|
||||
ages: "6–14 ans (9–11 recommandés)"
|
||||
|
||||
duration:
|
||||
act_1_minutes: 45
|
||||
act_2_minutes: 60
|
||||
total_minutes: 105
|
||||
|
||||
firmware:
|
||||
board_target: freenove_esp32s3
|
||||
engine: story_engine_v2
|
||||
runtime_scenario_id: "DEFAULT"
|
||||
|
||||
boot_policy:
|
||||
startup_mode: story
|
||||
persist_after_validation: true
|
||||
rollback_command_required: true
|
||||
after_success_boot: media_manager
|
||||
|
||||
qr_rule:
|
||||
enabled: true
|
||||
scene_id: "SCENE_QR_DETECTOR"
|
||||
expected_payload: "WIN"
|
||||
match_mode: exact
|
||||
case_insensitive: true
|
||||
success_event: "UNLOCK_QR"
|
||||
failure_event: "QR_INVALID"
|
||||
timeout_seconds: 30
|
||||
timeout_event: "QR_TIMEOUT"
|
||||
|
||||
media_hub:
|
||||
enabled: true
|
||||
hub_scene_id: "SCENE_MEDIA_MANAGER"
|
||||
entries:
|
||||
- "SCENE_PHOTO_MANAGER"
|
||||
- "SCENE_MP3_PLAYER"
|
||||
- "SCENE_READY"
|
||||
|
||||
canon:
|
||||
prototype: "U-SON"
|
||||
introduction: >
|
||||
Le Professeur Zacus a disparu après avoir déclenché une alerte cryptée.
|
||||
Le prototype U-SON “dérive”: les signaux deviennent instables.
|
||||
Pour protéger U-SON, l’équipe doit:
|
||||
(1) stabiliser une référence scientifique (LA 440 Hz),
|
||||
(2) passer la règle de Zone 4 (installation de l’Électron Fou) via un code piano-alphabet,
|
||||
(3) récupérer la clé finale (QR “WIN”) cachée aux Archives.
|
||||
stakes: >
|
||||
Le vrai test n’est pas la vitesse: c’est la coopération, la précision et le calme.
|
||||
reveal_finale: >
|
||||
Zacus réapparaît: c’était un test d’éthique.
|
||||
U-SON ne doit pas devenir un objet de panique.
|
||||
L’équipe gagne parce qu’elle a fait juste: stabilité, règle, entraide.
|
||||
lore_truths:
|
||||
- "Zone 4 = installation personnelle de l’Électron Fou."
|
||||
- "Piano-alphabet brouillé: lettres collées en ordre aléatoire sur touches blanches."
|
||||
- "Ancre: A est placé sur la touche correspondant au LA 440 Hz."
|
||||
|
||||
stations:
|
||||
- id: STATION_ONDES
|
||||
act: 1
|
||||
name: "Atelier des Ondes"
|
||||
focus: "Stabiliser LA 440 Hz pour recaler U-SON."
|
||||
firmware_anchor_step: "STEP_LA_DETECTOR"
|
||||
|
||||
- id: STATION_ZONE4_PIANO
|
||||
act: 2
|
||||
name: "Zone 4 — Studio de Résonance (Piano Alphabet brouillé)"
|
||||
focus: "Trouver et jouer le code LEFOU (L-E-F-O-U) via lettres sur touches blanches."
|
||||
firmware_anchor_step: "STEP_LEFOU_DETECTOR"
|
||||
clue_soft: "En Zone 4, les lettres comptent plus que les notes. A est sur le LA 440."
|
||||
clue_hard: "Le code est le nom du propriétaire: LEFOU."
|
||||
|
||||
- id: STATION_ARCHIVES_QR
|
||||
act: 2
|
||||
name: "Salle des Archives"
|
||||
focus: "Trouver et scanner la clé finale."
|
||||
firmware_anchor_step: "STEP_QR_DETECTOR"
|
||||
qr_location_real: "Derrière le portrait (cadre) dans la Salle des Archives."
|
||||
|
||||
puzzles:
|
||||
- id: PUZZLE_LA_440
|
||||
act: 1
|
||||
type: "audio / stabilisation"
|
||||
objective: "Produire un LA 440 Hz stable."
|
||||
firmware_step: "STEP_LA_DETECTOR"
|
||||
|
||||
- id: PUZZLE_PIANO_ALPHABET_5
|
||||
act: 2
|
||||
type: "piano / code lettres (mapping brouillé)"
|
||||
objective: "Jouer 5 touches correspondant aux lettres du code."
|
||||
firmware_step: "STEP_LEFOU_DETECTOR"
|
||||
mapping_rule_real: >
|
||||
Les 26 lettres A–Z sont collées sur des touches blanches dans un ordre aléatoire.
|
||||
Une seule ancre est vraie: A est placé sur le LA 440 Hz.
|
||||
code_word_5_letters: "LEFOU"
|
||||
sequence_letters: ["L","E","F","O","U"]
|
||||
hint_progression:
|
||||
soft: "A est sur le LA. Cherchez les lettres, pas les notes."
|
||||
medium: "Le mot est un nom (propriétaire Zone 4)."
|
||||
hard: "Jouez L-E-F-O-U."
|
||||
|
||||
- id: PUZZLE_QR_WIN
|
||||
act: 2
|
||||
type: "recherche / scan"
|
||||
objective: "Scanner le QR final WIN."
|
||||
firmware_step: "STEP_QR_DETECTOR"
|
||||
qr_payload: "WIN"
|
||||
location: "Derrière le portrait aux Archives"
|
||||
|
||||
acts:
|
||||
- act: 1
|
||||
title: "Acte 1 — Stabiliser U-SON (LA 440) (≈45 min)"
|
||||
goal: "Valider Étape 1 via LA 440 Hz."
|
||||
- act: 2
|
||||
title: "Acte 2 — Zone 4 (piano LEFOU) + Archives (QR WIN) (≈60 min)"
|
||||
goal: "Valider Étape 2, puis scanner QR WIN derrière le portrait."
|
||||
|
||||
audio:
|
||||
packs:
|
||||
- pack_id: PACK_BOOT_RADIO
|
||||
tracks:
|
||||
- track_id: boot_intro
|
||||
script_fr: >
|
||||
Équipe Zacus… ici le Professeur Zacus.
|
||||
Le prototype U-SON dérive. Les capteurs ne sont plus fiables.
|
||||
Pour stabiliser U-SON, il vous faut une référence : le LA, quatre-cent-quarante hertz.
|
||||
Rendez-vous à l’Atelier des Ondes.
|
||||
Gardez votre calme.
|
||||
tts_prompt_excerpt: >
|
||||
Voix adulte calme, rassurante, scientifique. Phrases courtes.
|
||||
Effets: bip début + souffle léger + bandpass radio.
|
||||
- track_id: warning_to_zone4
|
||||
script_fr: >
|
||||
Alerte.
|
||||
Prochaine étape : Zone 4.
|
||||
Les lettres sont brouillées.
|
||||
Une seule est sûre : A est sur le LA.
|
||||
Cinq lettres. Cinq touches.
|
||||
tts_prompt_excerpt: >
|
||||
Voix plus urgente mais pas anxiogène.
|
||||
Effets: bips rapides d’alarme, puis radio léger.
|
||||
|
||||
- pack_id: PACK_CONFIRM_WIN_ETAPE1
|
||||
tracks:
|
||||
- track_id: confirm_win1
|
||||
script_fr: >
|
||||
Signal stabilisé.
|
||||
Étape un validée.
|
||||
Liaison confirmée.
|
||||
|
||||
- pack_id: PACK_CONFIRM_WIN_ETAPE2
|
||||
tracks:
|
||||
- track_id: confirm_win2_archives
|
||||
script_fr: >
|
||||
Étape deux validée.
|
||||
Rendez-vous aux Archives.
|
||||
La clé finale est derrière le portrait.
|
||||
|
||||
qr:
|
||||
payload: "WIN"
|
||||
location: "Derrière le portrait dans la Salle des Archives"
|
||||
lead_in_clue: "Regarde là où Zacus surveille toujours."
|
||||