Adauga al 6-lea stil de joc: campanie multi-stil care leaga puzzle-urile
in camere de stiluri diferite (clasic/terminal/arcade/chat/point in rotatie),
conectate prin coridoare cu usa, litera si stele.
Contract de montare (verificat la gate T1):
- gameCampaign: un <iframe srcdoc> per camera; camerele cheama parent.*
pe un nivel (merge si pe file://); template per stil cu sentinel __CFG__
injectat prin replace-functie (D1) + json.replace(/</g,'<') (D6)
- roomReady/roomError + timeout 4s -> skip cu 0 stele + cod eroare;
idx detinut de parinte, accepta nextRoom doar de la contentWindow activ (D5)
- parent.beep in mod campanie (un singur AudioContext, D2)
- resume prin safeStore try/catch (D3) + cheie djb2 peste CFG embedat (D11)
Builder:
- selector de stil per puzzle ("Auto (stil)") + optiunea Campanie multi-stil
- normalizePuzzle() la load + import (sursa unica pt forma puzzle, D8)
- blocare export+preview la 0 puzzle-uri; persist() guarded (D12)
- letter normalizat [A-Za-z0-9] + esc la SVG point (D13)
Design (DESIGN.md): tokens --c-*, intro poster, coridor "usa ca erou",
chrome unica sursa de progres, 5 usi CSS/SVG (normal/stuck/crescendo),
mod camera per motor, buget vertical mobil, baseline a11y.
Tooling: tests/smoke.mjs (Playwright, zero-dependente prin npx), TODOS.md,
sectiune ## Testing in CLAUDE.md. Demo-uri regenerate + exemplu-campanie.html.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
32 lines
2.0 KiB
HTML
32 lines
2.0 KiB
HTML
<!doctype html>
|
||
<html lang="ro">
|
||
<head>
|
||
<meta charset="utf-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||
<title>Escape Room Builder - demo</title>
|
||
<style>
|
||
body { margin: 0; min-height: 100vh; background: #14092e; color: #fff; font-family: system-ui, sans-serif; display: flex; align-items: center; justify-content: center; padding: 20px; box-sizing: border-box; }
|
||
.card { max-width: 520px; width: 100%; }
|
||
h1 { font-size: 24px; margin: 0 0 4px; }
|
||
p { color: rgba(255,255,255,.65); margin: 0 0 20px; }
|
||
a { display: block; background: rgba(255,255,255,.07); border: 1px solid rgba(255,255,255,.15); border-radius: 12px; padding: 14px 18px; margin-bottom: 10px; color: #fff; text-decoration: none; font-weight: 600; }
|
||
a:hover { border-color: #8b5cf6; background: rgba(139,92,246,.15); }
|
||
a span { display: block; font-weight: 400; font-size: 13px; color: rgba(255,255,255,.55); margin-top: 2px; }
|
||
a.builder { background: #6d28d9; border-color: #6d28d9; }
|
||
</style>
|
||
</head>
|
||
<body>
|
||
<div class="card">
|
||
<h1>Escape Room Builder</h1>
|
||
<p>Builder-ul + cate un joc demo exportat in fiecare stil.</p>
|
||
<a class="builder" href="escape-builder.html">Builder <span>editor + preview live; schimba "Stil joc" si vezi transformarea pe loc</span></a>
|
||
<a href="exemplu-campanie.html" style="border-color:#a78bfa;background:rgba(167,139,250,.12)">🗺️ Campanie multi-stil <span>3 puzzle-uri × 3 stiluri diferite — ușa ca erou, coridor cu litera, cuvântul magic</span></a>
|
||
<a href="exemplu-clasic.html">Clasic (quiz) <span>carduri secventiale cu progres si litere</span></a>
|
||
<a href="exemplu-terminal.html">Terminal retro <span>text adventure CRT; scrie raspunsul, INDICIU, LITERE</span></a>
|
||
<a href="exemplu-arcade.html">Arcade pixel <span>sageti / WASD; usi incuiate, cufar final</span></a>
|
||
<a href="exemplu-chat.html">Story chat <span>personajul iti scrie; raspunzi din composer</span></a>
|
||
<a href="exemplu-point.html">Point-and-click <span>camera ilustrata; click pe obiecte, apoi pe usa</span></a>
|
||
</div>
|
||
</body>
|
||
</html>
|