Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : thornEngine - freie Java RPG-Engine



niR-kun
02.10.2011, 21:14
Ich programmiere zur Zeit eine freien, rpg_rt-ähnlichen Engine, die in Java geschrieben ist, mit Namen


thornEngine

Mein Ziel ist es eine Engine zu schreiben, die überall funktioniert wo Java (JRE 6 oder höher) und OpenGL installiert sind, egal ob unter Windows, Linux, MacOS X oder Solaris.

Der Kern der Engine, Bilder und Maps anzuzeigen, Variablen und Switches für das Scripting bereitzustellen und Musik/Sounds abzuspielen, ist soweit fertig. Scripting läuft schon relativ gut, ist aber noch recht kompliziert.
Den Quellcode der Engine werde ich spätestens Ende des Jahres bereit stellen. Ich muss vorher noch einige Sachen, u.a. den Code für Animationen schreiben.
Ob ich ein Maker-ähnliches Erstellungsprogramm erstelle weiß ich noch nicht, im Prinzip braucht man nur einen Texteditor und ein Mal-Programm.

Ach ja, etwas vertieft meine Konzepte und deren teilweise Realisierung:
Mein derzeitiges Konzept der Maps sieht es vor, dass Maps nicht wie bei der rpg_rt aus einzelnen "Kacheln" eines ChipSets (auf den Upper- und Lower Layer) und CharSets durch Events zusammengesetzt wird. Einzig und allein den Parallax Hintergrund habe ich übernommen.

Stattdessen:
Über dem Parallax Hintergrund liegt die Map, die aus einem kompletten Bild besteht.
Über dem Map-Bild kommen die Objekt-Layer (kurz: Layer). In diesen Layern kann es 3 Objekt-Typen geben.

Der erste Objekt-Typ hat keine Lauf-Animation (entspricht den Kacheln des Upper Layer oder Pictures), kann aber bewegt und verändert werden.
Der zweite Objekt-Typ hat eine Lauf-Animation (entspricht NPCs oder Animationen).
Der dritter Objekt-Typ ist wie der zweite Objekt-Typ, hat zusätzlich aber Mana, Leben, Items, Spells etc. (entspricht einem Charakter des Spielers oder Monstern).

Je höher ein Objekt in einem Layer liegt desto später wird es gezeichnet. Wenn sich mehrere Objekte in einem Layer überschneiden wird das zuletzt hinzugefügte über den davor Hinzugefügten gezeichnet.

z.B. (was oben steht, wird zuletzt gezeichnet) Ein Baum, wo der Held hinter dem Baum steht auf einer Map würde so aussehen:

3. Layer: Objekt Baumstamm, Objekt Baumkrone
2. Layer: Objekt Held
1. Layer: Objekt Wurzel des Baums
----------------------
Map-Bild
Parallax-Hintergrund (falls vorhanden)

Die Objekte sind nur Deklaration, daher ich nutze XML-Dateien um sie zu speichern.
Sie können sich nicht alleine bewegen, unsichtbar werden, etc. ohne die Kontrolle/Hilfe eines Event.
Events nur dazu da, um mit ihrem Code die Map und Objekte ihre Objekte zu verändern, oder neue Maps oder Objekte hinzuzufügen.
Der Event-Code (Skript) wird mit Ruby geschrieben und wird während die Engine läuft ausgeführt. Events sind entweder an eine Map gebunden oder CommonEvents.
Der Event-Code wird auch in eine XML-Datei eingepackt.

z.B. mein derzeitiges Event, was gleich beim Start der Engine ausgeführt wird, sie momentan so aus:
<?xml version="1.0" encoding="UTF-8"?>
<event>
<eventName>init</eventName>
<script>
<![CDATA[$maps.loadMap("map0001.xml");
$player = Java::thornengine.model::PlayerObject.new(5, "rmxp003wj5.png", "Player", 32, 48);
$player.setPos(0,0);
$maps.getCurrentMap().addMapObject($player);
]]>
</script>
</event>

oder meine Beispiel-Map:
<?xml version="1.0" encoding="UTF-8"?>
<map>
<mapName>test map</mapName>
<mapSize>800,600</mapSize>
<mapBG>x.png</mapBG>

<obj>
<objName>test</objName>
<objType>fixed</objType>
<objPos>100,100</objPos>
<objLayer>6</objLayer>
<objPic>y.png</objPic>
</obj>

<event>
<eventName>test</eventName>
<script>
<![CDATA[blub = Java::thornengine.text::Message.new();
$message = blub.showMessage(100,200, "Hallo");
puts $message.hashCode();
]]>
</script>
</event>
</map>

Die thornEngine nutzt SAX um XML zu lesen, LWJGL um Bilder über OpenGL zu zeichnen, JRuby um den Event-Code auszuführen und die Java-eigene Sound-API. JPEG, PNG, BMP als Bildformat und WAV, AIFF, MIDI und AU als Soundformat werden momentan unterstützt. Die Leistungsfähigkeit der Engine wird primär durch die Grafikkarte bestimmt. Im Test schaffte die Engine ohne Ruckeln 15000 Bilder darzustellen (200x200 Pixel, 50% Transparenz, zufällig auf dem Bildschirm verteilt).
Ein Bild dazu, mit laufendem Partikelsystem, Messagebox und dem "Inspector":
http://img163.imageshack.us/img163/192/te1.png

PS: Das Projekt existiert seit Ende Juli und umfasst jetzt ca. 4000 Zeilen Code.