# Mapy i mody danych

Przeglądarkowy port ładuje bezpieczne mody danych w formacie Quake 4 PK4. Pakiety PK4
nie mogą zawierać bibliotek gry ani innego kodu wykonywalnego. Moduły GameLib są
osobnymi, przypiętymi i audytowanymi modułami bocznymi WASM; zmiana kodu gry wymaga
osobnego audytowanego rebuilda i ponownej publikacji tych modułów.

## Dodanie mapy

Najpewniejszym edytorem jest Quake 4 Radiant z oficjalnego SDK, uruchamiany z pełnej
instalacji poleceniem `Quake4.exe +editor`. Format źródłowy to tekstowy idTech 4
`.map`; DarkRadiant może służyć jako wygodny edytor alternatywny, ale wynik zawsze
należy przepuścić przez poniższy toolchain OpenQ4. W PK4 zachowaj źródło jako
`maps/mp/<nazwa>.map` i nie dołączaj materiałów skopiowanych z detalicznej gry.

Pakiet musi mieć dokładnie jedną mapę `maps/mp/<nazwa>.map`. Jeżeli brakuje plików
wynikowych, ingest uruchomi natywny kompilator OpenQ4 i utworzy `.proc`, `.cm` oraz
`.aas32`. Ten ostatni plik jest wymagany przez boty.

```bash
cd /srv/q4
node tools/ingest.mjs /ścieżka/mapa.pk4 \
  --license CC-BY-SA-4.0 \
  --source https://example.org/mapa \
  --author "Autor"
```

Dozwolone są wyłącznie materiały, na których publiczną redystrybucję pozwala wskazana
wolna licencja. `--source self-authored` oznacza mapę stworzoną przez operatora. Narzędzie
odrzuca traversal, symlinki, bomby ZIP, kod wykonywalny, kolizje z plikami bazowymi i
pakiety bez kompletnych danych mapy/botów.

Wynik trafia jako `mods/dist/q4web_<mapa>-<sha>.pk4` do wspólnego manifestu klienta
oraz katalogu `baseoq4` serwera. Działająca usługa jest przeładowywana przez
`tools/safe_restart.sh`. `mods/index.json` zapisuje hash, źródło i licencję.

Opcje operatorskie: `--force` zastępuje istniejącą wersję tej samej mapy,
`--no-stage` tylko buduje pakiet, a `--no-restart` nie przeładowuje działającej usługi.
