Blick ins Changelog
Geschrieben von Thiemo
[ Translate this page ]
English abstract: Freshly fixed bugs: Enemies should not walk on slopes. Reworked effect for the confusion spell. Very old fire sound bug finally fixed. Blurry texture bug finally fixed.
Ja, wir verspäten uns. Auf die Demo- oder besser gesagt Previewversion werdet ihr noch einige Tage warten müssen. Aber ich habe ein gutes Gefühl. Die Liste der noch offenen Bugs wird immer kürzer und das Änderungsprotokoll mit den erledigten Punkten immer länger. Darunter sind inzwischen fast alle meine „Lieblings“-Bugs, die mich bisher immer so gestört haben, dass ich euch keine Version mit diesen Fehlern geben wollte.
- In den bisherigen Glow-Versionen wurde nur sehr selten von der Möglichkeit Gebrauch gemacht, schräge Fußböden (Slopes) in den Levels zu verwenden. Das möchte ich gern ändern. Dummerweise stolpert man über immer mehr irritierende Bugs, sobald man etwas intensiver mit Schrägen hantiert. Manchmal fällt unser Held durch den Fußboden, wenn man beim Sprung genau die Kante zwischen zwei schrägen Tiles erwischt. Gegner wandern Schrägen hinauf, bleiben aber dann hängen und können sich nicht mehr bewegen. Nervig. So macht das Bauen von coolen Levels keinen Spaß. Dabei kann die Lösung manchmal ganz einfach sein:
Slope(false);, fertig. Nur die Stelle im Code zu finden, an der diese Zeile bisher fehlte, das war nicht so einfach. - Der Verwirrungszauber soll die Gegner durcheinander bringen, sie sollen nicht mehr wissen wo vorn und hinten ist, auf der Stelle hin und her laufen und Stevie nicht mehr erkennen. Bisher war das so implementiert, dass die Bewegung der Gegner vollständig gestoppt und nur ihre Blickrichtung in einem festen Takt umgekehrt wurde. Das funktionierte, war aber nicht wirklich schön. Es sah beinahe aus, als ob die KI abgestürzte wäre. Die Lösung waren wieder zwei bis drei Zeilen Quelltext an den richtigen Stellen: Die Gegner laufen weiter, auch wenn sie verwirrt sind, sie drehen aber in kurzen Abständen zufällig um (nicht mehr alle im gleichen Rhythmus). Dann noch die Feinderkennung abschalten und das war’s schon. Cooler Nebeneffekt: Bei diesen Änderungen ist praktisch kostenlos auch eine Funktion abgefallen, die den Gegnern mehr Individualität verleiht. Sie verlassen ihre festgelegten Patrouillen-Pfade jetzt manchmal und drehen mitten auf dem Weg vorzeitig um.
- Ein sehr alter Bug hieß: „Feuer ist nach Schnellladen extrem laut“. Holger hatte mehrfach danach gesucht und ich genauso. Ohne Erfolg. Dabei ist die Lösung erschreckend einfach, wenn man sich einmal klar gemacht hat, wie die Feuergeräusche entstehen: Sobald ein Feuer in Hörreichweite kommt, wird sein Sound-Loop gestartet. Das passiert im normalen Spiel mit jedem Feuer einzeln, abhängig davon, wie sich Stevie durch den Level bewegt. Beim Schnellladen kann es dagegen passieren, dass schlagartig viele Feuer in Hörreichweite sind und alle gleichzeitig gestartet werden. Nur durch diese Gleichzeitigkeit entsteht das hörbare Übersteuern der Sounds. Die Lösung: Ein kleiner Zufallswert, der jeden Sound um ein paar Millisekunden verzögert und damit das nachbildet, was normalerweise passieren würde, wenn die Soundquellen eine nach der anderen in Hörreichweite gelangen.
- Über einen der nervigsten Fehler hatte ich schon einmal berichtet. Kurz: Bei OpenGL beziehen sich die Texturkoordinaten auf die Mitte des Pixels, wie man es von Malprogrammen gewohnt ist. Bei Direct3D beziehen sich die Texturkoordinaten auf die linke obere Ecke des Pixels, sind also um ein halbes Pixel verschoben. Im Ergebnis sieht alles verschwommen aus. Noch schlimmer wird das, wenn – wie es bei Glow der Fall ist – zwei Renderdurchgänge gemacht werden (der zweite für Post-Processing-Effekte und die Auflösungs-Unabhängigkeit). Bisher hatte ich nur eine „halbe“ Lösung für den zweiten Schritt, der erste erzeugte immer noch verschmierte Texturen. Meine Lösung:
D3DXMatrixTranslation(). Diese Funktion wird sowieso benutzt, um das Bildschirmwackeln zu realisieren. Ich setze einfach immer ein halbes Pixel Verschiebung ein und spare mir damit Vertex-Shader-Umwege oder gar komplizierte Berechnungen mit jeder einzelnen Textur.

10. November 2009 um 22:51
sehr elegante lösung das mit dem sound, hätte nicht gedacht, dass das noch mal repariert wird… ja, die schrägen sind so eine sache, 100% bugfrei war das wohl eh noch nie. mit denen war ich auch nie ganz zufrieden.
15. November 2009 um 20:28
Immer wieder interessante Blogeinträge, ich glaube ich sollte langsam auch mal anfangen einen für mein Projekt aufzusetzen.
Das mit dem Slope(false); ist zwar irgendwie nicht so intuitiv zu verstehen, aber vielleicht war das auch Absicht, weil man ja manchmal selbst nicht mehr seinen Code versteht.
Das mit dem Feuer ist auch eine lustige Sache, die „schönste“ Lösung wäre es natürlich, beim Schnellspeichern die aktuelle Soundposition zu speichern, aber ob das den Aufwand wert ist?
Naja, wie dem auch sei, ich freu mich auf das Spiel, und hoffe auch die Previewversion spielen zu dürfen :)
20. November 2009 um 18:16
Mein kleines Beispiel mit dem Slope(false) sollte zwei Dinge zeigen: Zum einen basiert die Bewegung unseres Hauptcharakters und aller Gegner auf den selben Routinen. Die Informationen über schräge Fußböden werden an alle übermittelt, Gegner sollen jedoch nicht weiter damit arbeiten. Und viel wichtiger: Meist reicht eine einzige Zeile Code an der richtigen Stelle, um sogar die hartnäckigsten Bugs zu beheben.