Ergebnis 1 bis 20 von 33

Thema: Simple-2D-Engine

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1

    Simple-2D-Engine


    Hallo und Willkommen zu meiner kleinen Projekteinführung zu Simple-2D-Engine.


    Um was für ein Projekt handelt es sich?:
    Grob gesagt ist es ein 2D Game Maker. Es gibt einen eigenen GameEditor (MapEditor, DatabaseEditor), sowie einen Game Launcher, der aus verschiedenen Gründen nun bald zum 3. mal komplett neu Aufgesetzt wird. Hierbei setze ich voll und ganz auf Qt, welches das Framework sowohl für den Editor, als auch für den Game Launcher, ist. Alle Game relevanten Daten werden als XML Dateien gespeichert, und zu beginn des Spiels komplett in den Speicher geladen. Bisher unterstütze ich noch kein Streaming (auch nicht bei Maps), was aber auch den Grund hat, das es bisher noch nicht nötig ist.

    Sprache, Framework und Sonstiges:
    Das komplette Projekt ist in C++ geschrieben und nutzt QT 5.1.0, sowie boost 1.53.0. Zum Programmieren wird VisualStudio 2012 Professional genutzt.

    Was ich erreichen möchte:
    An erster Stelle ist das Ganze ein Lernprojekt, allerdings möchte ich hier auch etwas mit erreichen. Ich möchte den Leuten, die meine Engine als Grundlage für ihre Spiele nutzen, ein möglichst mächtiges und verständliches Tool mit an die Hand geben. Das oberste Ziel im Moment ist die Fertigstellung des Game Editors, bzw die Fertigstellung der ersten Version. Das hier im späteren Verlauf noch weitere Änderungen und Erweiterungen auftauchen ist sicher!

    Unterschiede zum Maker:
    Es wird kein RPG Maker Klon! Mein Ziel ist es eine eigenständige OpenSource Plattform zu erstellen. In den ersten Versionen wird es auch keine ScriptEngine geben, da diese:
    1. sehr viel Zeit benötigt
    2. vom logischen Ablauf eher ganz nach hinten gehört
    3. keine Priorität besitzt.

    Vor allem gibt es in meiner Engine kein "Event" Denken. Der Maker sieht alles, was erstellt wird, als Events. D.h. sind diese auf der Map platziert, werden sie auch dort näher beschrieben (mit Event Code; Call Befehle lasse ich hier mal außen vor). Hier sind Dinge, die auf der Map platziert werden, bereits fertig definiert, und lediglich eine Kopie ihrer Schablone. Die Schablone wird über die Database angepasst. Änderungen betreffen JEDE dieser Kopien. Wer schon einmal Object Orientiert programmiert hat, wird sich etwas darunter vorstellen können, und es auch zu schätzen wissen!
    Es muss nicht für jedes Event die Variabeln angepasst werden, nein, das Object besitzt seine eigenen Variabeln!
    Das ist z.B. einer der Gründe, warum es anfangs keine ScriptEngine geben wird, da es noch nicht komplett absehbar ist, welche Änderungen mir bis dahin noch einfallen

    Der 2. große Unterschied ist das Mapping allgemein. Es gibt keine Chipsets, sodass man zu jeder Zeit die komplette Auswahl aus seinen bereits importierten Tiles hat.

    Bisher erreichtes:
    Ich erreiche bald mit dem Game Editor meine erste Alpha und kann folgende Features nennen:

    MapEditor:
    Das Mappen
    Gemappt wird mit der Maus. Hierbei gibt es 2 verschiedene Methoden Tiles zu platzieren. Einmal den normalen Stift (mapt 1 Tile) oder den Filler. Der Filler ist das äquivalent zum Paint Farbeimer. Man hat ebenso die Möglichkeit sich auf beide Maustasten unterschiedliche Tiles zu legen. Gemappt wird auf bis zu 100 Ebenen (wobei ich das ganze nicht empfehlen würde, so viele Ebenen zu verwenden ), sodass man mit transparenten Tiles mehr als genug Möglichkeiten hat.
    Zusätzlich gibt es AutoTiles. Hierbei zitiere ich mich mal selbst aus meinem Wiki:
    Zitat Zitat
    Auto Tiles sind spezielle Tiles, die sich selbst anpassen und das Mappen von Terrain erheblich erleichtern. Möchte man einen verwinkelten Weg (mit vielen Kurven, Kreuzungen, Verzweigungen, etc) mappen, benötigt man dafür 46 unterschiedliche Tiles, um jede Eventualität zu berücksichtigen. AutoTiles bieten die Möglichkeit das ganze mit 10 zu machen. Aus diesen 10 Tiles werden die restlichen 36 generiert und passend zusammen gebaut. Beim Mappen wird dann automatisch das richtige Tile gesetzt.


    Platzieren von Objecten
    Der 2. Mapping Modus sind die Objecte, die man auf der Map platziert. Hierbei lässt sich natürlich die Richtung und Position bestimmen. Ob ich dem Ganzen noch einen Collision Detector spendiere (sodass keine 2 BoundingRects von Objecten sich überschneiden können) oder ob ich es sein lasse, dazu mache ich mir im späteren Verlauf noch Gedanken. Ich tendiere allerdings dazu, den User nicht allzu sehr zu beschneiden, und das solche Überlappungen durchaus möglich sein sollten.

    ScriptPoints (noch nicht implementiert)
    ScriptPoints sind Bereiche auf der Map, die bei Kollision ausgelöst werden. Dabei wird sich bestimmen lassen, ob nur durch einen Spieler oder NPC. ScriptPoints werden vor allem für Teleports zwischen den einzelnen Maps genutzt. Allerdings wird es auch die Möglichkeit geben, den ScriptPoints eigene Scripts zu geben, die dann ausgeführt werden.

    DatabaseEditor:
    TileDatabase
    Über die TileDatabase lassen sich die Tiles, welche man zum Mappen verwendet bearbeiten. Man hat die Möglichkeit eine transparente Farbe und die Passierbarkeit festzulegen. Passierbarkeit kann man in 4 Richtungen bestimmen.

    AutoTileDatabase
    Mit der AutoTileDatabase lassen sich, aus bereits erstellten Tiles, AutoTile-Sets zusammen klicken, welche man ebenso zum Mappen verwenden kann, und die sich beim Mappen selbst anpassen.

    SpriteDatabase
    Die SpriteDatabase ist nicht sonderlich spektakulär. Man importiert, wie bei den Tiles auch, seine Grafiken und vergibt eine transparente Farbe. Sprites werden für Animationen benötigt.

    AnimationDatabase
    Jedes WorldObject benötigt mindestens 4 Animationen, eine für jede Richtung. Hierbei ist es egal, ob die Animation aus einem Frame oder 100 besteht. In Animationen kann man Sprites verschieben, rotieren und vergrößern/verkleinern. Dabei hat man bei jedem Frame die Kontrolle darüber, wie lange er dauert. Für die Interessierten, hier mal ein kleines Video, das im Grunde das zeigt, was man machen kann (natürlich nicht alles ).
    Animation Video

    WorldObjectDatabase
    WorldObjects sind praktisch statische Objecte, die auf der Map herum stehen. Sie werden von jeglichen Move- und Scriptupdates ausgeschlossen, haben also keine Möglichkeit selbst etwas zu tun. Ein typisches WorldObject ist eine Truhe, die erst etwas tut, wenn jemand mit ihr interagiert. Jedoch wird ein WorldObject durchaus sein eigenes Script besitzen können.

    DynamicObjectDatabase (noch in Arbeit)
    Das sind praktisch NPCs und alles was auf der Map von selbst etwas machen soll. Typisches Beispiel sind hier Gegner, die sich dem Helden in den Weg stellen.

    Schlusswort:
    Wer sich den Code mal anschauen möchte, den findet ihr hier. Ansonsten gibt es einen, in unregelmäßigen Abständen aktualisierten, Blog, und seit neustem auch ein kleines Wiki, welches ich fleißig am Befüllen bin



    mfg

    edit:
    hier mal noch 2 screenshots, wie der MapEditor momentan aussieht




    PS: Sollte sich jemand dazu berufen fühlen, an dem Projekt mitarbeiten zu wollen, so möge er sich mit mir in Verbindung setzen

    Geändert von DNKpp (25.11.2013 um 13:43 Uhr)

  2. #2
    Ich habe jetzt mal eine kleine Preview-Map erstellt, um mal zu zeigen, was man so alles machen kann.


    Die einzeln stehenden und die umgefallenen Bäume sind hierbei Objecte (pixelgenaue platzierung).
    Die Boden Tiles (Gras, hohes Gras (AutoTile, und hat einen transparenten Rand), Steine und die Waldtextur) wurden im "background" platziert, der wiederum in 3 Unterlayer unterteilt ist.
    Die "Baumkronen" sind ein AutoTile und wurden im "foreground" platziert, welcher hier ebenso aus 3 Unterlayern besteht.

    Wie im 1. Post bereits beschrieben, können die beiden Hauptlayer (background und foreground) aus bis zu 100 Layern bestehen. Die Anzahl ist von Map zu Map variabel einstellbar.

    Die Map wurde über die Programm eigene "Map Screenshot" Funktion erstellt (natürlich kann man das Gitter der Map auch ausblenden)

    Geändert von DNKpp (14.06.2013 um 08:05 Uhr)

  3. #3
    Sieht schonmal interessant aus. Vorallem, dass es mit 100 Layern je Ebene eine hinreichende Menge an Layern gibt dieses Mal, was ja beim VX/Ace vernachlässigt wurde.
    Wie sieht es mit dem Eventing aus und was für ein KS wird es geben?

  4. #4
    Wie im 1. Post beschrieben, wird es kein "Eventing" in diesem Sinne geben. Man kann Scriptnamen vergeben (an Maps und Objecte). Die Scripte werden per C++ geschrieben, und ähnlich dem DynSDK per .dll geladen. Damit hat man das Maximum an Möglichkeiten, ohne den eigentlichen Launcher verändern zu müssen. Ähnlich wird es auch mit dem KS laufen. Das KS wird ebenso aus einer DLL geladen, und über bestimmte Callbacks angesprochen (combat start, combat end, etc).
    Wie es später mit einer Point&Click Script Engine aussieht, kann ich jetzt noch nicht genau sagen, geplant ist es aber.

    EDIT: Die 100 Layer sind das Maximum, das ich zulassen möchte, ich denke aber, das niemand so viele Layer benötigt. Außerdem benötigt das ganze noch ein paar Benchmark Tests, damit ich das einordnen kann, wie das mit der Performance aussieht. Ich denke, dem Großteil werden 3 Layer reichen.

  5. #5
    Ich finde es schade das sich kaum jemand für dieses Projekt zu interessieren scheint. Ich gebe zu, ich habe allein auf der ersten Seite, in diesem Unterforum, 2 solcher Projekte gesehen, deswegen kann ich in gewisser Weise die Zurückhaltung verstehen. Trotzdem fände ich ein paar Meinungen/Kommentare nett (nicht weil ich hören will, wie toll ich doch bin, sondern weil ich ganz gerne ein paar Meinungen hätte, mit denen ich arbeiten kann )

    Zum Thema "Alpha Release des Editors" muss ich leider noch ein wenig vertrößten, da ich vorhabe "Tilesets" zu implementieren, um das Mapping ein bisschen zu erleichtern. Hier mal eine kurze Beschreibung:
    Tilesets sind keine festen Bilder, wie man vielleicht vermuten mag, sind sind dynamische Rechtecke, die aus Tiles bestehen. Diese Tilesets kann man, wie die AutoTiles, zusammen basteln. Sie sollen beim Mapping helfen. Wie man bei der Map 3 Posts höher ganz gut sehen kann, gibt es bestimmte Texturen, die immer zusammen gehören (in diesem Fall die Bäume, also nicht die Freistehenden (das sind Objecte), sondern die "Umrandung" des Waldes). Diese Bäume bestehen aus 2 Tiles, eins für oben und eins unten. Es ist natürlich immer mühselig, beide Tiles nach einander zu setzen. Hier kommen dann die Tilesets ins Spiel. Hier kann man sich solche Gebilde (Rechteckig) zusammen basteln, und kann mit einem Klick direkt alle platzieren. Das hat Ähnlichkeiten mit dem Rubber Band des Makers (mit dem man mehrere Tiles auswählen kann), ist aber deutlich flexiebler einsetzbar (ist ja nicht immer garantiert, das die Tiles in der Auswahl direkt passend angeordnet sind).

    Irgendwelche Anregungen dazu?

    mfg

    Geändert von DNKpp (21.06.2013 um 00:53 Uhr)

  6. #6
    Ich finde das Projekt ziemlich interessant, mich würde aber interessieren, in welche Richtung das später gehen soll, dh. wie viel du vorschreibst und wie viel du dem Ersteller überlässt. Diese Frage bezieht sich in erster Linie auf den bereich Scripting und was du dafür so geplant hast. Wird das so eine mühselige Zusammenklicksprache wie beim RPG-Maker, oder hast du vor, das ganze etwas freier zu gestalten, indem du dem Ersteller einen Zugriff auf "tiefere Programmebenen" gewährst?

    Ich hätte bspw. die Idee, die Möglichkeit einzubauen, dynamische Datenbanken aufzuziehen und diese per Script anzusteuern. So könnte man dann sehr frei über Dinge wie ein Kampfsystem entscheiden.

  7. #7
    OK, ich plauder mal ein wenig aus dem Nähkästchen, wie ich mir das später vorstelle.

    Es wird verschiedene Schnittstellen geben, über die die Entwickler ihre eigenen C++ Scripte einladen können. Ähnlich wie beim DynRPG. Für alle anderen wird es wohl eine Point&Click Engine geben (es ist geplant, ob ich das allerdings umsetzen möchte, steht in den Sternen, weil das doch ein extremer Haufen Arbeit ist), mit der man sich in guter alter Maker Manier seine Scripte zusammen klicken kann.
    Jetzt kommen wir zu einer Besonderheit. Wie ich bereits vorher schon erwähnt habe, arbeite ich mit "Objecten". Diesen Objecten kann man auch Variabeln geben, die sie fest besitzen. Diese Variabeln lassen sich auch über die C++ Schnittstellen ansprechen und auch ändern. Hierbei gibt es auch Objecte, die von anderen erben können. Diese erhalten dann alle Variabeln, die das Parent Object besitzt.
    Schreibt man sich nun also ein grundlegendes Script für z.B. ein KS, und nutz darin die Variabeln der Objecte, kann man diese innerhalb der Database schon ändern. Das heißt, die Startwerte lassen sich anpassen, ohne das Script ändern zu müssen. Das wiederum bietet natürlich viel Freiraum für den Entwickler.
    Wenn der Entwickler des Scripts viele Variabeln aus der Database ließt, hat der spätere Nutzer des Scripts mehr Möglichkeiten, selbst Einstellungen vor zu nehmen.

    Ich hoffe ich habe das ausgiebig und verständlich genug beschrieben

  8. #8
    Habs mir gerade mal durchgelesen, und muss sagen: Hut ab! Hoffentlich ziehst du das auch durch! Falls ja, wäre es mir eine Freude, zu gegebener Zeit einmal ein kleines Projektchen mit deinem Programm zu versuchen :-D
    Da fällt mir noch eine Sache ein, zu der du vielleicht schon eine Antwort hast:

    Wie sieht es mit Audio aus? Also, welche Formate werden unterstützt werden? Würde man vielleicht sogar auf einer Map (Beispiel Weltkarte) verschiedene Soundzonen anlegen können? (also regionale Musik (düster im Sumpf, freundlich auf einer offenen Wiese)


    Bis dahin noch viel Erfolg! Lass dich nicht entmutigen!

    Greetz

  9. #9
    Zu meiner Schande muss ich gestehen, das ich bisher den Sound komplett außen vor gelassen habe
    Aber da ich QT nutze, und QT eigentlich alles gängige unterstützt, wird das auch kein großes Problem da stellen.
    Soundzonen ließen sich durchaus umsetzen, merke ich mir mal für die Zukunft (wird es in die 1. Version nicht schaffen).

    mfg

  10. #10
    Es ist nun soweit!
    Hiermit veröffentliche ich die erste Alpha meines GameEditors (v0.0.1).
    Ich bitte Interessierte sich das ganze einmal anzusehen, und ein bisschen damit herumzuspielen. In dem Paket sind 2 Testprojekte enthalten, das erleichtert den Einstieg erheblich (wählt dazu am Besten "untitled" aus, da das das Komplexere der beiden ist). Für weitere Erklärungen besucht bitte mein Wiki (hier werde ich in den nächsten Tagen noch einige Updates online bringen, mit entsprechenden Tutorials). Ich habe versucht, das Programm so verständlich wie möglich zu halten, um den Einstieg zu erleichtern. Ich weiß, das es dennoch recht komplex erscheinen kann, wenn man sich das erste mal in der Database umsieht. Nehmt euch ein paar Minuten, lest die vorhanden Artikel, und versucht ein wenig damit herumzuspielen.

    Ich bin froh über jedes Feedback, das ich bekommen kann, aber auch Fragen beantworte ich weiterhin gerne.

    Zum Schluss sei noch einmal erwähnt, das sich mit diesem Editor bisher nichts spielbares erstellen lässt, und er im Prinzip nur Maps bearbeiten kann (mit ein paar Extras).

    DOWNLOAD

    Um den Editor starten zu können, benötigt ihr zusätzlich dieses Paket (von Microsoft).

    mfg

    Geändert von DNKpp (28.06.2013 um 21:25 Uhr)

  11. #11
    Hu, also damit du nicht ganz ohne Feedback bleibst, werd ich dir mal einige Punkte aufzählen, die mir gefallen und die mir nicht gefallen!
    Ich hoffe ich hab nichts vergessen und auch alles soweit getestet. :S

    Positiv
    • Vorschaufunktion spezieller Objekte
    • Reinziehen der "Weltobjekte" und das Bewegen dieser im Editor selbst
    • So wie es aussieht, die Möglichkeit zu jedem Text in der Datenbank, eine Übersetzung anzugeben
    • Bounding Box
    • Anlegen eigener Tilesets (Diese könnten meiner Meinung nach ebenfalls eine Vorschau im TileSets-Baum erhalten)
    • Autotiles können Transparenz erhalten, sodass man im "Foreground-Layer" diese normal verwenden kann
    • Massenimports
    • Anlegen mehrerer Layers für eine Map (damit lassen sich Karten schön mappen )

    Verbesserungswürdig
    • Die "Rückgängig-Funktion" : Folgendes Szenario: Ich zeichne mit der Maus, ohne den Button loszulassen, viel Gras, merke dass ich doch nicht alles benötige und drücke STRG-Z. Leider muss ich das so oft drücken, wie Gras gezeichnet wurde. Besser wäre es, wenn sofort die letzte Aktion verschwindet, also mein komplett gezeichnetes Gras. (Ist wahrscheinlich Geschmackssache)
    • Ah jetzt hab ich herausgefunden, dass der Button "<-" der Zurück-Knopf ist ohne Short-Cut ... müsste man sich vielleicht auch noch überlegen, wie man das Designtechnisch besser lösen mag.
    • Der Cursor im Editor selbst. Ich find das Fadenkreuz ist dafür eine schlechte Wahl...ich wollte am Anfang mehrere Felder selektieren, hab jedoch gezeichnet.
    • Im Database-Editor funktioniert bei mir der Cancel-Button nicht (Verhalten für mich: Drücke auf "Cancel" und das Fenster schließt sich)
    • Ist wahrscheinlich eher etwas für mich, aber ich würde noch eine oder zwei weitere Zoomstufen begrüßen und zwar näher dran (150% und vllt. 200%) Gerade für Detailarbeiten für mich extrem wichtig.
    • TileSet fallen-tree.png hat ein etwas komisches Verhalten. (es wiederholt sich immer in y-Richtung und wird nicht komplett gezeichnet) ::::: Ich seh grad, beim Fill hat das Tile die richtige Grafik
    • Was mir dabei auffällt..man importiert viele kleine Tiles, jedoch kann das später unübersichtlich werden. Eine Gruppierung wäre dabei hilfreich. (Ähnlich einem Chipset-System im Maker, nur mit DropDown-Box oder so)
    • Klick ich im Menü auf "File" und "move" dann mit meiner Maus über die anderen Reiter und komme auf "Database", öffnet sich diese sofort -> Sollte am Besten nur auf ein Klick reagiern
    • Bei den Weltobjekten gibt es ja die Animationsvorschau....die find ich irgendwie etwas unübersichtlich. Auch wenn ich das Fenster vergrößer, bleibt das leider so...da könnte man vielleicht noch einen Button einzubauen mit "Show Animation" oder sowas, der dann die ganze Verwaltung in einem neuen Fenster öffnet.

    nochmal nen Fazit
    Joa ansonsten sehen die Funktionen soweit gut aus, jedoch sind mir die Objekt-Anmiationstypen noch unklar...da kann man auch wenig dran schrauben. Ebenso wie bei den Texten....da hätt ich zu gerne mal ein weiteres Textfeld erzeugt...
    Es sind echt schöne Sachen dabei und dein Projekt geht in eine gute Richtung, wie ich finde.
    Die bisherigen Funktionen zur Kartendarstellung mit den Tiles, Autotiles und Weltobjekten find ich gut gelungen und damit würden sich schon schöne Karten darstellen lassen.
    Ich bin auf jeden Fall gespannt, wie die weitere Entwicklung vorangeht.

  12. #12
    Auf meinem Blog und im wiki Ist der Link zu finden. Hab nicht gedacht, das den jemand hier benötigt Ist alles bei github zu finden.
    Allerdings bin ich seit einiger Zeit mit refactoring und optimieren beschäftigt, deswegen Ist es nicht mehr ganz aktuell.

  13. #13
    Jo, mal wieder was von der Front

    Ich hab mir XRPGs Kritik zu Herzen genommen, und überarbeite gerade meinen In-/Output. Das wird noch ein paar Tage dauern, bis ich da durch bin, aber ich denke es wird sich lohnen.
    Die 2. Entscheidung die ich getroffen habe ist, das ich Maps im Binary Format speichern werde. Das wird den extremen Overhead der XML Dateien vernichten und mit Sicherheit auch einen kleinen Geschwindigkeitsschub bringen.

    Wie bereits im letzten Post beschrieben, gehe ich das Projekt gerade von vorne bis hinten durch und schaue was sich optimieren lässt, und wo ich vielleicht nochmal besser was umschreiben sollte. Ich habe einige solcher Stellen entdeckt, deswegen wird es in nächster Zeit auch keinen großartigen (offensichtlichen) Fortschritt geben.

    mfg

    PS: Wer das Programm noch testen möchte, darf das natürlich weiterhin gerne tun. Allerdings spiegelt das mittlerweile nicht den aktuellen Stand wieder.

  14. #14
    Hallo anti-freak

    Ich beobachte dein Projekt hier schon länger. Irgendwie scheint dein Blog nicht mehr zu funktionieren...
    Jedenfalls, tolle Sache an der du da arbeitest, wollte ich bloss mal loswerden!

    Gruss
    Raoh

  15. #15
    Hallo roah,

    vielen Dank für deinen Kommentar
    Mein Blog funktioniert weiterhin wie gewohn. Hast du es vll am 17.8 so gegen 23:50Uhr versucht? Da hatte google ne 2 minütige Downtime :P
    Hier nochmal der Link: http://antis-proggerground.blogspot.de/

    mfg

  16. #16
    So, für alle die denken, es wäre tot...
    Dem ist nicht so
    Ich hatte wenig Zeit und sehr stumpfe Arbeit vor mir (kompletter rewrite von Database und allem was dazu gehört (also praktisch alles :P )).

    Um mal einen kurzen Überblick zu liefern -> der Editor funktioniert noch nicht, alerdings kann ich den meisten Code wiederverwenden. Die Database an sich funktioniert wieder und das auch besser als vorher und in einem hübscheren Code-Design
    Ich brauche noch ein paar Stunden um auf den alten Stand zurück zu kehren, befinde mich aber auf einem guten Weg.

    Mit freundlichen Grüßen

  17. #17
    Da ich gerade ein wenig Zeit habe und unbedingt meine Fortschritte präsentieren möchte, hier mal ein kleines Video zum MapEditor
    Das Video zeigt die grundlegenden Möglichkeiten, die einem mit dem MapEditor zur Verfügung stehen. Das platzieren der MapObjecte und der Script-Punkte fehlt jedoch noch.
    Ich hoffe ich habe mit den Kommentaren alles wichtige erklärt, wenn nicht, einfach mal nachfragen.


Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •