FischerPi Teil 4: RaspiFastCamD

TL;DR: Wer einfach nur RaspiFastCamD haben will: Hier gibt es die (mglw. veraltete Binärversion).

Wow, der letzte Teil ist schon wieder lange her. Aber ich war nicht untätig, für die weitere Arbeit an meinem Roboter musste erst ein Software-Problem behoben werden:

Ich habe mir ja die Rasperry Camera gekauft, und diese sollte für die Navigation benutzt werden. Dazu muss natürlich irgendwie das Kamera-Bild ausgewertet werden. Nach ein wenig Suchen habe ich dann OpenCV gefunden, eine Bibliothek, die genau dafür gemacht wurde (CV steht für „Computer Vision“). Nur wie das Bild der Kamera in OpenCV bekommen? Bei USB-Kameras, die V4L (Video for Linux) unterstützen, ist das recht einfach, dort kann OpenCV die Bilder einfach abholen.

Weiterlesen

Mein Timetracker

An der Uni habe ich ja nun einen Hiwi-Job, und da sollte man natürlich die Stunden aufschreiben, die mal so arbeitet. Seit ich vor zwei Monaten dort angefangen habe, hatte ich vor, mir dafür ein „kleines“ PHP-Script zu schreiben, damit sich von jedem Rechner aus meine Stunden aufschreiben kann. Nun ist das ganze fertig, und ich finde, es ist gar nicht so schlecht geworden:

Das meiste sind natürlich fertige Sachen, im Hintergrund ist jede Menge jQuery, die Tabelle ist ein jQuery Plugin, Der Datumswähler und der Button unten stammt aus jQuery UI. Das ganze läuft über PHP und MySQL, und ist schön „ajaxifisiert“, sprich kein Neuladen der Seite 😉

Weiterlesen

DynamicLua

So, ich denke es ist Zeit, die Katze aus dem Sack zu lassen, und mein neues Projekt vorzustellen: DynamicLua

Kurz ein paar Worte zum Hintergrund: Mit .NET 4.0 wurde die sog. Dynamic Language Runtime (DLR) eingeführt. Die dient zum einen dazu, es Entwicklern einfacher zu machen, neue Sprache auf .NET Basis zu entwickeln (wie IronPython/IronRuby), hat aber auch ein paar tolle andere Features zu bieten. Eines davon ist das neue Schlüsselwort „dynamic“. Es funktioniert ähnlich wie „var“ kann also jeden Typ annehmen. Wenn man darin aber ein Objekt speichert, das von System.Dynamic.DynamicObject abgeleitet ist, kann man bestimmen was passiert, wenn etwas „nicht erlaubtes“ passiert, also wenn z.B. eine Methode aufgerufen wird, die es gar nicht gibt. Solche Aufrufe landen dann bei der Methode TryInvokeMember, und die kann dann entscheiden, was passieren soll.

Dieses Konzept habe ich jetzt genutzt, um einen Wrapper für das LuaInterface zu schreiben. Das Lua Interface ist eine Library für .NET, die es erlaubt, Lua in C# zu benutzen. Dabei kümmert sie sich auch darum, .NET Objekte in Lua abzubilden und vieles mehr. Diese Library ist wirklich unglaublich, man denkt wirklich, Lua hätte was mit Objekten am Hut.

Weiterlesen

WP Month Calendar

Mal wieder ein neues Plugin von mir: WP Month Calendar. Macht was der Name sagt: Es ist eine modifizierte Version des Kalender Widgets, das WordPress schon an Bord hat. Die Version von WordPress stellt immer einen Monat dar, meine ein ganzes Jahr, immer mit einem Link pro Monat. Im Tooltip sieht man dann die Beiträge aus diesem Monat.

Das ganze wurde aus Eigenbedarf geschrieben, ich wollte das Widget einsetzen, aber ich schreiben zu wenige Artikel um es zu füllen 😉

Weiterlesen

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

Mein erstes WordPress Plugin

Es ist geschafft: Mein erstes WordPress Plugin ist fertig!

In der letzten Zeit habe ich an einem Plugin gearbeitet, das es ermöglicht, Bugs, Chagelogs und Roadmaps aus Mantis direkt in WordPress einzubinden. So kann man auf Projektseiten immer über den aktuellen Status informieren. (Jetzt ratet mal, was ich vor habe ;))

So ein Plugin gibt es ansich schon, aber es wurde wohl von Autor aufgegeben und hatte auch nicht alle Funktionen, die ich mir gewünscht hatte. Also habe ich selber Hand angelegt und das ganze verbessert. Die Früchte meiner Arbeit kann man jetzt im offiziellen Repository betrachten: http://wordpress.org/extend/plugins/wp-mantis/

Wer noch Fehler findet darf sie gerne im Bugtracker melden. (oder hier in den Kommentaren)

„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

SimpleScreenshot 0.9.3.2

Leider war auch die letzte Version von SimpleScreenshot nicht Bugfrei, und der verbliebene Bug war auch noch sehr gemein: Wenn SimpleScreenshot gestartet wurde, wurde manchmal das Fenster nicht ausgeblendet. Der Fehler beruhte auf einem Wettlauf: Wenn das Form geladen wird, wird zuerst die Sichtbarkeit von Windows auf true gesetzt (das Fenster ist also sichbar) und gleichzeitig dem Fenster mitgeteilt, das es geladen wurde. Wenn es so benachrichtigt wurde, wurde es wieder ausgeblendet. Wenn man Pech hatte, hat das Auslebenden das Sichtbarmachen überholt, und das Fenster blieb sichtbar… Das Problem ist jetzt aber behoben, zusammen mit einem Fehler, der manchmal den Sound nicht abgespielt hat. (Hintergrund: Wenn in einer aufrufenden Verknüpfung als Arbeitsverzeichnis nichts eingetragen wurde, konnte das Programm die Sounddatei nicht finden…). Zudem wurde eine fehlende Übersetzung hinzugefügt: Auch Nicht-Deutsche kommen jetzt in den Genuss einer Englische Fehlermeldung, wenn SimpleScreenshot mehr als ein Mal gestartet wird (was nicht geht).

Wie auch schon bei Version 0.9.3.1 habe ich auf der Downloadseite keinen neuen Eintrag erstellt, sondern einfach die Zipdatei ausgetauscht. Wer SimpleScreenshot schon hat, muss einfach nur auf das AutoUpdate warten, das bei nächsten Start aufgerufen wird.

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