Przeglądarkowa gra taktyczna top-down inspirowana Door Kickers. Real-Time with Pause · Canvas 2D · Vanilla JS (ES modules, bez bundlera) · PHP backend (od Sprintu 8).
Pełna specyfikacja: docs/DESIGN.md — BREACH – Game Design & Technical Brief v2 (konwencje, kontrakty, roadmapa).
ES modules + fetch() wymagają serwera HTTP (nie zadziała z file://):
# dowolny statyczny serwer w katalogu projektu, np.:
python -m http.server 8000
# → http://localhost:8000| Akcja | Klawisz |
|---|---|
| Zaznacz operatora | LPM (Shift = wielu) |
| Rozkaz ruchu (zastępuje plan) | PPM |
| Dołącz rozkaz do kolejki planu | Shift + PPM |
| Ciche otwarcie drzwi | PPM na zamkniętych drzwiach |
| Kopniak w drzwi (hałas → alarm) | Ctrl + PPM na zamkniętych drzwiach |
| Ładunek wybuchowy na drzwiach (BREACH) | Alt + PPM na zamkniętych drzwiach |
| Węzeł obserwacji kierunku (WATCH) | Alt + PPM |
| Rzut flashbangiem w punkt pod kursorem | F (Shift+F dokleja do kolejki) |
| Przystanek w planie (STOP, czeka na GO) | S |
| Sygnał GO (zwalnia wszystkie STOP-y) | G (w akcji) |
| Start / pauza taktyczna | SPACJA |
| Zoom | kółko myszy (pod kursorem) |
js/core Config, Game (state machine), GameLoop (fixed timestep), InputHandler, MathUtils
js/rendering Camera (screenToWorld = odwrotność transformu renderu), MapRenderer (offscreen), EntityRenderer, FogRenderer (mgła + plany rozkazów ze znacznikami węzłów)
js/entities Entity, Operator, Enemy, Door, Bullet (tracer z puli; encje nie importują systemów)
js/systems AISystem (patrol/wartownik/alarm), DetectionSystem (stożek widzenia + LOS), VisionSystem (widzenie drużyny → mgła), DoorSystem (jedyne miejsce zmiany stanu drzwi; OPEN_SLOW/KICK/BREACH), CombatSystem (hitscan + friendly fire), CommandSystem (kolejka rozkazów MOVE/DOOR/WATCH/STOP/FLASH + sygnał GO), GadgetSystem (flashbang: lot, detonacja, stun)
js/map MapData — walidacja, maski (collision ≠ LOS), konwersje tile↔px, pathfinding, raycast
js/ui HUD (HTML overlay)
maps/ mapy w naszym formacie JSON (nie Tiled)
assets/ logo i ikony (PNG z kanałem alfa) + źródła 1024² (breach_logo*.png)
Biblioteki z CDN: PathFinding.js (A*), Howler.js (audio, od Sprintu 10).
git push na main → GitHub Actions buduje obraz → GHCR (ghcr.io/damijjj/breach, prywatny) → Watchtower podmienia kontener na miniPC.
- Stack Portainera:
deploy/portainer-stack.yml(port 8086) - Adres:
http://breach.home(proxy host w NPM →192.168.1.115:8086)
- Sprint 1 — mapa + kamera + operator z pathfindingiem
- Sprint 2 — DetectionSystem + wrogowie + AI
- Sprint 3 — LOS + Fog of War (VisionSystem + FogRenderer, mgła dwustanowa)
- Sprint 4 — drzwi + synchronizacja masek
- Sprint 5 — walka (hitscan, tracery z puli, HP, śmierć, friendly fire)
- Sprint 6 — pauza taktyczna + rozkazy na ścieżce (kolejka MOVE/DOOR/WATCH/STOP, sygnał GO)
- Sprint 7 — gadżety (flashbang + breach charge, stan STUNNED, sloty gadżetów ze spawnów mapy)
- Sprint 8 — PHP API + MySQL
- Sprint 9 — UI/menu
- Sprint 10 — dźwięk
- Sprint 11 — edytor map
