From 01a347b5d1be2a2f63ebbd00bb6cd43e1688d644 Mon Sep 17 00:00:00 2001
From: Leon Niklas Lux <leon-niklas.lux@informatik.hs-fulda.de>
Date: Wed, 5 Feb 2025 22:47:54 +0100
Subject: [PATCH] Dokue des Levelformats mit Mermaid Diagramm

---
 README.md    |  2 +-
 levelspec.md | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 59 insertions(+), 1 deletion(-)
 create mode 100644 levelspec.md

diff --git a/README.md b/README.md
index 664d2e7..23dd821 100644
--- a/README.md
+++ b/README.md
@@ -7,7 +7,7 @@ Das Projekt hat einige Dependencies, die vorhanden sein müssen, damit erfolgrei
 
 - SDL2
 - SDL2_image
-- Box2D
+- Box2D (v2.4.*)
 - QT6
 - Boost
 
diff --git a/levelspec.md b/levelspec.md
new file mode 100644
index 0000000..a273c26
--- /dev/null
+++ b/levelspec.md
@@ -0,0 +1,58 @@
+# Levelformat
+
+## Spezifikation
+Das Spiel verwaltet alle notwendigen Daten in einer HDF5-Datei. Dabei sieht der Aufbau folgendermaßen aus:
+
+```mermaid
+flowchart TD
+    A[root] --> B[enemies]
+    A[root] --> C[objects]
+    A --> D[player]
+    A --> E[rooms]
+    A --> F[tileset]
+
+    B --> b1[health]
+    B --> b2[hitbox_x]
+    B --> b3[hitbox_y]
+    B --> b4[ids]
+    B --> b5[sprites]
+
+    C --> c1[hitbox_x]
+    C --> c2[hitbox_y]
+    C --> c3[ids]
+    C --> c4[sprites]
+    C --> c5[name]
+
+    D --> d1[health]
+    D --> d2[bullets]
+    D --> d3[sprites]
+
+    E --> e1[0]
+
+    e1 --> e11[enemies]
+
+    e11 --> e111[ids]
+    e11 --> e112[positions_x]
+    e11 --> e113[positions_y]
+
+    e1 --> e12[width]
+    e1 --> e13[height]
+    e1 --> e14[id]
+    e1 --> e15[name]
+    e1 --> e16[tiles]
+```
+
+### Enemies
+Hier werden die möglichen Gegner gespeichert, welch vom Level-Editor in Räumen platziert werden können. Ein Enemy enthält eine ID, die Health zu Beginn sowie Breite und Höher der Hitbox. Außerdem ist im `sprites` dataset angegeben, welche Tiles aus dem Tilesheet zum Gegner gehören.
+
+### Objects
+Analog zu Enemies, da Objects ebenfalls Kollision und Sprites haben. Allerdings haben Objects keine Healthbar, weswegen dieser Wert entfällt
+
+### Sprites
+Hier ist das Spritesheet als ein dreidimensionales dataset aus RGBA8-Daten abgespeichert. Außerdem verfügt das dataset über ein Attribute, welches angibt, wie groß eine Tile ist.
+
+### Player
+Hier werden die grundlegenden Einstellungen für den Spieler, wie Health zu Beginn und die Bulletsprites, gespeichert. Der Spieler wird daraus initialisiert und ab da vom Spiel gemanaged. 
+
+### Rooms
+Dieses Dataset enthält einzelne Räume als Subgroups. Räume enthalten Breite, Höhe, ID, Namen und eine Untergruppe aus Gegnerdaten. Diese Daten umfassen die X und Y Position, wo ein Gegner gespawned werden soll und die ID des Gegners. Außerdem enthält der Raum ein dataset, welches Tile-IDs enthält. Diese beschreiben den Hintergrund des Raumes und die enthaltenen Objekte als ein lineares Array aus TileIDs. Der Wert -1 beschreibt dabei Empty Space.
\ No newline at end of file
-- 
GitLab