Heyho,
ich möchte hiermit mein neuestes Projekt vorstellen: Die Frostshard Engine.
Da ich gerne eine Art Blog über größere Projekte führe, möchte ich diesen Thread nicht nur als Vorstellung nutzen, sondern auch als Entwicklungsthread.
Nach und nach werden hier immer neue Bereiche auftauchen, je nachdem wie Weit die Entwicklung voranschreitet.
Da die Engine, wie bereits erwähnt, noch in Entwicklung ist, freue ich mich jederzeit über sinnvolle Kritik.
Auch über mögliche neue Features würde ich mich freuen.
Negativbeispiel:
Positivbeispiel:
Nun möchte ich noch kurz zu mir kommen:
Ich hatte bereits in einem Zeitraum von 4 Wochen eine kleine 2D RPG Engine geschrieben, da es eine Projektarbeit für die Schule war. Auch diese wurde in C++ geschrieben.
Nun möchte ich aber jegliche Fehler, welche vorhanden waren, nicht wiederholen und die Engine als Langzeitprojekt in meiner Freizeit programmieren.
Da ich nebenbei noch arbeiten gehe, könnt ihr nicht erwarten, dass ich wöchentlich oder gar täglich neue Updates bringen werde.
Dazu fällt mir ein prima Sprichwort ein: It's done, when it's done.
Nun aber näheres zur Engine an sich.
[HR][/HR]
[Logo folgt, wenn sich jemand daran versuchen möchte, einfach eine PN schreiben]
Die Frostshard Engine soll eine voll funktionstüchtige Engine werden, welche zum Erstellen von 2D Rollenspielen in C++ genutzt werden kann.
Zur einfacheren Entwicklung wird die Bibliothek SFML 2.1 genutzt.
Zur Engine gehört ebenfalls ein Editor, der sogenannte "Frostshard Mapper", mit welchem man u.a. die gesamten Karten des Spieles erstellen kann.
Das gesamte Projekt ist Open Source, allerdings werde ich das Projekt erst hochladen, wenn ich schon einige Grundbausteine fertig programmiert habe. Sonst bringt es weder mir, noch euch etwas.
Nun komme ich aber mal zu den derzeitigen und geplanten Features.
Legende:
Die genannten Features, welche ausreichend geplant oder bereits in Entwicklung sind, werden weiter unten detailliert erklärt.
Frostshard Engine:
[SPOILER2]Tilemaps
Kollisionen
Eventsystem
Textboxen
Spieler
Interface (z.B. Menü bei ESC)
Itemsystem
Inventarsystem
Händler/Shops
Kampfsystem
NPCs
LUA-Engine für Events
[/SPOILER2]
Frostshard Mapper:
[SPOILER2]Tilebasiertes Mappen der Tilemaps (als Beispiel könnte man den RPG Maker nehmen)
Kollisionsmapping
Events setzen
NPCs setzen
LUA-Programmierung der Events direkt im Mapper
[/SPOILER2]
Nun möchte ich zu den Features kommen, welche bereits ausreichend geplant oder bereits in Entwicklung sind.
[HR][/HR]
Tilemaps:
[SPOILER2]Um eine Tilemap zu verstehen, muss man erstmal wissen, was ein Tileset ist.
Dies ist zum Beispiel ein Tileset, welches jedoch noch keine richtigen Grafiken besitzt:

Wie man klar erkennen kann, ist ein Tileset in immer gleichgroße Quadrate aufgeteilt, in diesem Fall besitzt ein Tile eine Größe von 32x32 Pixeln.
Auf diesem Bild sind also genau 8 Tiles.
Und genau aus solchen entsteht eine Tilemap.
Eine Tilemap ist also eine Grafik, welche aus vielen kleinen Grafikstückchen zusammengesetzt wird.
Mit diesem Tileset könnte also eine Tilemap im fertigen Fenster wie folgt aussehen:

Klar erkennbar ist, das einige Tiles mehrmals benutzt wurden wie z.B. das Tile mit der Nummer 1.
Und genau das ist der Sinn eines Tilesets: Mit nur einer Grafik, können mehrere Landschaften entstehen.
Diese Methode war z.B. sehr wichtig für ältere Rollenspiele wie Secret of Mana. Da die alten Kassetten des Super Nintendos nicht viel Platz bieten konnten, wurde so (nach damaligen Entwicklungsstand) unmengen an Speicherplatz gespart.
Und genau auf dieses System baut die Frostshard Engine auf.
Nicht nur die User mit einer schlechten Internetleitung werden sich darüber freuen.
Es ist geplant, dass diese Tilemaps in einem .XML-Dateiformat gespeichert werden.
Dies ermöglicht eine leichte und schnelle Programmierung, welche die Ladezeiten gering halten sollte und dennoch komplett anpassungsfähig ist.
Eine Tilemap wird als gespeicherte Datei vorraussichtlich so aussehen (Die Einrückung wird vom Forum leider nicht übernommen):
[SPOILER2]
<Map>
<Config>
<Tileset>tileset.png</Tileset>
<TileSize>32</TileSize>
<Width>2</Width>
<Height>2</Height>
</Config>
<MapData>
<Tile Row="0" Column="0">0</Tile>
<Tile Row="0" Column="1">0</Tile>
<Tile Row="1" Column="0">1</Tile>
<Tile Row="1" Column="1">4</Tile>
</MapData>
<CollisionData>
<Collision Row="0" Column="0">0</Collision>
<Collision Row="0" Column="1">0</Collision>
<Collision Row="1" Column="0">1</Collision>
<Collision Row="1" Column="1">1</Collision>
</CollisionData>
</Map>
[/SPOILER2]
Diese Tilemap kann sowohl von der Engine als auch vom Mapper geladen und benutzt werden.
[/SPOILER2]
[HR][/HR]
Kollision:
[SPOILER2]Eine Kollision entsteht, wenn der Spieler ein Tile betreten möchte, welches er aber nicht betreten kann.
Dies wäre im Falle eines 2D Rollenspieles also z.B. eine Mauer. Es wäre ja auch totaler Blödsinn, wenn der Spieler durch alles durchlaufen könnte, oder?
Ein Kollisionssystem verhindert also, dass ein Spieler nicht durch jedes beliebige Tile durchlaufen kann.
Die Kollision ist eng mit der Tilemap verbunden.
Jede Tilemap hat ihre eigene Kollision.
In der Frostshard Engine hat nicht jedes eigene Tile eines Tilesets eine Kollision, sondern jede Tilemap kann das gleiche Tileset mit anderen Kollisionsdaten haben. Dies ist vorallem nützlich, wenn man Geheimwege o.ä. einbauen möchte.
Die Kollision wird in der jeweiligen Tilemap-Datei gespeichert.
Um das Beispiel von Oben noch einmal aufzugreifen:
[SPOILER2]
<CollisionData>
<Collision Row="0" Column="0">0</Collision>
<Collision Row="0" Column="1">1</Collision>
<Collision Row="1" Column="0">1</Collision>
<Collision Row="1" Column="1">0</Collision>
</CollisionData>
[/SPOILER2]
Mit diesen Kollisionsdaten ergibt sich folgende Kollision:
[TABLE="class: grid, width: 10"]
[TR]
[TD]Keine Kollision[/TD]
[TD]Kollision[/TD]
[/TR]
[TR]
[TD]Kollision[/TD]
[TD]Keine Kollision[/TD]
[/TR]
[/TABLE]
Jede 0 steht also für keine Kollision und jede 1 steht für eine Kollision.
Das Kollisionsmapping im Frostshard Mapper wird vorraussichtlich wie folgt aussehen:

Beim Kollisionsmapping hat man seine Tilemap vor sich.
Wenn man nun mit dem Kollisionstool auf ein Tile klickt, bekommt dieses Tile eine halbdurchsichtige lilane Ebene. Diese halbdurchsichtige lilane Ebene markiert Tiles, durch welche der Spieler im Endeffekt nicht durchlaufen kann. Die halbdurchsichtige lilane Ebene wird natürlich im Spiel oder außerhalb des Kollisionstool im Frostshard Mapper nicht sichbar sein.[/SPOILER2]
[HR][/HR]
Changelogs
0.0.1 Changelog:
[HR][/HR]
Wie bereits erwähnt, freue ich mich über sinnvolle Kritik und weitere gewünschte Features.
Da MMORPG-Core das einzige Forum ist, wo ich eigentlich noch aktiv bin, wird dieser Beitrag auch erstmal nur hier erscheinen, M-Core exklusiv sozusagen.
Ohne meine ausdrückliche Erlaubnis darf dieser Beitrag nicht in anderen Foren geposted werden, wogegen eine Verlinkung zu diesem Thread auf M-Core erlaubt ist.
Ich hoffe, dass es hier doch den einen oder anderen interessieren wird.
Vielleicht verleite ich ja sogar jemanden dazu, C++ zu lernen - Ich versuche nämlich die Engine so anfängerfreundlich wie möglich zu kommentieren. Gleichzeitig lernt man auch noch den Umgang mit der Bibliothek SFML, welcher aus meiner Sicht ebenfalls sehr leicht zu bedienen ist.
Aber selbst ohne Programmierung wird das ein oder andere mit der Engine möglich sein.
Wer weiß, vielleicht läuft es am Ende ja sogar auf eine Art RPG Maker aus? :-)
Ich freue mich aufjedenfall über eure Meinungen und hoffe auf rege Diskussionen und reges Interesse!
~Kaev
ich möchte hiermit mein neuestes Projekt vorstellen: Die Frostshard Engine.
Da ich gerne eine Art Blog über größere Projekte führe, möchte ich diesen Thread nicht nur als Vorstellung nutzen, sondern auch als Entwicklungsthread.
Nach und nach werden hier immer neue Bereiche auftauchen, je nachdem wie Weit die Entwicklung voranschreitet.
Da die Engine, wie bereits erwähnt, noch in Entwicklung ist, freue ich mich jederzeit über sinnvolle Kritik.
Auch über mögliche neue Features würde ich mich freuen.
Negativbeispiel:
die tilemap ist voll scheiße und du kannst gar nicht programmieren
Positivbeispiel:
Ich finde das System der Tilemap nicht schön gelöst, da unter die Nummerierung der Tiles sehr unübersichtlich ist. Außerdem gibt es bei den Textboxen einen Fehler, welche das Spiel bzw. die Engine crashen lässt. Dieser taucht auf, wenn [hier Ursache einfügen].
Außerdem würde ich es gut finden, wenn es eine Art Shopsystem geben würde, bei dem der Spieler seine Gegenstände kaufen und verkaufen kann.
Nun möchte ich noch kurz zu mir kommen:
Ich hatte bereits in einem Zeitraum von 4 Wochen eine kleine 2D RPG Engine geschrieben, da es eine Projektarbeit für die Schule war. Auch diese wurde in C++ geschrieben.
Nun möchte ich aber jegliche Fehler, welche vorhanden waren, nicht wiederholen und die Engine als Langzeitprojekt in meiner Freizeit programmieren.
Da ich nebenbei noch arbeiten gehe, könnt ihr nicht erwarten, dass ich wöchentlich oder gar täglich neue Updates bringen werde.
Dazu fällt mir ein prima Sprichwort ein: It's done, when it's done.
Nun aber näheres zur Engine an sich.
[HR][/HR]
[Logo folgt, wenn sich jemand daran versuchen möchte, einfach eine PN schreiben]
Die Frostshard Engine soll eine voll funktionstüchtige Engine werden, welche zum Erstellen von 2D Rollenspielen in C++ genutzt werden kann.
Zur einfacheren Entwicklung wird die Bibliothek SFML 2.1 genutzt.
Zur Engine gehört ebenfalls ein Editor, der sogenannte "Frostshard Mapper", mit welchem man u.a. die gesamten Karten des Spieles erstellen kann.
Das gesamte Projekt ist Open Source, allerdings werde ich das Projekt erst hochladen, wenn ich schon einige Grundbausteine fertig programmiert habe. Sonst bringt es weder mir, noch euch etwas.
Nun komme ich aber mal zu den derzeitigen und geplanten Features.
Legende:
- Fertig - Dieser Teil ist vorraussichtlich fertig programmiert.
- In Entwicklung - Dieser Teil ist gerade in Entwicklung
- Folgt - Dieser Teil wird aufjedenfall in die Engine aufgenommen, jedoch wurde die Entwicklung und Planung noch nicht gestartet.
- Geplant - Über diesen Teil wurde bereits nachgedacht, aber ist weder in Entwicklung, noch fertig programmiert, noch ist festgelegt, dass dieser überhaupt in die Engine aufgenommen wird.
- Ausgeschlossen - Dieser Teil wird vorraussichtlich nicht in die Engine aufgenommen.
Die genannten Features, welche ausreichend geplant oder bereits in Entwicklung sind, werden weiter unten detailliert erklärt.
Frostshard Engine:
[SPOILER2]Tilemaps
Kollisionen
Eventsystem
Textboxen
Spieler
Interface (z.B. Menü bei ESC)
Itemsystem
Inventarsystem
Händler/Shops
Kampfsystem
NPCs
LUA-Engine für Events
[/SPOILER2]
Frostshard Mapper:
[SPOILER2]Tilebasiertes Mappen der Tilemaps (als Beispiel könnte man den RPG Maker nehmen)
Kollisionsmapping
Events setzen
NPCs setzen
LUA-Programmierung der Events direkt im Mapper
[/SPOILER2]
Nun möchte ich zu den Features kommen, welche bereits ausreichend geplant oder bereits in Entwicklung sind.
[HR][/HR]
Tilemaps:
[SPOILER2]Um eine Tilemap zu verstehen, muss man erstmal wissen, was ein Tileset ist.
Dies ist zum Beispiel ein Tileset, welches jedoch noch keine richtigen Grafiken besitzt:

Wie man klar erkennen kann, ist ein Tileset in immer gleichgroße Quadrate aufgeteilt, in diesem Fall besitzt ein Tile eine Größe von 32x32 Pixeln.
Auf diesem Bild sind also genau 8 Tiles.
Und genau aus solchen entsteht eine Tilemap.
Eine Tilemap ist also eine Grafik, welche aus vielen kleinen Grafikstückchen zusammengesetzt wird.
Mit diesem Tileset könnte also eine Tilemap im fertigen Fenster wie folgt aussehen:

Klar erkennbar ist, das einige Tiles mehrmals benutzt wurden wie z.B. das Tile mit der Nummer 1.
Und genau das ist der Sinn eines Tilesets: Mit nur einer Grafik, können mehrere Landschaften entstehen.
Diese Methode war z.B. sehr wichtig für ältere Rollenspiele wie Secret of Mana. Da die alten Kassetten des Super Nintendos nicht viel Platz bieten konnten, wurde so (nach damaligen Entwicklungsstand) unmengen an Speicherplatz gespart.
Und genau auf dieses System baut die Frostshard Engine auf.
Nicht nur die User mit einer schlechten Internetleitung werden sich darüber freuen.
Es ist geplant, dass diese Tilemaps in einem .XML-Dateiformat gespeichert werden.
Dies ermöglicht eine leichte und schnelle Programmierung, welche die Ladezeiten gering halten sollte und dennoch komplett anpassungsfähig ist.
Eine Tilemap wird als gespeicherte Datei vorraussichtlich so aussehen (Die Einrückung wird vom Forum leider nicht übernommen):
[SPOILER2]
<Map>
<Config>
<Tileset>tileset.png</Tileset>
<TileSize>32</TileSize>
<Width>2</Width>
<Height>2</Height>
</Config>
<MapData>
<Tile Row="0" Column="0">0</Tile>
<Tile Row="0" Column="1">0</Tile>
<Tile Row="1" Column="0">1</Tile>
<Tile Row="1" Column="1">4</Tile>
</MapData>
<CollisionData>
<Collision Row="0" Column="0">0</Collision>
<Collision Row="0" Column="1">0</Collision>
<Collision Row="1" Column="0">1</Collision>
<Collision Row="1" Column="1">1</Collision>
</CollisionData>
</Map>
[/SPOILER2]
Diese Tilemap kann sowohl von der Engine als auch vom Mapper geladen und benutzt werden.
[/SPOILER2]
[HR][/HR]
Kollision:
[SPOILER2]Eine Kollision entsteht, wenn der Spieler ein Tile betreten möchte, welches er aber nicht betreten kann.
Dies wäre im Falle eines 2D Rollenspieles also z.B. eine Mauer. Es wäre ja auch totaler Blödsinn, wenn der Spieler durch alles durchlaufen könnte, oder?
Ein Kollisionssystem verhindert also, dass ein Spieler nicht durch jedes beliebige Tile durchlaufen kann.
Die Kollision ist eng mit der Tilemap verbunden.
Jede Tilemap hat ihre eigene Kollision.
In der Frostshard Engine hat nicht jedes eigene Tile eines Tilesets eine Kollision, sondern jede Tilemap kann das gleiche Tileset mit anderen Kollisionsdaten haben. Dies ist vorallem nützlich, wenn man Geheimwege o.ä. einbauen möchte.
Die Kollision wird in der jeweiligen Tilemap-Datei gespeichert.
Um das Beispiel von Oben noch einmal aufzugreifen:
[SPOILER2]
<CollisionData>
<Collision Row="0" Column="0">0</Collision>
<Collision Row="0" Column="1">1</Collision>
<Collision Row="1" Column="0">1</Collision>
<Collision Row="1" Column="1">0</Collision>
</CollisionData>
[/SPOILER2]
Mit diesen Kollisionsdaten ergibt sich folgende Kollision:
[TABLE="class: grid, width: 10"]
[TR]
[TD]Keine Kollision[/TD]
[TD]Kollision[/TD]
[/TR]
[TR]
[TD]Kollision[/TD]
[TD]Keine Kollision[/TD]
[/TR]
[/TABLE]
Jede 0 steht also für keine Kollision und jede 1 steht für eine Kollision.
Das Kollisionsmapping im Frostshard Mapper wird vorraussichtlich wie folgt aussehen:

Beim Kollisionsmapping hat man seine Tilemap vor sich.
Wenn man nun mit dem Kollisionstool auf ein Tile klickt, bekommt dieses Tile eine halbdurchsichtige lilane Ebene. Diese halbdurchsichtige lilane Ebene markiert Tiles, durch welche der Spieler im Endeffekt nicht durchlaufen kann. Die halbdurchsichtige lilane Ebene wird natürlich im Spiel oder außerhalb des Kollisionstool im Frostshard Mapper nicht sichbar sein.[/SPOILER2]
[HR][/HR]
Changelogs
0.0.1 Changelog:
Versionen
- Ich werde die Versionen nicht besonders unterteilen.
Wenn es sich um kleine Neuerung oder Bugfixxes handelt, wird die Version z.B. 0.0.2 heißen und nicht 0.2.0.
0.2.0 wäre z.B. eine Version, in der etwas größeres hinzugefügt wurde, wie z.B. ein Eventsystem oder ein Shopsystem oder sowas.
1.0.0 wird die erste große Version sein, in der alle wichtigen Dinge enthalten sind. Maps, Kollision, Events, Steuerung und sowas.
Maps
- Laden der Maps aus einer .XML-Datei funktioniert schnell und ohne Probleme.
- Ich habe mich dazu entschieden, die Kollision mit in die Mapklasse zu nehmen, da jede Map ihre eigene Kollision hat und nicht die einer anderen.
Hier mal ein kleines Beispiel, wie ich eine momentan verschiedene Maps aufrufen kann.
Alles anzeigenQuellcode
- TileMap *map;
- map = TileMap::getInstance();
- if(!map->load("map.xml"))
- {
- // Wenn alle benötigten Dateien gefunden, wird die map.xml angezeigt.
- // Ansonsten kann man hier festlegen, was passiert, wenn die Map nicht geladen werden konnte.
- return -1;
- }
- // Hier wechseln wir die aktuelle angezeigte Map zur map2.xml
- if(!map->load("map2.xml"))
- {
- // Siehe oben
- return -1;
- }
Events
- Nach einigen Überlegungen habe ich mich dazu entschlossen, ein LUA-System für Events einzubauen.
Allgemein
- Die Engine wird wohl eher eine Art RPG Maker werden. Zumindest möchte ich in Zukunft darauf hinarbeiten.
Deswegen ist auch mein Entschluss auf ein LUA-System für Events gefallen.
[HR][/HR]
Wie bereits erwähnt, freue ich mich über sinnvolle Kritik und weitere gewünschte Features.
Da MMORPG-Core das einzige Forum ist, wo ich eigentlich noch aktiv bin, wird dieser Beitrag auch erstmal nur hier erscheinen, M-Core exklusiv sozusagen.
Ohne meine ausdrückliche Erlaubnis darf dieser Beitrag nicht in anderen Foren geposted werden, wogegen eine Verlinkung zu diesem Thread auf M-Core erlaubt ist.
Ich hoffe, dass es hier doch den einen oder anderen interessieren wird.
Vielleicht verleite ich ja sogar jemanden dazu, C++ zu lernen - Ich versuche nämlich die Engine so anfängerfreundlich wie möglich zu kommentieren. Gleichzeitig lernt man auch noch den Umgang mit der Bibliothek SFML, welcher aus meiner Sicht ebenfalls sehr leicht zu bedienen ist.
Aber selbst ohne Programmierung wird das ein oder andere mit der Engine möglich sein.
Wer weiß, vielleicht läuft es am Ende ja sogar auf eine Art RPG Maker aus? :-)
Ich freue mich aufjedenfall über eure Meinungen und hoffe auf rege Diskussionen und reges Interesse!
~Kaev