Das Invertika Update im Juni

Wieder ist der letzte Sonntag im Monat, was bedeutet das es ein neues Invertika Update gibt. Bei Invertika handelt es sich um ein freies 2D-MMORPG welches für Linux, Windows und Mac OS X zur Verfügung steht. Im Groben kann man sagen das in diesem Update eine Unmenge an Fehlern beseitigt wurde, wofür wir uns bei unseren fleißigen Bugreportern bedanken möchten :) So wurden wieder an vielen Stellen Rechtschreibfehler und andere kleinere Fehler wie Kollisions- und Warpfehler auf den Maps behoben. Auch an den Tilesets sowie NPCs gab es einige Korrekturen, so heilt z.B. Valeria nun nicht mehr unbegrenzt, sondern nur noch alle zwei Stunden kostenlos.

An den Monstern wurden wieder einige Modifikationen vorgenommen, welche für besseres Balancing sorgt. Auch der Bug mit den essbaren Items wurde behoben (einige Items dieser Klasse konnten nicht mehr gegessen werden). Bei den Items wurden daneben auch einige Beschreibungen erweitert bzw. hinzugefügt.

Der Irrwald wurde in diesem Update stark erweitert, seine Errichtung ist aber noch lange nicht abgeschlossen. In Lauria wurde angefangen die Innenräume der Häuser zu gestalten. Auf einigen Maps funktionierte die Hintergrundmusik nicht. Auch dieser Fehler ist in diesem Update behoben. Im Hintergrund wurde an der Theater- sowie der Postbotenimplementation gearbeitet, wobei diese beiden Dinge aller Voraussicht nach die neue Serverversion benötigen, welche im Moment noch nicht vollumfänglich funktioniert. Bei dem Zinssystem in der Bank gibt es nun die Neuerung, das diese nach einer neuen Formel arbeitet.

Der Invertika Editor wurden im Backend umgeschrieben um ihn in Zukunft leichter handhaben zu können. Daneben wurde eine automatische Kollisionssetzung implementiert, welche es erleichtert einige Dinge wie z.B. größere Wälder zu mappen. Im großen und ganzen diente das Update der Fehlerbehebung in allen Bereichen. Einige Neuerungen gibt es natürlich auch wie z.B. das Haus der grausamen Wahrheit des Lebens. Wer neugierig geworden ist kann uns auf der offiziellen Seite unter http://invertika.org besuchen.

Zweihunderste Folge von Dübels Geistesblitz

Seit ein paar Tagen ist sie fertig die zweihunderste Folge von Dübels Geistesblitz. Diese Folge hört auf den Namen Operation Karpatenmolch und ist doch sehr amüsant. Wer mehr darüber erfahren möchte sollte sich einfach mal auf http://duebelsgeistesblitz.blogspot.com/ umschauen. Es lohnt sich :)

Weitere Informationen gibt es unter:
http://duebelsgeistesblitz.blogspot.com/2011/06/dg200-operation-karpatenmolch.html

Probleme mit dem Abfragen der Cursortasten unter .NET

Unter .NET bzw. Windows Forms gibt es für das Abfragen von Tasten die Events KeyDown, KeyUp und KeyPress, welche am Formular hängen bzw. an den Controls. In meinem Fall hängen sie an einem Formular bei welchem die KeyPreview Eigenschaft auf true gesetzt ist.

Mit diesen Events kann man problemlos fast alle Tasten abfangen. Problematisch wird es aber bei den Cursortasten. Hier bekomme ich nur ein KeyUp Event. Nun gibt es eine Möglichkeit diese Tasten trotzdem abzufragen in dem die Funktion ProcessCmdKey überladen wird:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
    bool shift=(keyData&Keys.Shift)!=0;
    bool control=(keyData&Keys.Control)!=0;
    bool alt=(keyData&Keys.Alt)!=0;
    Keys unmodifiedKey=(keyData&Keys.KeyCode);

    if(unmodifiedKey==Keys.Up) DoFoobar(unmodifiedKey);

    return base.ProcessCmdKey(ref msg, keyData);
}

Allerdings funktionierte diese Methode nicht wie gewünscht. Eine andere Methode ist die Überladung der Funktion IsInputKey. Dort wird dann festgelegt das die Cursortasten wie normale Eingabetasten behandelt werden. Allerdings brachte es nichts, diese Funktion im Hauptformular zu überladen, da sie dort nie erreicht wurde. Deshalb wurde sie in dem im Formular befindlichen OpenGL Control überladen:

protected override bool IsInputKey(System.Windows.Forms.Keys keyData)
{
    if((keyData&Keys.KeyCode)==Keys.Up) return true;
    if((keyData&Keys.KeyCode)==Keys.Right) return true;
    if((keyData&Keys.KeyCode)==Keys.Left) return true;
    if((keyData&Keys.KeyCode)==Keys.Down) return true;

    return base.IsInputKey(keyData);
}

Damit kamen die Events für die Cursortasten ganz normal bei den entsprechenden Events des Hauptformulares an.

Weitere Informationen gibt es unter:
http://stackoverflow.com/questions/2434834/processcmdkey-wait-for-keyup
http://familie-ottenhaus.de/simon/blog/2009/12/csharp-eigenes-control-keys-up-down-left-right-onkeydown-onkeypress-vs-processcmdkey/