Files
NullDepth/specs/NULL_DEPTH_TECHNICAL_ARCHITECTURE.md
T
Michal Vrba cd3874c7be Major gameplay, UI, and architecture overhaul
Expanded game data model, versioned saves with migration, and robust inventory/archive systems. Added procedural/file-based audio, new overlays (inventory, archive, settings, confirmations), autosave indicator, and improved transitions. Introduced data validation project, updated localization, enhanced accessibility, and revised documentation. Comprehensive refactor for maintainability and user experience.
2026-08-27 22:05:09 +02:00

3.0 KiB

NULL DEPTH — technická architektúra

Stack

  • Blazor WebAssembly standalone
  • .NET 10 / C#
  • HTML/CSS fullscreen UI
  • JSON obsah bez backendu a databázy
  • browser localStorage pre save a settings
  • Web Audio/HTML Audio vrstva s procedurálnym fallbackom
  • Browser Fullscreen API ovládané zo Settings

Princíp

C# obsahuje iba všeobecný engine. Herný obsah je dátový:

Input / kliknutie
→ GameService
→ zmena GameState
→ autosave
→ Razor znovu vykreslí miestnosť

Súbory

Game/GameService.cs                  načítanie dát, pohyb, flagy, save
Game/AudioService.cs                 ambienty, SFX a live master volume
Models/GameModels.cs                dátové modely
Pages/Home.razor                    fullscreen obrazovky a overlaye
wwwroot/js/null-depth.js             audio runtime a fullscreen interop
wwwroot/data/game.json              celý level a gameplay obsah
wwwroot/localization/sk.json        slovenské texty
wwwroot/localization/en.json        anglické texty
wwwroot/assets/images/...           title a miestnosti
wwwroot/assets/audio/...            ambience a SFX sloty
tests/NullDepth.Validation          offline dátové a gameplay testy

RoomDefinition

Každá miestnosť má ID, lokalizačné kľúče, súradnice, obraz, voliteľný alternatívny obraz, exits a interakcie. Exit môže vyžadovať flagy a mať lokalizovanú správu pri zamknutí.

Interakcia môže:

  • vyžadovať alebo zakazovať flagy
  • nastaviť flagy
  • pridať predmet
  • uložiť nájdený záznam do trvalého archívu
  • vytvoriť checkpoint
  • ponúknuť dátové voľby
  • spustiť smrť alebo ending

GameState

Ukladá aktuálnu miestnosť, navštívené miestnosti, flagy, inventár, archív logov, checkpoint, dokončený ending a čas uloženia. Save používa kľúč null-depth.save.v1, ale vnútorná verzia stavu je 3 a starší stav sa automaticky migruje. Settings používajú null-depth.settings.v1.

Nová hra pred prepísaním vyžaduje potvrdenie. Save možno vymazať v Settings. Poškodený alebo budúcou verziou nekompatibilný stav sa nikdy automaticky neprepíše; UI ponúkne jeho explicitné odstránenie.

Ak je v miestnosti viac dostupných interakcií, E otvorí dátovo naplnený picker. Ovláda sa šípkami, Enterom, číslicami alebo myšou.

Pohyb používa krátky fade, dôležité systémové zásahy alarmové bliknutie a text miestnosti jemný reveal. Každý zápis stavu vyvolá viditeľný autosave indikátor.

game.json definuje aj items, initialItems a archive. Interakcia s archiveId pridá záznam do hráčovho archívu a ten zostáva dostupný cez L aj po zmiznutí jednorazovej interakcie.

Rozšírenie hry

Pri pridaní miestnosti stačí:

  1. doplniť objekt do wwwroot/data/game.json,
  2. doplniť nameKey, descriptionKey a texty interakcií do oboch lokalizácií,
  3. uložiť 16:9 obraz pod cestu uvedenú v image,
  4. pridať exit z existujúcej miestnosti.

Zásah do C# alebo Razor kódu nie je potrebný.