Technologia i uczciwość
Omnoxia jest budowana jako nowoczesna aplikacja webowa z autorytatywnym serwerem. Każda decyzja techniczna podporządkowana jest trzem celom: natychmiastowemu dostępowi, uczciwej rywalizacji i możliwości rozwijania gry bez przestojów.
Architektura
Klient
Aplikacja w przeglądarce (React + TypeScript). Pokoje ładowane są osobno, a reszta pobiera się w tle — gra startuje szybko i działa płynnie bez instalacji.
Serwer
Serwer gry napisany w Go: obsługuje całą logikę — misje, walki, sklepy, rynek, plemiona — i jest jedynym źródłem prawdy o stanie świata.
Baza danych
PostgreSQL z wersjonowanymi migracjami schematu. Każda operacja gry wykonuje się w transakcji — zakup, aukcja czy nagroda dzieje się w całości albo wcale.
Serwer autorytatywny
- Wszystkie rzuty losowe odbywają się na serwerze — łupy, krytyki, ulepszenia, losowania Dżina. Przeglądarka dostaje wyłącznie wynik.
- Walki są liczone po stronie serwera przez jeden silnik dla PvP, PvE i wojen; klient jedynie odtwarza zapis tury po turze. Zapisy walk są przechowywane, dzięki czemu każdą walkę można obejrzeć ponownie.
- Serwer weryfikuje każdą akcję — np. misja może wystartować tylko, jeśli naprawdę jest na tablicy opiekuna, a zakup tylko, jeśli gracz ma środki.
- Silnik walki jest testowany względem referencyjnego symulatora balansu, aby wzory w grze dokładnie odpowiadały założeniom projektowym.
Gospodarka pod kontrolą
- Każda zmiana stanu walut trafia do księgi transakcji z przyczyną i odniesieniem do zdarzenia.
- Wartości balansu (szanse, koszty, nagrody, limity) są przechowywane w konfiguracji serwera i mogą być zmieniane w trakcie działania gry, bez nowego wydania.
- Złoto jest liczone z dokładnością do setnych części, więc nawet najmniejsze nagrody na niskich poziomach są naliczane precyzyjnie.
Bezpieczeństwo kont
- Hasła i kody PIN są przechowywane wyłącznie jako skróty argon2id — współczesny standard odporny na łamanie.
- Logowanie wymaga hasła i czterocyfrowego PIN-u; operacje nieodwracalne (usunięcie postaci) — ponownego podania PIN-u.
- Linki do resetu hasła są jednorazowe i wygasają po godzinie; formularz nie zdradza, czy dany adres istnieje w bazie.
- Ograniczenia częstotliwości żądań chronią przed automatyzacją i nadużyciami.
Wydajność i dostępność
- Grafiki w nowoczesnym formacie WebP, kompresja odpowiedzi i ładowanie pokoi na żądanie.
- Stała scena 1440 × 1024 skalowana do okna — gra wygląda tak samo na każdym monitorze od 1024 × 640 wzwyż.
- Konteneryzowane wdrożenie (Docker) — serwer i klient wydawane są jako jedna, spójna wersja.
- Interfejs przygotowany do wielu języków — teksty gry są oddzielone od kodu, a treść fabularna (misje, umiejętności) tłumaczona niezależnie.