Main Character für die "Parrot Quest"

Der Held (work in progress)Der Held (work in progress)Das Spiel das ich als Demo für die ParrotEngine gerade erstelle benötigt natürlich einen Hauptdarsteller und wie der Name der Engine unschwer verrät wird es ein Papagei werden. Rechts seht ihr den aktuellen Stand des 3D Models. Ich erstelle alle Modelle in Blender. Der Papagei ist aktuell bereits gerigged und animiert.
Damit es voran geht, werde ich als erstes dieses Model verwenden um ein spielbares Level zu implementieren. Die Feinarbeiten kommen irgendwann später. Falls dies hier ein 3D-Artist liest und dieser fit in Blender ist, nehme ich auch gerne Hilfe an!
Die erste TestmapDie erste TestmapDie erste Testmap wird sehr simpel gestrickt sein. Auf dem Screenshot links sieht man den Weg der zurückgelegt werden muss. Links unten ist der Startpunkt (Player Spawn Point) und rechts der Bereich bei dessen Erreichen die Map als erfolgreich erledigt erkannt wird. Der Spieler wird diesen Bereich nicht verlassen können - auf diese Weise kann man sich später im Spiel nicht um Gegner und Hindernisse "herummogeln". Geheimgänge, Abkürzungen und sonstige Geheimnisse müssen in einer Map gezielt eingebaut werden.

Um meine Engine nicht alleinig auf Jump'n Run Spiele auszurichten habe ich eine Zwischenschicht eingeführt: Das "JumpNRun Modul". Dieses enthält neben dem auf diese Art Spiele spezialisierten Map-Editor auch weitere dafür benötigte Hilfsklassen. So bleibt die Engine zwar weniger "mächtig", dafür aber allgemeingültig und kann später auch für eventuelle weitere Module verwendet werden. Ich denke da an soetwas wie ein "FirstPerson Modul" oder ein "Platform Modul"... doch eins nach dem anderen.

Resource Collection

Derzeit programmiere ich an einem Map-Editor. Dieser soll sowohl einfach zu bedienen, also auch vollständig bezüglich der Funktionalität sein. Dabei stellte sich mir das Problem wie ich sicherstellen kann, dass ein Spiel auf genau die gleichen Resourcen zugreifen kann wie der Editor: Schließlich werden die Elemente die im Editor in die Map platziert wurden auch vom Spiel benötigt wenn dieses die Map einladen und darstellen möchte.

Diagramm: ResourceCollectionSetDiagramm: ResourceCollectionSet

Als Lösung für dieses Problem habe ich die Resource-Collections ins Leben gerufen. Es handelt sich hier um eine Datei im XML Format die eine Liste aller Resourcen enthält die ausgehend vom Ort der resource-collection.xml Datei erreichbar sind. Da die Engine bisher für alle Zugriffe auf Resourcen InputStreamSource-Objekte verwendet, nutzt das Konzept für die Collections diese natürlich ebenfalls. Das bedeutet, dass ein Programm, welches über irgendein InputStreamSource-Objekt an eine resource-collection.xml Datei kam, über genau das gleiche Objekt alle in der XML erwähnten Resource Objekte laden kann!

Die Engine selbst besitzt standardmäßig eine eigene ResourceCollection. Diese enthält neben dem Engine-Logo auch die Standard-Fonts, default-Texturen und Standard-Skyboxen. Damit Programme die die Engine nutzen den Satz an verfügbaren Resourcen ergänzen können gibt es das ResourceCollectionSet. Dieses enthält eine Liste von Resource-Collections.

Das ResourceCollectionSet kann jederzeit um weitere Resource-Collections ergänzt werden. Wird vom Spiel aus eine Resource angefordert, so geschieht das über die ReaderFacade:

ReaderFacade facade = engine.getReaderFacade();
MeshPrototype m = facade.readMeshPrototype("meshes/mesh1.xml");

Die Methode facade.readMeshPrototype(...) ruft hier das ResourceCollectionSet auf und dieses sucht dann der Reihe nach in allen registrierten ResourceCollections nach "meshes/mesh1.xml". Der erste Fundort wird dann genutzt um das Objekt zu laden.

Jede ResourceCollections kann dabei eine andere InputStreamSource besitzen: Netzwerk, ZIP-Archiv, lokales Fileystem, Klassenpfad,... alles ist hier erlaubt.

Um nun auf den eigentlichen Grund dafür zurückzukommen: Es genügt nun die Übergabe eines InputStreamSource Objekts sowie eine dafür gültige Pfadangabe zu einer resource-collection.xml um sicherzustellen, dass eine Menge von Resourcen genau definiert ist. Für die meisten Anwendungsfälle wird es wohl so sein, dass während der Entwicklungszeit das InputStreamSource Objekt eine Instanz von DirectoryInputStreamSource sein, welches einfach auf ein Filesystem-Verzeichnis verweist. Später, in einem Release wird dies wohl eher ein Verweis auf ein ZIP oder JAR-Archiv sein.

Das ResourceCollectionSet-System ist derzeit nur im Subversion-Repository vorhanden. Es wird aber im nächsten Release der Engine enthalten sein zusammen mit Beispielprogrammen.

ParrotEngine 0.2 released!

Ab sofort ist die Version 0.2 der 3D Parrot Engine verfügbar! Gegenüber der Vorversion wurde die grundlegende Struktur der Engine überarbeitet, das Renderverfahren flexibler gestaltet und eine Menge Performanceoptimierungen sowie Verbesserungen an der Klassenstruktur vorgenommen.

Dieses Release hat als Hauptaufgabe die Basisinfrastruktur der Engine so zu stabilisieren, dass eine feste Grundlage entsteht auf der alle weiteren Erweiterungen implementiert werden können ohne eine erneute Anpassung der Grundstruktur zu erfordern.

Mit dieser Version kommen nun auch einige Beispielprogramme um den Einstieg in die Programmierung mit der Engine zu erleichtern und auch um die Features zu demonstrieren. Das Build-System wurde komplett überarbeitet so dass nun ein einzelnes build.xml alle Aufgaben erledigen kann: Auch das Starten der Beispielprogramme.

Ein Getting-Started Tutorial zeigt, wie einfach mit der Entwicklung mit der Engine begonnen werden kann. Angefangen von der Einrichtung der Entwicklungsumgebung bis hin zum ersten lauffähigen Programm. Die Downloads und weiteren Links befinden sich wie gehabt auf der Hauptseite der Engine.