-
Notifications
You must be signed in to change notification settings - Fork 1
Spielprotokoll
Das Spielprotokoll ist das Kommunikationsprotokoll zwischen dem Browser und dem Rask-Server. Das Protokoll läuft über Websockets. Websockets funktionieren über Datenpakete ("Data Frames" genannt). Datenpakete können partioniert über das Netzwerk geschickt werden. Für alle Datenpakete ist die Größe bekannt, was es überflüssig macht (im Gegensatz zu z.B. TCP), die größe eines Paketes im Protokoll mitzuschicken.
Eine Nachricht ist wie Folgt aufgebaut:
Bits | Name | Beschreibung |
---|---|---|
8 | opcode |
die Art der geschickten Nachricht |
(16) | ext_opcode |
Existiert nur, falls opcode=255
|
align 32 | payload |
Die zu interpretirenden Daten |
Strings seien im Protokoll folgendermaßen definiert:
Ein String ist ein Array aus Bytes mit dynamischer Länge. Für jedes Byte b gilt:
char := b AND 127
und continue := b AND 128
. Wobei char
ein 7-bit ASCII-Character ist und continue
kennzeichnet, ob das Byte b nicht das letzte Element des Arrays ist.
Nummer | Name |
---|---|
10 | push-resource |
11 | push-game-state |
Diese Nachricht enthält eine Ressource, also zum Beispiel einen Texturatlas oder eine Animation.
Bits | Name | Beschreibung |
---|---|---|
32 | res_type |
die Art der geschickten Ressource |
32 | res_id |
die globale ID der geschickten Ressource |
… | res_data |
Die Ressourcen-Daten |
res_type |
Name |
---|---|
2 | PNG Texture |
3 | Charakter |
4 | Sounddaten |
Diese Nachricht enthält ein GameState, in diesem speicher der Server die wichtigsten Spielinformationen.
Bits | Name | Beschreibung |
---|---|---|
32 | other_player_x |
x Position des Spielers |
32 | other_player_y |
y Position des Spielers |
32 | other_player_status |
bit maske mit relevanten informationen |
Nummer | Name |
---|---|
128 | push-game-state |
Diese Nachricht enthält ein GameState, in diesem speicher der Client seine wichtigsten Spielinformationen.
Bits | Name | Beschreibung |
---|---|---|
32 | player_x |
x Position des Spielers |
32 | player_y |
y Position des Spielers |
32 | player_status |
bit maske mit relevanten informationen |
Textur abgespeichert im PNG Format
Bits | Name | Beschreibung |
---|---|---|
- | data |
Bytearray mit png Daten |
Ein Charakter sei eine Ansammlung von Textur, Atlas und Animationsdatei
Bits | Name | Beschreibung |
---|---|---|
32 | Texture |
Länge der Textur Sektion |
32 | Atlas |
Länge der Atlas Sektion |
32 | Animation |
Länge der Animations Sektion |
- | texture_data |
Bytearray mit .png Daten |
- | atlas_data |
Bytearray mit .atlas Daten |
- | animation_data |
Bytearray mit .json Daten |
Sound abgespeichert im mp3 Format
Bits | Name | Beschreibung |
---|---|---|
- | 'data' | Bytearray mit mp3 Daten |
Eine Animations-Ressource sei folgendermaßen aufgebaut (Integer seien auf little endian festgelegt):
Bits | Name | Beschreibung |
---|---|---|
16 | major_version |
Der erste Teil der Versionsnummer (major-version .xx) |
Brainstorming:
Sessions Liste 📃
Letzte Session◀️
Nächste Session▶️
Last Design-Session 👈
Next Design-Session 👉
Dunkle Seite 🌈
Design:
Sound 🎧
Grafikdesign 🤺
Animationen 🎞️
Gamedesign 📝
Programmierung:
Gamelogik ⚙️
Frontend 👾
Backend 🗄️
Spielprotokoll 🧻