Devlog #01 - Ruhe nach dem Sturm
Die letzten Wochen hat sich an der RawSalmonEngine viel getan. Nachdem sich der Arbeitsaufwand fürs Sommersemester einigermaßen eingependelt hat, konnte ich jetzt endlich wieder Zeit finden dem Projekt etwas Leben einzuhauchen.
Der alte Ansatz hatte zwei Hauptprobleme;
Das Sahnehäubchen obendrauf; Ich hab mich mal endlich drum gekümmert ein kleines Python Script zu basteln was neue Event Klassen generiert. Man muss also nur noch Attribute hinzufügen, dem Parser(auch neu) diese mitteilen und schon kann man sich um den "richtigen" Code den das Event ausführen soll kümmern.
Was auch neu ist, jetzt gibt es nicht mehr nur "eine" Map, sondern Maps werden auf einem Stack angelegt um einfach so etwas wie Menüs, Pause Bildschirme, usw. zu realisieren. Dazu passend gibt es natürlich auch endlich ein "LoadMapEvent", was durch all die vorherigen Verbesserungen viel leichter zu implementieren war.
Zusätzlich soll die aktive Frame der Animation ebenso Hitboxen tragen, dem Actor temporär hinzufügen und sogar gegebenenfalls gleichnamige Hitboxen zeitweise überschreiben. Gerade für Kampfspiele ala "Street Fighter" mit verschiedenen Treffer- und Angriffszonen sollte das äußerst nützlich sein.
"Nice to have" wären natürlich auch die Render-Ausrichtungen "Isometrisch" und "Hexagonal" sowie alle vier möglichen Render-Reihenfolgen. Da ich ohnehin an den MapLayers für die Kollision rumschrauben muss, könnte ich das wenn ich schon dabei bin ohnehin einfach mal "einbauen".
Terra Australis Alpha #1 Bandicoot
"Terra Australis" ist das Demo-Spiel welches wir als Erprobungsfeld für die Engine ersonnen haben. Für die erste Alpha haben wir jetzt endlich alle nötigen Features festgelegt welche implementiert werden müssen damit endlich ein richtiges kleines Spiel draus werden kann.- Mapwechsel generell
- Tod des Spielers inklusive Zurücksetzen zum Anfang
- Checkpoints
- Einsammelbare Gegenstände (Münzen bspw.)
- Benutzer-Interface mit Lebenspunkten usw.
- Menü
Event System Refactoring aka. C++ Template Hell
Über die Events läuft die Logik des kompletten Spielablaufs und deswegen sind sie integral für die Engine. Sie werden eingelesen über XML Dateien (derzeit in der Tiled Map integriert), können Daten halten und modifizieren ein Objekt über seine öffentlichen Schnittstellen. Das heißt, wenn ein Charakter über die Map laufen soll, dann schickt man per Tastendruck ein oder mehrere Events die den Charakter animieren, bewegen und dabei auf Kollision prüfen.Der alte Ansatz hatte zwei Hauptprobleme;
- Das Speichermanagement der Events lief über eine "zwischengeschaltete" Klasse in der Vererbungshierarchie (Irgendwo wollte ich mir beweisen dass ich sowas verrücktes wie das CRTP in diesem Kontext zum laufen bekomme 😀).
- Und der Typ der Objekte auf denen die Events operieren war fest, was viel doppelten Code zufolge hatte.
Das Sahnehäubchen obendrauf; Ich hab mich mal endlich drum gekümmert ein kleines Python Script zu basteln was neue Event Klassen generiert. Man muss also nur noch Attribute hinzufügen, dem Parser(auch neu) diese mitteilen und schon kann man sich um den "richtigen" Code den das Event ausführen soll kümmern.
Abspeckkur für MapData
Die Klasse "MapData" war lang genug das Mädchen für alles und wurde nun auf seinen Platz zurechtgewiesen. Ein Großteil der Funktionalität welcher sie den Tilesets und Map-Layers abgeluchst hat, stecken jetzt in der "TilesetCollection" und der "MapCollection" die jene deutlich besser beherbergen.Was auch neu ist, jetzt gibt es nicht mehr nur "eine" Map, sondern Maps werden auf einem Stack angelegt um einfach so etwas wie Menüs, Pause Bildschirme, usw. zu realisieren. Dazu passend gibt es natürlich auch endlich ein "LoadMapEvent", was durch all die vorherigen Verbesserungen viel leichter zu implementieren war.
Weiterer Ausblick
Es wurde viel Strecke gemacht, Feature 1 steht und für 2, 3 und 6 wurde ein solider Grundstein gelegt. Mein nächstes Ziel ist es die Kollision neu zu strukturieren und zu vereinheitlichen, primär für Feature 4. Derzeit ist der Ablauf von Kollision mehr oder weniger Kraut und Rüben.- Erst sollen die Standard-Hitboxen der Actors mit den Standard-Hitboxen der Tiles auf Kollision geprüft werden (was automatisiert bei der bewegung der Actors passiert).
- Dann wird auf Kollision aller Hitboxen der Actors mit allen Hitboxen der Tiles, außer der Standard-Hitbox geprüft.
- Und dann wird auf Kollision aller Hitboxen der Actors untereinander geprüft.
Zusätzlich soll die aktive Frame der Animation ebenso Hitboxen tragen, dem Actor temporär hinzufügen und sogar gegebenenfalls gleichnamige Hitboxen zeitweise überschreiben. Gerade für Kampfspiele ala "Street Fighter" mit verschiedenen Treffer- und Angriffszonen sollte das äußerst nützlich sein.
"Nice to have" wären natürlich auch die Render-Ausrichtungen "Isometrisch" und "Hexagonal" sowie alle vier möglichen Render-Reihenfolgen. Da ich ohnehin an den MapLayers für die Kollision rumschrauben muss, könnte ich das wenn ich schon dabei bin ohnehin einfach mal "einbauen".
Kommentare
Kommentar veröffentlichen