dba7fff7a23ff9e3f2381f1f63ec4664489dfeb3
Stage 1: `deflateToBase64url`/`inflateFromBase64url` (CompressionStream deflate-raw,
offline, file://); `SNIP.compressJs` cu helpers inflate (doubled backslashes).
Stage 2: `campaignShell({tplJson,masterExpr,titleExpr,nStyles,bootMode})` refactor;
gameCampaign = wrapper subțire; bootMode='inline' (nop) | 'hash' (player).
Stage 3: `playerHTML()` — toate 5 motoare inline; boot async cu `(async function(){})()`
(fix: lipsea `function`, eroare Unexpected token '{' în Chromium); MASTER din
location.hash deflate-raw; orchestrator în <script type="text/plain" id="run">.
Stage 4: Encoder QR vanilla JS — GF(256), Reed-Solomon ECC L, byte mode, versiuni 1-22,
8 măști + penalty, BCH format/version. `makeQrSvg(text, opts)` → SVG.
Stage 5: UI builder — fieldset distribuie, #btnShare/#btnCopyLink/#btnDownloadPlayer/
#btnPrintQr, #qrBox, #qrCard (print A4). baseUrl în state, deleted din cleanState().
Tests: 41/41 (6 noi @share). Fix test player: necesită __ow.enterDoor(0) după btn-start
(overworld first, then enter room). Demo files: restaurate din git (configs hardcodate în @regresie).
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%