update
This commit is contained in:
50
README.md
50
README.md
@@ -1,6 +1,6 @@
|
||||
# Liar's Dice 3D
|
||||
|
||||
Würfel-Bluffspiel in Godot 4.7 mit echter 3D-Physik, Host/Client-Multiplayer,
|
||||
Würfel-Bluffspiel in Godot 4.7 mit echter 3D-Physik, Mehrspieler über Raum-Codes,
|
||||
KI-Bots und einem Booster-System aus Buffs und Debuffs.
|
||||
|
||||
## Starten
|
||||
@@ -11,14 +11,50 @@ Das Startmenü hat drei Punkte:
|
||||
|
||||
* **Einzelspieler** – nur die Bot-Anzahl (1–7) einstellen und starten. Es wird
|
||||
kein Netzwerk geöffnet.
|
||||
* **Mehrspieler** – Name, Server-IP und Bot-Anzahl. **Spiel hosten** öffnet
|
||||
einen Server auf Port 8910, **Beitreten** verbindet sich mit der eingetragenen
|
||||
IP. Der Host startet die Partie, sobald mindestens 2 Teilnehmer zusammen
|
||||
sind (Menschen und Bots zusammengezählt, maximal 8).
|
||||
* **Mehrspieler** – nur den Namen eintragen, dann **Hosten** oder
|
||||
**Beitreten**. Hosten führt direkt in die Lobby; dort steht der Code.
|
||||
Beitreten fragt zuerst nach dem Code. Niemand braucht eine IP oder eine
|
||||
Portfreigabe.
|
||||
* **Lobby** – zeigt den Code, wer schon da ist und die Bot-Anzahl. Nur der
|
||||
Host stellt die Bots ein und startet, sobald mindestens 2 Teilnehmer
|
||||
zusammen sind (Menschen und Bots zusammengezählt, maximal 8).
|
||||
* **Beenden** – schließt das Spiel.
|
||||
|
||||
Zum Testen auf einem Rechner: eine Instanz hostet, weitere Instanzen verbinden
|
||||
sich auf `127.0.0.1`.
|
||||
## Mehrspieler: wie es zusammenhängt
|
||||
|
||||
Die Partie läuft nicht mehr beim Host, sondern auf `pirate-dice.marha.de`:
|
||||
|
||||
Spieler ──HTTPS──> Matchmaker ──startet──> Raum (godot --headless, UDP-Port)
|
||||
Spieler ──UDP────> Raum
|
||||
|
||||
* Der **Matchmaker** (`server/matchmaker.py`) vergibt Codes wie `K7QM` und
|
||||
startet je Raum einen eigenen headless Godot-Prozess auf einem Port aus
|
||||
8911–8940. `POST /api/raum` legt an, `GET /api/raum/<code>` schlägt nach.
|
||||
* Ein **Raum** ist Peer 1 und damit die Autorität, sitzt aber nicht mit am
|
||||
Tisch (`local_seat` bleibt −1, kein HUD). Ohne Spieler beendet er sich nach
|
||||
zwei Minuten von selbst, dann ist der Code wieder frei.
|
||||
* Der **Host** ist der erste Spieler im Raum. Geht er, rückt der nächste
|
||||
nach. Nur er darf starten (`Net.request_start`).
|
||||
|
||||
Gemessen je Raum: 51 MB Speicher zusätzlich, ~1 % eines Kerns im Leerlauf,
|
||||
kurze Spitzen beim Würfelwurf.
|
||||
|
||||
## Lokal entwickeln
|
||||
|
||||
make matchmaker # Matchmaker auf :8020, legt Räume als Prozesse an
|
||||
make dev # Spiel, zeigt auf den lokalen Matchmaker
|
||||
|
||||
Ohne `PIRATE_DICE_SERVER` zeigt das Spiel auf `pirate-dice.marha.de`. Einen
|
||||
einzelnen Raum ohne Matchmaker gibt es mit `make server` (Port 8910).
|
||||
|
||||
## Auf dem Server
|
||||
|
||||
make prod # kopiert das Godot-Binary, baut, startet
|
||||
make logs
|
||||
make down
|
||||
|
||||
Die HTTP-Schnittstelle läuft hinter Traefik auf `pirate-dice.marha.de`. Die
|
||||
Raum-Ports 8911–8940/UDP gehen direkt nach aussen – Traefik kann kein UDP.
|
||||
|
||||
Das Spiel startet im Vollbild, **F11** schaltet um. **Esc** öffnet ein Menü mit
|
||||
*Fortsetzen* und *Verlassen*; im Einzelspieler hält es das Spiel samt Zeitlimit
|
||||
|
||||
Reference in New Issue
Block a user