8fc8f8040f2b55a351fece3654b2315fd7c4abde
Flag opt-in `adventure` (default off) — zero regresie non-adventure.
E0: `adventure:false` in defaultState + checkbox builder + `ADVENTURE` in orchestrator.
E1: `_lastGiven` in libJS; `checkAnswer` captureaza raspunsul; `campaignDone`
calculeaza cheia branch ('*'/text-tf/index-choice) si o adauga in payload nextRoom.
E2: `resolveBranch(idx,key)` + rutare nextRoom: 'end'→owExitUnlocked+showOverworld;
numar→owUnlocked[dest]+showOverworld(dest). Non-adventure: comportament existent.
E3: `owCheckEnter` blocheaza usi incuiate (ADVENTURE&&!owUnlocked); exit via
owExitUnlocked. `owRefreshDoors`: stil `.locked` (dim+lock). `__ow.state`:
expune owUnlocked/owExitUnlocked.
E4: `saveProgress` adauga doneList+owUnlocked+owExitUnlocked+target; `tryResume`
reconstruieste din doneList non-contiguu (nu bucla liniara 0..idx).
E5: `buildDiploma`: ADVENTURE&&!roomDone[i] → 'neexplorata' (nu stele inselatoare).
E6: Builder UI — `normalizePuzzle` garanteaza p.branch={}; `cleanState` clampa
tintele+strip branch cand !adventure; `puzzleCard` afiseaza dropdown-uri
ramificare per-puzzle (free=1, tf=2, choice=1/optiune); `data-fb` handler;
`adventure` change → renderPuzzles().
Smoke 35/35 (4 teste noi: branch-jump, resume non-contiguu, regression, tf branch).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Escape Room Builder
Generator de jocuri escape room intr-un singur fisier HTML, fara backend, fara build. Acelasi set de puzzle-uri poate fi exportat in 5 stiluri de joc diferite.
Folosire
Deschide escape-builder.html in browser (dublu-click, merge si de pe file://).
Pe un mediu fara desktop (container/server remote), serveste fisierele static si deschide din browserul tau:
cd /workspace/escape-builder
python3 -m http.server 8000
Apoi navigheaza la http://<IP-server>:8000/escape-builder.html (in containerul curent: http://10.0.20.171:8000/escape-builder.html).
- Stanga: editor — titlu, poveste, culoare, stil joc, puzzle-uri (raspuns liber / adevarat-fals / variante), indiciu si litera per puzzle.
- Dreapta: preview live — jocul exact cum va arata, jucabil direct in pagina.
- Exporta jocul HTML: descarca un joc standalone pe care il trimiti pe telefon/email; merge offline.
- Salveaza / Incarca JSON: pastreaza proiectul ca fisier ca sa-l reiei mai tarziu.
Proiectul curent se salveaza automat in localStorage la fiecare modificare.
Stiluri de joc
| Stil | Mecanica | Exemplu |
|---|---|---|
| Clasic (quiz) | Carduri secventiale cu progres si litere | exemplu-clasic.html |
| Terminal retro | Text adventure pe ecran CRT verde; scrii comenzi (INDICIU, LITERE) si raspunsuri | exemplu-terminal.html |
| Arcade pixel | Te misti cu sagetile/WASD prin camere; usile incuiate pun intrebari, cufarul final e scaparea | exemplu-arcade.html |
| Story chat | Un personaj blocat iti scrie mesaje (typing...); il ajuti raspunzand din composer | exemplu-chat.html |
| Point-and-click | Camera ilustrata SVG; dai click pe obiecte (ceas, tablou, seif...), le rezolvi si deschizi usa | exemplu-point.html |
Mecanici comune
- Stele: 3 la prima incercare, 2 la a doua, 1 daca folosesti indiciul sau gresesti de mai multe ori.
- Fiecare puzzle poate da o litera; literele formeaza cuvantul final, dezvaluit la castig (cu confetti, in functie de stil).
- Sunete WebAudio la corect/gresit; raspunsurile se compara fara diacritice si fara majuscule.
- Toate motoarele de joc impart aceeasi biblioteca (config, scor, verificare raspuns, modal, ecran final) generata din builder.
Testare
Suita de teste Playwright (smoke + campanie), fara server, direct pe file://:
npx playwright test tests/smoke.mjs # toata suita (26/26)
npx playwright test tests/smoke.mjs --grep @regresie
npx playwright test tests/smoke.mjs --grep @campanie
Detalii harness in tests/AGENTS.md.
Description
Languages
HTML
86.3%
JavaScript
13.7%