Skip to content
This repository has been archived by the owner on Mar 26, 2024. It is now read-only.

Spielprotokoll

TrueDoctor edited this page Apr 18, 2020 · 9 revisions

Einführung

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.

Aufbau einer Nachricht

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

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.


Server to Client

Opcodes

Nummer Name
10 push-resource
11 push-game-state

push-resource

Beschreibung

Diese Nachricht enthält eine Ressource, also zum Beispiel einen Texturatlas oder eine Animation.

Payloadinterpretation
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
Resourcen-Art
res_type Name
2 PNG Texture
3 Charakter
4 Sounddaten

push-game-state

Beschreibung

Diese Nachricht enthält ein GameState, in diesem speicher der Server die wichtigsten Spielinformationen.

Payloadinterpretation
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

Client to Server

Nummer Name
128 push-game-state

push-game-state

Beschreibung

Diese Nachricht enthält ein GameState, in diesem speicher der Client seine wichtigsten Spielinformationen.

Payloadinterpretation
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

Ressourcen

PNG

Textur abgespeichert im PNG Format

Bits Name Beschreibung
- data Bytearray mit png Daten

Charakter

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

Sound abgespeichert im mp3 Format

Bits Name Beschreibung
- 'data' Bytearray mit mp3 Daten

Animation

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)

Navigation

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 🧻

Clone this wiki locally