Cube-Wars 2010

Kommentare anzeigen Worklog abonnieren
Gehe zu Seite Zurück  1, 2, 3, 4, 5, 6, 7  Weiter

Worklogs Cube-Wars 2010

Schritt für Schritt

Samstag, 24. Oktober 2009 von Kernle 32DLL
Durch das Programmierer Treffen in Frankfurt angestoßen habe ich mich entschieden noch ein paar Sachen zu überarbeiten und zu verbessern bevor ich den Funktionsprotyp freigebe.

Arrow Der erste Schritt in diese Richtung war eine Reihe von korrekturen, die im späteren Stadium schwer auffindbare Fehler hätten verursachen können. So z.b. das animierte ConnectorPunkte (entgegen dessen was ich auf dem Treffen behauptet habe) ganz und garnicht funktionierten.

Arrow Auch habe ich die Priority Datei überarbeitet, so das jetzt nicht nur angegeben werden kann was geladen werden soll, sondern auf bei Bedarf der Rest des Ordner, oder eben nichts weiteres, geladen wird. Standardmäßig wird nach abarbeitung der Priority Datei der Rest des Verzeichnisses geladen.

Arrow Des weiteren habe ich TEngine (und die dazu gehörigen GameData-klassen) Abstrakt gemacht - ebenso die Loader Funktionen der TEngine GameData Klassen (TEngineGameData und TEngineGameDataGraphical). Damit wird erzwungen das

a) die Datenstruktur von TEngine nicht alleine benutzt wird, sondern abgeleitet werden MUSS
b) das GameData Klassen einen korrekt definierten Loader Funktionssatz haben

Arrow Auch habe ich damit begonnen kleinere Unstimmigkeiten in der Engine zu suchen und auszumerzen. Das sind folgende Punkte:

a) Es gibt derzeit noch einen massiven Leistungseinbruch (~200-300fps) wenn die Bewegungs und Angriffsradien einer Einheit angezeigt werden. Ich bin der Ursache auf der Spur.
b) Im DebugModus (egal ob per CMD oder Compile definiert), wird eine bestimmte Instanz am ende des Programmablaufs nicht gelöscht. Das ist ziemlich seltsam - auch hierran arbeite ich.
c) Manchmal gibt es in der Engine starke FPS Schwankungen von bis zu 30fps ins Plus oder Minus, ich habe noch keine Ahnung wodran das liegen kann, befürchte aber das es an der Update Routine der TAnimationController liegt.

Arrow Ebenfalls durch das Treffen angestoßen gibt es jetzt eine Möglichkeit des sog. "StrictDebugMode". Im ganzen Code von Cube-Wars gibt es nur 2 RuntimeErrors. Ich vermeide RTE's wann immer möglich, weil ich die Engine wirklich nur wenn es umbedingt sein muss abschießen will. StrictDebugMode provoziert aber ein anderes verhalten. Sofern ein DebugLog Eintrag mit der WARNING-Flag erstellt wird, dann wird ein RTE mit dem zu erstellenden Text erzeugt.


Ich denke die release des Funktionsprototypen verzögert sich im Worst-Case noch bis auf Ende nächster Woche, ich rechne aber eher mit Mitte nächster Woche. Was mich am meisten momentan wurmt ist dieser ungeheuerliche Leistungseinbruch im Spiel.


Bis zum nächsten Eintrag - Kernle

Loader die 2.

Dienstag, 20. Oktober 2009 von Kernle 32DLL
Nachdem ich mir das Gebilde gestern nochmal durchgeschaut habe, habe ich eine kleine Änderung vorgenommen. Anstatt die Daten in 2 verschiedene Containerdateien aufzuteilen, werden jetzt beide, also Cube- und Felddaten aus einer Containerdatei namens CGD (CubeWarsGameData) gespeist. Die Aufteilung der Dateien bleibt zur Übersichtlichkeit aber.

So schnell kann es manchmal gehen.

...loaded

Dienstag, 20. Oktober 2009 von Kernle 32DLL
Nachdem der Funktionsprototyp nun fertig ist, kümmere ich mich um den ganzen Kram der im Code liegen geblieben ist, zugunsten der Zeit. D.h. ich optimiere hier und da was, lösche da die auskommentierten Zeilen, usw.

Aber auch Funktional tut sich noch was. So habe ich die vergangenen Tage damit verbracht den ganzen Content des Spiels auf einen Loader umzustellen. D.h. der gesammte Spielinhalt wird jetzt über zwei eigene kleine Container-Datei geladen.

.cud - CubeWarsUnitData
und
.cfd - CubeWarsFieldData

Zudem gibt es jetzt die Möglichkeit einen "Priority" Datei zu erstellen (Priority.ini), mit der geregelt werden kann ob, was und in welcher Reihenfolge die Daten im Verzeichnis der Priority-Datei geladen werden sollen. Die priority Datei für die Unit Daten sieht z.b. so aus:

Zitat:
// Loading Basic Unit Data
Bases.cud
Weapons.cud
Elements.cud
Types.cud
Alloys.cud
Powers.cud

// Loading Changes in Element and Alloy Logic
ElementChanges.cud
AlloyChanges.cud


Wie man sieht sind die Dateien die die Element und Alloy Changes enthalten (ich habe die Daten üprigens nur der Übersichtlichkeit aufgeteilt - ich könnte sie auch alle in eine Datei packen) alle nach ganz unten verschoben worden. Das ist nur logisch, denn die Changes benötigen eine vorhandene Legierung oder Element zum "Anhängen". Würde man die Changes zuerst erstellen, würde die Engine die Basisobjekte nicht finden, und die Changes würden nicht erstellt.


Parallel zum Feintuning am Funktionsprototyp arbeite ich an einer Umfassenden Dokumentation zu selbigem. Darin geht es vor allem um die ganzen kleinen Konzepte die ich für Cube-Wars entwickelt habe, aber natürlich auch um das Spiel selber, das Kampfsystem, sowie die bisherige Entwicklungsgeschichte.

Letztere gibt es ab jetzt auch schon als PDF zum Download:
https://www.blitzforum.de/upload/file.php?id=7180

Der Rest der Dokumentation folgt dann mit der Release des Funktionsprototypen selber.

So long,
Kernle

Funktionsprototyp fertig!

Samstag, 17. Oktober 2009 von Kernle 32DLL
Hiermit verkünde ich feierlich das der Funktionsprototyp fertig gestellt ist.

Hiermit ist der 1. echte Meilenstein in der gesamten Entwicklungszeit von Cube-Wars (seit 2004) erreicht.

Hinter mir liegen knapp 6 Monate intensiver Programmierarbeiten. Einige Sachen haben in der Zeit gelitten, so habe ich z.b. meine Gitarre vernachlässigt, und auch die Schule hat etwas gelitten.

Bis zum ende der Ferien werde ich jetzt noch ein wenig Feintuning betreiben. Ich möchte die Erstellroutinen für die Einheiten und Felddaten noch auslagern, und ein Primitives Menü erstellen. Aber das zähle ich wie gesagt zum Punkt Feintuning - Der Funktionsumfang ist zu diesem Punkt prinzipiell erstmal vollständig

Auf dem Frankfurt-Treffen werde ich den Funktionsprototyp vorstellen, und zum Ende der NRW-Ferien (25.10.09) auch hier im Worklog zugänglich machen.

Hiermit endet er, der 35. Eintrag in der Odysee die ich mir selbst geschaffen habe. Fast 5 Jahre ist es her das ich die Idee zu Cube-Wars hatte. Eine lange Zeit. Und mit dem Abschluss des Funktionsprototypen habe ich erstmals das Gefühl das ich es diesmal wirklich schaffen könnte das Spiel jemals fertigzustellen.

Codestand zum Abschluss des Funktionsprototypen:

Zeichen: 352252
Zeilen: 9466
Klassen: 28

So long,
Kernle

Felder 1x1

Mittwoch, 14. Oktober 2009 von Kernle 32DLL
Und nochmal ein kleiner Schritt für die Menschheit...

Endlich sind auch die Felder komplett fertig. Die Map / Arena ist bisher fest einprogrammiert. Wenn ich es schaffe lagere ich das aber noch aus.

Was man auch sieht das ich das HUD nochmal überarbeitet habe. Der Graue Klotz war mir dann doch zu hässlich. Auch der "Glow" wurde nochmal Grunderneuert und leuchtet jetzt im Spiel auch leicht animiert.

user posted image
Anklicken für größere Variante

Die Technisch größte Neuerung drüfte sein das Einheiten jetzt mehrere Waffen, Legierungen und Powers (ehemals "Slots") unterstützen. Die Einheit muss dabei nur mind. eine Waffen haben, die anderen beiden Objekte sind Optional.

Ansonsten bin ich mit meinem Code-Revising fast fertig, d.h. habe nochmal alle Klassen und dergleichen auf Fehler geprüft, genormt, komplettiert, usw.

Es fehlt jetzt tatsächlich nurnoch ein wenig Kleinkram wie etwa Sound, dann ist der Funktionsprototyp aus der Spieltechnischen Sicht fertig. Wenn ich die Zeit finde mache ich noch ein kleines Menü, aber das ist nicht so vordergründig.

Ich hoffe das der nächste Eintrag die Verkündung der Fertigstellung des Funktionsprototyps sein wird. Ob es so kommen wir, man wird sehen.

Bis dann ~ Kernle

Und es wart ein HUD geboren

Donnerstag, 8. Oktober 2009 von Kernle 32DLL
Und wieder hat ein kleines Stück vom Funktionsprototyp seine Vollendung gefunden: Das Provisorische HUD. Auch sind die Einheitengrafiken nahezu fertig, wie man den Bildern vielleicht auch entnimmt. Ein Detail das leider durch die Bilder verloren geht: Jeder Teil der Einheit ist individuell animiert.

user posted image
Anklicken für größere Variante

Was auf dem Bild wohl ebenfalls ins Auge sticht ist der komische Grüne Schein um eine der Einheiten. Nun, das ist mein Provisorische Versuch die Zugehörigkeit der Einheit auch ohne HUD darzustellen. Wie man sieht noch recht erfolglos Wink Aber ich habe ja noch etwas Zeit, und notfalls streiche ich es einfach wieder.

user posted image
Anklicken für größere Variante

Dieses Bild zeigt ziemlich die gleiche Situation, aber in einem anderen Moment. So sieht man z.b. das die rechte Einheit schon ein wenig Schaden genommen hat, und der gerade erteilte Schaden parallel dazu durch eine Zahl über der Einheit hervorgehoben wird.

Das war es eig auch schon für diesen Eintrag, viel mehr habe ich in der kurzen Zeit eig auch nicht geschafft. Ich habe ein paar Translations hinzugefügt die fehlten, und passen dazu den Englischen Translationfile komplett neu geschrieben, sowie den Deutschen ein wenig angepasst ("Ecken & Kanten V2" ist kein sonderlich inovativer Waffenname oder?). Auch habe ich hier und da noch ein paar kleine Fehler behoebn und optimierungen vorgenommen, Peanuts im Grunde genommen.

Theoretisch fehlt jetzt nurnoch ein wenig kleinkram, und ich bin fertig. Dieser "Kleinkram" umfasst Spritegrafiken (um den Einheitenschaden sowie Einheitentod noch besser zu visualisieren), und Sound. Auf Musik werde ich vermutlich verzichten.

So long,
Kernle

'Unit Attacked'

Sonntag, 4. Oktober 2009 von Kernle 32DLL
Und wieder ist Cube-Wars dem Funktionsprototypen ein Stück näher gerückt. Einheiten haben jetzt (sofern im Echtzeit Kampfsystem Modus) eine Aktionsleiste, die dafür sorgt das Einheiten nur Aktionen ausführen können sofern deren Leiste gefüllt ist. Diese Leiste wird neben der CP-Leiste (Corepoints, sowas wie HP = Healthpoints) Visuell bei jeder Einheit dargestellt. Auch können Einheiten endlich besiegt werden.

user posted image
Anklicken für größere Variante

Die obere Leiste ist die Aktionsleiste, die untere die CP-Leiste.

Des weiteren habe ich mehrere kleine Fehler beseitigt, und die Performence allgemein ein kleinwenig verbessert, aber leider nicht wirklich nennenswert (höchstens 1-2 ms pro Frame). Außerdem habe ich jetzt endlich mal den Arm-Test rausgenommen Wink

Jetzt fehlt im Grunde nurnoch die Miteinbeziehung der Felder fürs Kampfsystem, dann ist der Echtzeitbasierende Teil des Kampfsystems schon fertig yay...

Bis zum nächsten Eintrag,
Kernle

Bewegung im Getriebe

Dienstag, 29. September 2009 von Kernle 32DLL
Es geht vorran mit Cube-Wars... Als neustes gibt es zu vermelden das Einheiten jetzt anwählbar sind, und auch für den Moment bewegbar (für den Moment, da es noch kein Einheiten-Timing gibt, d.h. man kann die Einheiten jederzeit bewegen ohne auf eine Aktions/timingleiste der Einheiten zu achten) . Des weiteren können Einheiten untereinander schon Schaden austeilen, auch wenn dieser weder Visuell darstellbar ist, noch es eine Todes-Abfrage gibt. Aber es ist ein großer Schritt in die Richtige Richtung.

Wenn es so weiter geht werde ich bis zum Wochenende das Kampfsystem soweit fertig haben. Dann fehlt noch etwas Kleinkram (den ich vermutlich eh schon in der Woche parallel erledige) sowie ein paar kleinere Hürden wie Sound und GUI die ich mir zum Schluss aufbewahre, und dann ist die Techdemo 003 schon fertig. Danach muss nurnoch an allen Ecken komplettiert, optimiert und ausgebessert werden, dann ist der Funktionsprototyp endlich fertig.

Was so einfach und locker klingt ist natürlich noch eine ganze Menge Arbeit, aber ich denke ich werde mit dem Funktionsprototypen wie geplant bis zu den Herbstferien fertig sein. Mein Ziel ist eine Präsentation auf dem Frankfurt Treffen in der 2. Herbstferienwoche in NRW (sofern es statt findet). Eine release hier im Forum kommt dann so schnell wie möglich nach.

Bis zum nächsten Eintrag...

So long,
Kernle

PS: Aktuelle Zahlen aus meinem Projekt:

Zeichen: 268636
Zeilen: 7621

Dem Funktionsprototyp so nah

Mittwoch, 23. September 2009 von Kernle 32DLL
Und hier kommt er, der 30. Eintrag in der Cube-Wars Worklog

Als erstes, warum gab es so lange keinen Eintrag mehr? Nun, ich habe mich die letzten Wochen sehr intensiv mit Cube-Wars beschäftigt, immerhin halte ich weiterhin daran fest bis zu den Herbstferien hier in NRW (12.10.09) den Funktionsprototypen von Cube-Wars fertig zu haben.

Und was hat sich getan? Viel, sehr viel. Nahezu alles was bisher hier präsentiert wurde habe ich nochmal aufgefrischt und -poliert und mit meinen neusten Erkenntnissen gefüttert.

Nach etlichen Testversionen die ich ausschließlich im Chat vertrieben habe, heißt die nächste Version Techdemo 003, und diese wird erstmals anspielbare Elemente (das heißt konkret: ein Kampfsystem) enthalten. Danach folgt der ersehnte Funktionsprototyp.

Hier ein Bild, einfach aus der aktuellen Version gegriffen:

user posted image
Anklicken für größere Variante

Es ist schwer konkret zu sagen was sich alles getan hat, aber hier so ziemlich die wichtigsten Dinge:

Arrow Benchmarks erstellt (3 an der Zahl)
Arrow Support für OpenGL (Standard) und Direct3D

Arrow "GUI" aufgeräumt und optimiert
Arrow Etliche Fehler korrigiert (die Changeslog zur letzten veröffentlichen Version war endlos :S)
Arrow Den Arm (rechts unten zu sehen) mehrmals verändert (mittlerweile animiert).

Arrow Das Spielfeld neu ausgerichtet (Zentriert) sowie mit Shading und neuem Glow ausgestattet
Arrow Komplette integration eines funktionierenden Commandline Parser
Arrow TImageFile, TImageInstance, TConnector2D und TConnection2D fertiggestellt und optimiert
Arrow Komplette integration des TGraphicalSet
Arrow Erste Rudimentäre Anfänge der Klasse TGameUnit

Für genaueres schaut in die Changeslogs der untrigen Downloadversionen

--------------------------------------------

Alle im Chat veröffentlichen Versionen mit Datum:

Arrow Techdemo 001 (26.08.2009)
Arrow Techdemo 002 (10.09.2009)
Arrow Techdemo 002-2 (12.09.2009)
Arrow Techdemo 002-3 (13.09.2009)
Arrow Techdemo 002-4 (21.09.2009) [non-public preversion: 18.09.2009]

Arrow Sammel Download

--------------------------------------------

Das wars auch schon mit dem 30. Eintrag. Ab jetzt werde ich falls möglich / nötig wieder öfter was schreiben. Zumal auch jetzt erst langsam für die meisten das eigentlich interessante ins Rampenlicht tritt: Das Kampfsystem.

So long,
Kernle

PS: Habe ich bereits erwähnt das ich den Arm toll finde, auch wenn er so rein garnichts mit dem Spiel zu tun hat? Very Happy

Es geht vorran

Donnerstag, 20. August 2009 von Kernle 32DLL
Und wieder bin ich gut vorran gekommen, auch wenn ich mich zum Ende etwas aufgehalten habe. Also, was ist alles passiert seit dem letzten Eintrag?

Arrow OBS wurde überarbeitet, und funktioniert jetzt schneller
Arrow TEngine hat jetzt eine funktionierende "RemoveAll" Funktion die alle TEngine Instanzen löscht.
Arrow TEngine besitzt jetzt Counter für die Anzahl der aktuellen Instancen und OBS Hookings.
Arrow Neue Klassen: TImageFile und TConnector2D , TImageInstance und TConnection2D

Was es mit den neuen Klassen auf sich hat leite ich am besten mit einem Bild ein.

user posted image
Die Grafiken sind nur Test Grafiken und haben nichts mit dem Spiel zu tun!

ImageFiles stehen für geladene Images. Diese kann man aber noch nicht so zeichnen, man muss erst noch eine sog. ImageInstance davon erstellen. Der Sinn dahinter erschließt sich mit der Einführung von Connector2D und Connection2D. Ein Connector ist eine Stelle auf einem Bild, an die andere Bilder "angedockt" werden können, so wie man es auf dem obrigen Bild erahnen kann. Connections sind die Zwischenklassen die ImageInstances an andere koppelt. Connections sind u.a. auch für Lokale Positionierung und Rotation der angedockten (connecteten) ImageInstances zuständig.

Kurz: Erstellt man eine ImageInstance, kann man ihr über die Connectors die sich im dazugehörigen ImageFile befinden weitere ImageInstances andocken. Das alles funktioniert Prima, und auch problemlos mit Image Handles (was man gut beim 1. Beispiel sieht, die Waffe ist an dem Grauen Kreis gehandelt).

Das alles funktioniert schon Prima, es fehlt nurnoch eine >sinnvolle< Art und Weise im nachhinein wieder auf einzelne Connections von einer ImageInstance zuzugreifen, aber daran arbeite ich noch.

An der Bezeichnung von Connectors und Connections (jeweils ein "2D" am Ende) ahnt der ein oder andere es sicher schon: Ja, das ganze obrige Konzept werde ich bei Zeiten auch in 3D Umsetzen. Allein weil das schon die Basis für das Stacking der Einheiten wird. Die 2D Variante ist im Prinzip nur zum lernen da, und vielleicht auch für den Funktions-Prototyp, der komplett in 2D gehalten sein wird.

So long,
Kernle

Edit:
Achja, mein USB-Stick stand Pate für den obrigen Geschütz Turm Wink

Gehe zu Seite Zurück  1, 2, 3, 4, 5, 6, 7  Weiter