Liebes Tagebuch...
...heute habe ich die drei Dateiformate *.thm, *.tsd und *.odf neu definiert. Während ein *thm (Theme) die komplette Grafik für ein Level definiert, beschreibt das *tsd ein einzelnes Tileset und das *.odf Objekte innerhalb des Levels. Mir ist aufgefallen das die Berechnung der Objekte eines Levels (Player, Gegner, Effekte usw.) nur 10 Millisekunden länger dauert wenn man das gesamte Level berechnet als nur den sichtbaren Bereich. Da es einfacher ist alle Objekte zu berechnen habe ich auf die 10 Msecs gesch***en. Dieses Ergebnis bekam ich mit einer unwahrscheinlichen Map-Größe von 500x500 Tiles, das entspricht bei 1024x768 etwa 31x42 Bildschirmen.
Einen Schönheitsfehler des Editors konnte ich heute leider nicht beheben: Zeichnet man die Map im Vollbild und stößt an die Grenze der Map kann man nicht weiter scrollen ... so wie es sein soll. Verkleinert man das Fenster und scrollt bis ans Ende, vergrößert dann das Fenster wird ein Bereich angezeigt in dem man nicht editieren kann, man muss zurück scrollen. Das ist zwar kein wirklich schwerer Bug weil man tatsächlich nur den Map-Bereich bearbeiten kann der zuvor per "Neues Level" oder "Level laden" eingerichtet worden ist, sieht aber suboptimal aus. Ich denke dass ich das erstmal nach hinten schiebe und mich um wichtige Sachen kümmere.
Da die Dateiformate (außer dem *.tmm Format für die Maps) aus Textdateien bestehen habe ich begonnen diese Formate zu dokumentieren. Primär um mich auch morgen noch daran zu erinnern was ich da gemacht habe, sekundär um Leveldesignern und Grafikern zu helfen eigene Themes und Objekte zu entwerfen. Eine Pipeline zu programmieren welche diese Dateien wie WYSIWYG erzeugt ist einfach zu aufwändig und kostet nochmal Zeit. Ich denke dass so einfache Textdateien jeder mit einem IQ über Zimmertemperatur selbst erstellen kann.
Das neue *.odf Format ist zwar ein wenig komplexer als ein einfaches *.thm oder *.tds, aber auch das ist zu verstehen. Hier ein Beispiel wie man dem Player eine "idle" Animation verpasst:
Code: Alles auswählen
/*
Player - Definition
*/
image = player01.png // Image welches die Bilder enthält
default_cell_width = 64
default_cell_height = 64
ANIMATION IDLE 1
{
start_frame = 0
end_frame = 7
anim_delay = 20
}
Die Werte "default_cell_width" und "default_cell_height" beschreiben globale Werte für die Größe der einzelnen Animations-Frames. Dieser Wert kann innerhalb einer Definition jederzeit für ein einzelnes Objektdetail überschrieben werden.
Beispiel: Ist die IDLE Animation des Players nur 48x64 Pixel groß, kann die "WALK_TOPLEFT" Animation gerne 64x64 Pixel groß sein.
Das Image-Format darf BMP, JPEG oder PNG sein, da die Engine Objekte in %gamedir%/gfx/objects/ erwartet darf kein Pfad angegeben werden.
"ANIMATION" sagt dem Parser dass hier eine Animation definiert wird, IDLE zeigt an dass eine "Langeweile-Anim" erzeugt werden soll ... die 1 sagt dass es mehr als eine idle Anim gibt und dass diese hier die Nummer 1 trägt. Im Game wählt die Engine per Zufall eine idle Anim aus wenn es mehr als eine gibt.
Die geschweiften Klammern zeigen dem Parser wo die Definition beginnt und wo sie endet. "start_frame" definiert das Bild im Image an dem die idle Animation beginnt (die Zählung beginnt bei 0) und "end_frame" sagt wo die Animation endet. "anim_delay" gibt an wieviele Millisekunden gewartet werden soll bis das nächste Bild angezeigt werden soll.
Es gibt noch mehr Werte für das Animations-Objekt, aber ich wollte hier nur mal die Einfacheit darlegen.
Zwar habe ich die "Modability" von Timemill gegen Null gefahren ... aber das sind alles Sachen die leicht zu interpretieren sind und einer späteren Erweiterung der "Modability" zuträglich sind.
Alles was sich oberhalb der Ebene "Hintergrund" bewegt darf eine von drei Blend-Modes annehmen: ALPHA, LIGHT oder SHADOW ... ALPHA bedeutet dass der Alpha-Channel des Bildformats verwendet wird (nur bei PNG interessant), LIGHT heisst dass das Bild additiv auf die darunter liegenden Bildelemente gezeichnet wird, SHADE bedeutet eine Verdunkelung des Hintergrundes. Per Default ist ALPHA eingestellt, für jedes Tile und jedes Objekt darf die Blendmode in den entsprechenden Definitionsfiles angegeben werden.
Im Editor und im Game wird "per Pixel" gescrollt ... derzeit gibt es noch Probleme mit der Berechnung der tatsächlich anzeigbaren Levelgröße. Das erzeugt zwar keine Fehler, sieht aber kacke aus .. ich hoffe das morgen lösen zu können wenn all die anderen Väter auf Fahrrädern am saufen sind.