Der tKoD Map Editor

Jetzt sind ja Ferien, und da hat man wenigstens mal Zeit an seinem Hobbyprojekt weiterzuarbeiten 😉 Ich habe die Zeit dazu genutzt dem Editor zu meinem Spiel mal ein paar neue Features zu verpassen:

Es gibt einen Scripteditor der auf ScintillaNet basiert, und den Inhalt auch an einen externen Editor senden kann. Dazu gibt es eine ComboBox für die Hintergrundmusik und ein DataGridView, das an ein Dictionary gebunden ist, wodurch man eigene Schlüssel-Wert-Paare festlegen kann.

Das ganze kann auch in eine Datei geschrieben werden und wird auch korrekt wieder ausgelesen.

Weiterlesen

Hürden für das Upgrade auf XNA 4.0 und wie man sie umgeht

Nachdem am 16. September ja nun endlich XNA 4.0 erschienen ist, habe ich natürlich auch meine Projekt auf die neue Version aktualisiert. Das ganze hat erstaunlich wenig Probleme gemacht, und nur eine Sachen bereit mir ernsthafte Probleme.

Alte XACT Dateien können nicht gelesen werden. Das Problem lässt sich sehr einfach beheben: Mit dem neuen Game Studio kommt auch ein neues XACT (auch Version 3.0, aber vom Februar 2010). Die alte Datei damit öffnen, Hinweis abnicken und wieder speichern, Problem behoben.

DisplayMode.RefreshRate fehlt. Eines der Probleme, die ich nicht wirklich beheben konnte. Um das Ruckeln von Animationen zu beheben hatte ich die FPS Rate an die Wiederhohlrate des Monitors angepasst. Da die entsprechende Eigenschaft jetzt einfach fehlt, kann ich das so einfach nicht mehr machen.

Weiterlesen

„Im Zelt“ Tilesets

Ich bin mal wieder beim „mappen“ (soll heißen, ich erstelle Karten für The Kingdom of Darkness), und mir ist aufgefallen, dass in den Tilesets vom RPG Maker (die ich ja benutze) das innere eines Zeltes fehlt!

Nach ein wenig (bzw. ziemlich viel) war dann auch ein Tileset gefunden, das wunderbar zum Originalstil passt:

Ich habe das hier mal hochgeladen, weil es ziemlich schwer zu finden ist. Was ich leider nicht finden konnte ist, wer dieses geniale Set gezeichnet hat… Ich hoffe, er ist mit der Benutzung einverstanden, ich würde ihn auch gerne in den Credits nennen, aber ich habe wirklich nichts gefunden 🙁 Wenn jemand mehr weiss würde ich mich wirklich über Informationen freuen 😀

Weiterlesen

Gedanken zu Dialogen

Ok, ich gebe zu, der Titel ist blöd. In Englisch klingt er besser: Thoughts on Dialogue Systems. Aber das ist halt ein deutscher (und in letzter Zeit ein wenig vernachlässigter) Blog, also gibst blöde, deutsche Titel 😉

Aber nun zum eigentlichen Thema dieses Post: Wie macht ein gutes Dialogsystem? Fangen wir mit den Anforderungen an:

  • Der Spieler muss verschiedene Optionen haben. Es gibt keinen festen Ablauf.
  • Der Dialog wird zwischen dem Spieler und einem oder mehr NPCs geführt. Technisch gesehen ist der Spieler aber auch ein NPC.
  • Zu bestimmten Zeitpunkten sollen Scripte ausgeführt werden können. Möglichst, wenn eine Dialogzeile zu Ende ist.
  • Es soll durch Scripte möglich sein, zu bestimmen, ob eine Dialogzeile angezeigt wird, bzw. den Verlauf des Dialogs zu bestimmen.
  • Es muss einen Editor geben, in dem man die Dialoge erstellt.
  • Die Dialoge sollen über die Content Pipeline geladen werden können.

Ich habe jetzt angefangen, ein eigenes System zu schreiben. Dieses funktioniert auch relativ gut, und es hatte auch eine Integration der Content Pipeline. Nun bin ich aber auf ein Problem gestoßen: Die Auswahl durch den Spieler.

Weiterlesen

Sounds direkt in XACT abspielen

Dieses Problem hat mich jetzt bestimmt 20min beschäftigt, darum hier die Lösung:

Wenn man die Sounds, die man in XACT bearbeitet auch direkt abspielen will, muss man erst das Audition Tool starten. Das findet man als AudConsole3.exe im XACT Verzeichnis. Das wird gestartet:

Das ganze braucht natürlich auch eine Firewall Ausnahme, und dann kann man in XACT über Audition(Connect to [PC-Name] (local) zu dem Server verbinden, und „schon“ kann man Sounds direkt abspielen…

Weiterlesen

Statusbericht

So, in diesen Artikel kommt so einiges, für das ich keine eigen Beitrag machen will. Also quasi ein Info-Peitsche.

1. Ich hab wieder DSL. Zumindest vorläufig. Ich zitiere Dazu mal eine Mail an jemanden der genau das gleiche wissen wollte (Ja, ich bin zu faul das noch mal zu tippen):

Ich hab momentan DSL!

Leider nicht ganz so wie ich will… envacom(der alten Anbieter) hat am 1.12 die Zugangsdaten gesperrt, darum hatte ich kein DSL mehr. Ein paar Tage später hat er aber bemerkt, dass er die Ports nicht freigeben konnte, warum auch immer… Solange envacom den Port blockiert kann ich auch keinen anderen Anbieter haben. ABER: Damit envacom keine Ärger wegen Betrugs bekommt hat er die Zugansdaten wieder freigegeben, also habe ich erstmal wieder DSL, und zwar gratis. Wenn er jetzt die Ports freigibt kann easybell dann auch den Anschluss schalten…

Mal sehen wie das weitergeht…

Weiterlesen

100 FPS mehr durch Tilemap Clipping

Da ich momentan noch auf Bug-Jagd durch die Tiefen von The Kingdom of Darkness bin, habe ich heute mal zu Abwechslung das Tilemap Clipping eingebaut. Durch diese Technik werden einfach nicht alle Tiles gezeichnet, sondern nur die, die auch grade auf dem Bildschirm zu sehen sind.

Der Performancegewinn hängt von der Größe der Karte ab, bei mir hat es 100 FPS gebracht. Das ist weniger als es erstmal klingt, den ob ein Spiel nun mit  300 oder 400 Frames pro Sekunde läuft kann man nicht merken… Trotzdem hatte ich schon lange vor diese Technik einzubauen. Die Änerung ist eigentlich auch nur sehr klein:

for (int i = (int)Camera.CameraPosition.X / 32; i < Math.Min(((int)Camera.CameraPosition.X / 32) + 26, Tiles.Count); i++)
 {
 // Alle Spalten durchlaufen
 for (int j = (int)Camera.CameraPosition.Y / 32; j < Math.Min(((int)Camera.CameraPosition.Y / 32) + 20, Tiles[0].Count); j++)
 {

Weiterlesen

tKoD Performance um 500% verbessert!

Es kling unglaublich ist aber wahr! Ich habe die Performance von tKoD mit 10 Zeilen Code Änderung um 500% verbessert!

Ich hatte festgestellt, das ich im Menü 2800 FPS (normal für Menüs) hatte, im Spiel aber nur 75 FPS. Das ist zwar immer noch gut, aber für ein 2D Spiel auf einem guten Rechner nicht berauschend…

Also musste ein Profiler ran(Der von EQAUTEC, kann ich nur empfehlen). Das profilen ergab, dass die auffälligste Methode war die Kameraberechnung. Die sah so aus:

public static Vector2 CameraPosition
        {
            get
            {
                return new Vector2(
                    Math.Min(
                        TilemapHelper.ActiveTilemap.Width * 32 - GOA.Game.GraphicsDevice.Viewport.Width,
                        Math.Max(0, GOA.Hero.ExactPosition.X - GOA.Game.GraphicsDevice.Viewport.Width / 2)),
                    Math.Min(
                        TilemapHelper.ActiveTilemap.Height * 32 - GOA.Game.GraphicsDevice.Viewport.Height,
                        Math.Max(0, GOA.Hero.ExactPosition.Y - GOA.Game.GraphicsDevice.Viewport.Height / 2)));
            }
        }

Wo lag der Fehler? Ganz einfach, Camera Position wird bei jedem Tile und NPC abgefragt. Da .NET scheinbar das ganze nicht cached, wird die Position jedes Mal neu berechnet. Und das über 5.000 Mal pro Frame! Was also tun? Einfach den Wert selber cachen! Nur einmal pro Frame berechnen, und dann nur noch zurückgeben. Und schon hat man 500% mehr Performance!

Also: Benutzt einen Profiler, es lohnt sich!

The Kingdom of Darkness 0.2 bald fertig

Der Titel sagt es eig. schon, tkod 0.2.0 ist bald fertig. Wenn ich nicht jetzt noch einen riesen Fehler finde, werde ich es spätestens in einer Woche fertig haben!
Das Hauptprogram ist schon fertig, nur ein paar neben Sachen wie der neue Laumcher muss ich noch testen.
Leider gibt es auch in dieser Version nicht alzu viel Gameplay zu sehen, es wird wieder eher eine Tech-Demo. Das liegt vorallem daran, dass es immer noch kein Eventsystem gibt. Das ist aber auch der erste Punkt auf meiner Liste für die nächste Version!

Extrem blöder Bug in tKoD

Seit Tagen quält mich ein nicht auffindbarer Bug in The Kingdom of Darkness: bei einigen Karten(mit großen Tilesets) werden die Texture Koordinaten falsch berechnet. Als Folge davon ist die Darstellung grauenhaft! (Leider habe ich keinen Screenshot, aber stellt euch einfach vor, man würde die Tiles willkürlich über die Karte verstreuen…) Der Bug war einfach nicht zu finden…aber auch gar nicht in tKoD! Der Bug liegt in der Software mit der ich die Karten erstelle! Dort wird die Größe der Texture falsch berechnet, und in folge dessen, waren alle IDs falsch!

Workaround ist gefunden(man muss die falsche Größe aus der XML Datei zur Berechnung benutzen), Autor des Editors benachrichtigt, Version 0.2.0 rückt näher!