Przejdź do treści

Dla twórców · schemaVersion 1.1.0

Format paczki sprawy

Każda sprawa to jedno archiwum ZIP z rozszerzeniem .case.zip. Zawiera dane i multimedia — nigdy kod. Ten sam format zapisuje edytor, importer i eksport.

Struktura

moja-sprawa.case.zip
├── manifest.json      treści widoczne dla gracza + konfiguracja gry
├── solution.json      klucz odpowiedzi, punktacja, wyjaśnienie (prywatne)
├── README.md          opcjonalny opis dla moderatora
└── assets/            obrazy, audio, wideo, szkice, PDF

Pliki mogą leżeć w katalogu głównym archiwum albo w jednym katalogu nadrzędnym (np. gdy spakujesz cały folder). Ścieżki w manifeście są względne względem paczki, np. assets/evidence/photo-01.jpg.

Jak wgrać sprawę

  1. Przygotuj katalog z plikami jak wyżej (zacznij od manifest.template.json i solution.template.json).
  2. Spakuj go do ZIP i zmień rozszerzenie na .case.zip.
  3. W zakładce Stwórz sprawę przeciągnij plik na pole uploadu. Walidator od razu pokaże raport: błędy blokujące i ostrzeżenia z nazwą pliku i ścieżką pola (np. manifest.json › evidence[3].blocks[1].assetId).
  4. Uruchom Podgląd i test — rozegrasz sprawę w tym samym odtwarzaczu, co gracze.
  5. Wyślij do moderacji. Po akceptacji sprawa trafia do katalogu jako niezmienna wersja; kolejne zmiany tworzą nową wersję.

Chcesz tylko sprawdzić paczkę? Użyj pola Tylko sprawdź paczkę — nic nie zostanie zapisane. Lokalnie: node tools/validate-case.js moja-sprawa.case.zip.

manifest.json

SekcjaZawartość
metadataid, slug (a–z, 0–9, myślniki), tytuł, opis bez spoilerów, język, trudność 1–5, durationMinutes {min,max}, players {min,max}, tagi, ostrzeżenia treści, coverAssetId, opcjonalnie numer sprawy, miejsce, data, autor.
gameplayblokada akt i jej komunikat, limit wskazówek, polecane dowody na starcie, grupy filtrów dowodów.
briefingekran startowy (intro), okładka briefingu, zadanie i kroki, karta sprawy, podpowiedzi w notatniku, dodatkowe bloki.
suspects[]id, imię, rola, portret (portraitAssetId), opis, motyw, zeznanie, alibi {status, text} — status: confirmed, partial, unconfirmed, none.
assets[]rejestr plików: id, typ (image, sketch, audio, video, document), ścieżka, MIME, opis alternatywny, podpis, autorstwo/licencja, czas trwania, transkrypcja, fictional dla portretów.
evidence[]id, numer, tytuł, kategoria, grupa, podsumowanie, data/czas, miniatura i uporządkowana lista bloków. Bez oceny znaczenia dowodu.
timeline[]zdarzenia z czasem, opisem i evidenceIds, z których da się je odtworzyć.
verdict.questions[]pytania single/multiple; źródło opcji: suspects (automatycznie z podejrzanych), evidence (dowody) lub options (własne). Bez poprawnych odpowiedzi.
hints[]poziom i tekst — gracz widzi je dopiero po odsłonięciu (serwer wydaje je pojedynczo).

Bloki treści

Dokumenty składają się z bloków w dowolnej kolejności i liczbie. Tekst nie może zawierać HTML — dozwolone są **pogrubienie**, *kursywa*, ==wyróżnienie== i nowe linie \n.

TypPola
paragraphtext
headingtext, level 2 lub 3
quotetext, cite
listitems[], ordered
callouttext, title, tone (note, info, warning)
stamptext — pieczątka
tablecolumns[], rows[][]
imageassetId, alt, caption
galleryitems[{assetId, alt, caption}]
audioassetId, caption, transcript (tekst lub [{speaker, time, text}])
videoassetId, posterAssetId, caption, transcript
transcripttitle, lines[{speaker, time, text}] lub text
documentassetId (PDF), title, caption — bezpieczny podgląd ze stronicowaniem i powiększeniem
sketchassetId, alt, caption, markers[{x, y, label, description}] — współrzędne 0–1

solution.json

Prywatna część sprawy — serwer przechowuje ją osobno i nigdy nie wysyła graczowi przed werdyktem.

answerKeypoprawna odpowiedź dla każdego pytania: {"culprit": "marta", "evidence": ["access", "photo-check"]}
scoringmaxScore, hintPenalty, solvedRequires[], punkty za pytania; dla pytań wielokrotnego wyboru mode: atLeast (z min), exact lub proportional.
reasoningChain[]wnioski {claim, evidenceIds} — każdy oparty na co najmniej dwóch dowodach.
truthTimeline[]opcjonalnie: faktyczny przebieg zdarzeń {time, fact}.
explanation[]wyjaśnienie końcowe jako bloki treści.

Pliki i limity

TypFormatyLimit
image, sketchJPG, PNG, WebP15 MB
audioMP3, M4A, OGG30 MB
videoMP4, WebM100 MB
documentPDF (bez skryptów i załączników)25 MB
cała paczkaZIP250 MB

Typ pliku sprawdzamy po zawartości, nie po nazwie. Zdjęcia są ponownie kodowane, a metadane EXIF (w tym GPS) usuwane. Odrzucamy SVG, HTML, skrypty, archiwa w archiwum i ścieżki wychodzące poza paczkę (../).

Walidacja

Błędy blokujące

  • brak lub nieobsługiwane schemaVersion, uszkodzony ZIP, niepoprawny JSON;
  • brak metadanych, pytań werdyktu, rozwiązania lub wyjaśnienia;
  • mniej niż 2 podejrzanych lub 5 dowodów;
  • powtórzone identyfikatory, odwołania do nieistniejących podejrzanych, dowodów, zasobów, pytań lub opcji;
  • brakujący plik, niedozwolony typ, przekroczony limit, niezgodna zawartość pliku;
  • HTML, skrypty, iframe albo poprawne odpowiedzi w manifeście publicznym;
  • nieznany typ bloku.

Ostrzeżenia

  • wniosek oparty na jednym dowodzie, zdarzenie bez źródła, zdarzenia w złej kolejności;
  • podejrzany bez alibi lub nierozróżnialne alibi;
  • obraz bez opisu alternatywnego lub podpisu, nagranie bez transkrypcji, bardzo duży plik, dane GPS;
  • możliwy spoiler w tytule, opisie lub tagach; nieużywane zasoby.