Das Spiel aller Spiele: DARK SOULS

Ich weiß überhaupt nicht wo ich anfangen soll. Von DARK SOULS habe ich über die Jahre hinweg eine ganze Menge gehört. Immer mal wieder tauchte der Name auf YouTube, Blogs oder Top-Ten-Listen auf. So richtig damit beschäftigt habe ich mit damit allerdings nie. Ich habe dann im Sommer aus purer Langeweile angefangen, das „Knallhart Durchgenommen: Dark Souls“ von GameOne zu gucken. Am Anfang habe ich überhaupt nicht verstanden, wieso Etienne Gardé und Dennis Richtarski so einen Wind um das Spiel gemacht haben. Auch nach den ersten 2-3 Folgen habe ich es immer noch nicht begriffen. Die Beiden sind verhältnismäßig oft gestorben, mussten ganze Level-Areale von vorne beginnen oder haben nach einer Stunde Spielzeit unterm Strich überhaupt keinen Fortschritt gemacht.

Die Frage die sich mir gestellt hat: Warum sollte man ein Spiel spielen, was einen als Spieler so fertig macht? Es gibt kein Netz, keinen doppelten Boden, keine echten Checkpoints. Wenn du stirbst, fängst du von vorne an. Es gibt keine Map, keinen definierten Weg. Das Spiel gibt einem rein gar nichts. Ich habe es nicht verstanden.

dark_souls_1

Aber irgendetwas muss dieses Spiel doch haben? Wenn Gaming-Veteranen das Spiel feiern und es das „Beste Spiel aller Zeiten“ nennen, dann muss doch etwas dran sein, oder nicht?
Um mich selbst davon zu überzeugen, habe ich mir DARK SOULS, was bereits im Jahr 2011 für die Xbox 360 erschienen ist, letztlich doch einfach mal besorgt. Irgendwann vor zwei Wochen war Michael bei mir um die letzte Episode von „The Walking Dead: Season 1“ zu Ende zu zocken. Als wir damit durch waren, haben wir dann aus Spaß DARK SOULS in die Xbox gelegt da er, genau wie ich, auch nicht so ganz begriffen hat, was der ganze Hype um dieses Spiel soll.

asylum_daemon

Wir legen das Spiel also in die Konsole. Es gibt kein Tutorial, keine Anleitung, keine wirkliche Passage zum einspielen. Es gibt lediglich ein oder zwei unbewaffnete Untote, an denen man kurz testen kann, ob die Batterien im Controller noch funktionieren. Die ersten Gegner sind relativ leicht. Man kommt hier mit „Button mashing“ noch durch und es stellt sich das Gefühl ein, als wäre DARK SOULS ein ganz normales Hack’n’Slay Rollenspiel. Doch weit gefehlt: Noch bevor man überhaupt den ersten echten Abschnitt des Spiels erreicht, wird man mit einem Boss konfrontiert. Der so genannte „Asylum Demon“ haut einen mit zwei Schlägen kaputt und es passiert das unausweichliche: Man stirbt. Schnell erkennt man aber, dass dies im Grunde zum Intro des Spiels gehört. Mit einem Lachen und einem leichten „I see what you did there“-Gefühl startet man wieder am Anfang des Spiels. Im nächsten Aufeinandertreffen mit dem „Asylum Demon“ ist man also schlauer und rennt an ihm vorbei in Sicherheit. Nach ein paar Minuten der Stille findet man sogar noch ein Schild, welches man nun neben dem Schwert tragen kann.

Nachdem man durch ein, zwei Gänge gelatscht ist und die doch ganz ansehnliche Grafik bestaunt hat, trifft man dann auf den ersten Gegner. „Na dann wollen wir mal!“, klingt es im Kopf, ohne überhaupt die Steuerung des Spiels begriffen zu haben. Ich weiß es noch, als wäre es gestern gewesen: Auf den Gegner zu rennend versuche ich, ihn mit ein paar Schlägen in guter alter Diablo-Manier zu killen. Doch weit gefehlt: Noch während ich schlage, holt der Gegner, wohlgemerkt der erste „richtige“ Gegner im Spiel, aus und zieht mir die Hälfte der Lebenspunkte ab. Beim Versuch auszuweichen vergesse ich, das Schild hochzunehmen und kassiere auf der Fluch den nächsten Schlag. Noch bevor ich mich versehe bin ich tot. Alles was bleibt ist der große, rote Schriftzug „YOU DIED“.

Nach einem kurzen Ladebildschirm startet man wieder am Anfang des Spiels. Richtig gelesen: Am Anfang. Nicht etwa an seiner Leiche, oder an einem Checkpoint kurz vor dem Gegner. Nein, am Anfang. Und das Beste: Man hat nichts. Man hat keine Seelen (die Währung für Waffen und Skillpoints im Spiel) und keine Erfahrung. Jedes normale Spiel würde einem nach dem Tod zumindest die Erfahrungspunkte lassen. Nicht mit DARK SOULS. Wer hier stirbt, hat es nicht verdient im Spiel weiter zu kommen. Und so fühlt es sich auch an. Nach ein, zwei Versuchen sind Michael und ich dann am ersten Bonfire (quasi der „Homebase“) angekommen, dem „Firelink Shrine“. Dort kann man sich seine „Ethos Flasks“, mit denen man sich heilen kann, wieder aufladen und dafür sorgen, dass man nach dem nächsten unausweichlichen Tod an eben diesem Bonfire wieder starten darf.

Aus dem „Knallhart Durchgenommen“ von GameOne kannte ich noch in etwa den Weg vom „Firelink Shrine“ zum nächsten Gebiet. Doch nachdem wir auf diesem Weg ca. 10 Mal in Folge gestorben sind, kam langsam der Frust durch. Wenig begeistert haben wir dann beschlossen, das Spiel aus zu machen, da uns einfach der Spaß an dem Ganze gefehlt hat. Wo bleibt der Spaß, wenn man spielt, und spielt, und spielt nur um letztlich dann doch wieder zu sterben und den selben Abschnitt wieder und wieder zu spielen? Ehrlich gesagt war ich durch mit dem Spiel. Für mich war das Experiment DARK SOULS abgehakt und auch Michael sah das ähnlich. Wir haben es an dem Abend nicht wieder an gemacht.

you_died

Am nächsten Morgen bin ich dann mit einem Gefühl aufgewacht, was mir seit langem kein Spiel mehr beschert hat: Ehrgeiz. Ich wollte dieses beknackte Spiel schlagen. Es konnte doch nicht sein, dass ich mich diesem Schrottspiel geschlagen gebe. Und wenn ich „Schrottspiel“ schreibe, dann weil ich das Spiel an diesem Morgen noch immer gehasst habe. Ich habe also den Controller genommen und angefangen zu spielen. Natürlich bin ich wieder am laufenden Band gestorben und habe keinerlei Fortschritt gemacht. Aber nach und nach habe ich gemerkt, wie ich besser wurde. Schläge parieren, Gegnern durch Rollen ausweichen oder auch das „Backstabbing“ schien ich langsam raus zu haben. Irgendwann bin ich dann auf den nächsten Boss, den „Taurus Demon„, gestoßen. Es war ein Kampf, wie ich ihn in einem Spiel lange nicht erlebt habe. Ach was: Wie ich ihn in einem Spiel noch nie erlebt habe! Ich kann mich nicht erinnern, wann ein Spiel bei mir zuletzt derartig Adrenalin freigesetzt hat. Nach bestimmt drei Versuchen habe ich das Vieh dann endlich geschafft und wurde durch eine Flut von Glücksgefühlen durchströmt. Ein Gefühl, was ich in Videospielen seit langer, langer Zeit nicht mehr gehabt habe. Und da war er dann: Der Zeitpunkt, an dem ich DARK SOULS verstanden habe.

DARK SOULS ist ein Arschloch. DARK SOULS ist kein Spiel, was man in wenigen Stunden am Wochenende durch spielt. Es ist auch kein Spiel, wo es darum geht, Erfolge frei zu schalten oder Quests abzuschließen. Es geht um den puren Kampf. Du alleine gegen den Rest der Welt. Kein Netz, kein doppelter Boden. Wenn du stirbst, fängst du neu an. Du speicherst in DARK SOULS nicht einfach ab, um am nächsten Morgen weiter zu machen. Es gibt nicht einmal die Möglichkeit, das Spiel zu pausieren. Entweder du spielst und kämpfst, oder du lässt das Spiel aus.

Aus gelassen habe ich das Spiel schon lange nicht mehr. Ich habe jetzt ca. 7 Stunden Spielzeit und bin noch immer nicht über den zweiten Abschnitt hinaus. Ich sterbe pro „Session“ mindestens 10 mal, verliere meine gesamten Seelen (und damit den gesamten Spielfortschritt) und starte am nächsten Morgen oftmals von der exakt gleichen Stelle wie am Vortag. Warum ich das mache? Um die nächste Welle der Glücksgefühle zu erreichen. Den nächsten Boss zu killen oder das nächste Bonfire zu erreichen löst solch krasse Emotionen aus, dass ich jedes Mal fast schon schockiert darüber bin, wie sehr ich mich doch innerlich über einen virtuellen Erfolg freuen kann. Doch genau das macht DARK SOULS meiner Meinung nach aus: Das Spielerlebnis selbst beschert einem echte Emotionen. Keine Erfolge, die auf dem Bildschirm auftauchen und dann in der Statistik gut aussehen. Echte Emotionen. Wut, Hass, Erleichterung, Freude. Und das alles in einer Kombination, die absolut süchtig macht.

Dieser Text mag übertrieben klingen und wer diesen Blog hier schon länger liest weiß, dass ich dazu neige, zu übertreiben. Doch der Hype gibt dem ganzen Recht. Wer DARK SOULS nicht zumindest mal ausprobiert hat, verpasst eines der geilsten Spiele aller Zeiten. Nicht wegen der guten Grafik, der tollen Story oder den einfachen Achievements, sondern wegen den puren Emotionen.

Prepare to die.

Notifications von Icinga oder Nagios per WhatsApp verschicken

Ich habe in einem anderen Post bereits erklärt, wie man WhatsApp-Nachrichten per Kommandozeile verschicken kann. Wenn die Voraussetzungen erfüllt sind, sind der Fantasie quasi keine Grenzen mehr gesetzt. Was ich als erstes mit den neuen Möglichkeiten gemacht habe ist, sämtliche Host- und Service-Notification meines Icinga-Servers von SMS auf WhatsApp umzustellen.

Das Ganze lässt sich ziemlich leicht umsetzen, wenn man erst einmal die Einrichtung von Yowsup, dem Python-Skript zum Verschicken von Nachrichten, abgeschlossen hat.

Ich erkläre hier kurz, wie man sich also in Zukunft seine Host- und Service-Notifications per WhatsApp zuschicken lassen kann.
In diesem Beispiel gehe ich davon aus, das sämtliche Yowsup-Komponenten Nagios/Icinga Plugin-Verzeichnis liegen. In diesem Fall ist es das Verzeichnis „/usr/lib/nagios/plugins/“ und wurde in der Nagios/Icinga-Konfiguration auf die „$USER1“ Variable gesetzt.

Contact-Definition erweitern

Bereits bestehende Contact-Definitionen, über die bisher Notifications an Nutzer des Nagios/Icinga ausgelöst werden, müssen um ein weiteres Attribut erweitert werden: Die Handynummer. Anfangs habe ich in meinem Fall das bereits vorhanden Attribut „pager“ genutzt, um die Handynummer für WhatsApp dem Kontakt/Nutzer zuzuweisen. Sauberer ist es allerdings, wenn dazu eine benutzerdefinierte Variable benutzt wird. Diese so genannten „Custom-Variables“ zeichnen sich durch den am Anfang stehenden Unterstrich (_) aus und können in beliebiger Anzahl angelegt werden.

Eine Contact-Definiton (/etc/icinga/objects/contacts.cfg) könnte wie folgt aussehen:

define contact{
        contact_name                    timo
	use				generic-contact
        alias                           Timo Schlueter
        email                           me@timo.in
	_whatsapp			4915777818466
	}

Um diese Benutzerdefinierte Variable (_whatsapp) nun in anderen Objekt-Definitionen von Nagios/Icinga zu nutzen, muss fortan die Variable $_CONTACTSWHATSAPP$ verwendet werden.

Command-Definition anlegen

Nach der Anpassung der Contact-Definition muss eine neue Command-Definition angelegt werden, über die der Versand der Nachrichten ausgelöst wird. An sich unterscheidet sich diese Definition kaum von der bereits im Umfang von Nagios/Icinga enthaltenen E-Mail-Notification.

Eine Command-Definition (/etc/icinga/objects/commands.cfg) könnte wie folgt aussehen:

define command {
        command_name    notify-host-by-whatsapp
        command_line    /usr/bin/python $USER1$/yowsup/yowsup-cli -c $USER1$/yowsup/config -s $_CONTACTWHATSAPP$ '$NOTIFICATIONTYPE$ Host : $HOSTNAME$ is $HOSTSTATE$ @ $LONGDATETIME$'
}
 
define command {
        command_name    notify-service-by-whatsapp
        command_line    /usr/bin/python $USER1$/yowsup/yowsup-cli -c $USER1$/yowsup/config -s $_CONTACTWHATSAPP$ '$NOTIFICATIONTYPE$ Host : $HOSTNAME$ - Service : $SERVICEDESC$ is $SERVICESTATE$ @ $LONGDATETIME$'
}

Host- und Service-Commands können selbstverständlich auch zusammengefasst werden. Da in diesem Beispiel allerdings unterschiedliche Ausgaben erfolgen sollen, bietet sich die Trennung zwischen „notify-host-by-whatsapp“ und „notify-service-by-whatsapp“ an.

Command-Definition zuordnen

Sind Contact-Definition erweitert und die Command-Definition angelegt, muss anschließend noch die Command-Definition einem Contact zugeordnet werden. In meinem Fall nutze ich Templates für die Zuordnung von Optionen zu Kontakten. Die Zuordnung kann allerdings auch direkt am einzelnen Kontakt erfolgen. Zur Vereinfachung hier die Contact-Definition von oben, welche um die Command-Definiton erweitert wurde:

        contact_name                    timo
	use				generic-contact
        alias                           Timo Schlueter
        email                           me@timo.in
	_whatsapp			4915777818466
	service_notification_commands   notify-service-by-email notify-service-by-whatsapp
	host_notification_commands      notify-host-by-email notify-host-by-whatsapp

Durch diese Definition wird dem Benutzer „timo“ ab sofort im Falle einer Status-Änderung eines Hosts oder Services nicht nur eine Mail, sondern auch eine Nachricht per WhatsApp zugeschickt.

Noch einige Hinweise:

  • Es sollten immer zwei Wege des Versands von Notifications geben. Gerade WhatsApp hat in letzter Zeit häufiger mit Serverproblemen zu kämpfen, weshalb es sich anbietet, neben WhatsApp auch noch eine Mail oder SMS zu versenden.
  • Aus Sicht des Datenschutzes ist der Versand von Nachrichten über WhatsApp gesondert zu betrachten. WhatsApp wird im Ausland betrieben und hält sich daher mit hoher Wahrscheinlichkeit nicht an die Datenschutzrichtlinien Deutschlands. Ich würde daher nicht empfehlen, sensible Daten (Server-IPs, Hostnamen etc.) über WhatsApp zu verschicken. Ich verwende Nagios/Icinga hauptsächlich zur Überwachung von Web-Anwendungen und Websites und einigen Web-Servern. In diesem Fall versende ich also ohnehin nur öffentlich zugängliche Informationen. Dies sollte im Vorfeld auf jeden Fall abgewogen werden.

Fragen oder Feedback zu der Anleitung bitte jederzeit gerne als Kommentar, Tweet oder Mail hinterlassen.

WhatsApp-Nachrichten über Kommandozeile verschicken

Es gibt mittlerweile eine ziemlich einfache Möglichkeit, per Kommandozeile Nachrichten per WhatsApp zu verschicken. Möglich ist das Ganze über die ein kleines Python-Tool namens „Yowsup„. Mit diesem Tool ist es möglich, die WhatsApp-Registrierung durchzuführen und anschließend Nachrichten zu versenden und zu empfangen. Da ich dem Empfang noch nicht getestet habe, beschreibe ich hier erst einmal, wie der Versand von Nachrichten funktioniert.

Voraussetzungen

  • eine gültige Handynummer
  • Python
    • python-dateutil
    • argparse for python < 2.7
    • libxml2
  • Yowsup

Yowsup downloaden und entpacken

Zuerst einfach das git Repository von Yowsup auf den lokalen Rechner/Server klonen. Das erledigt man über folgenden Befehl:

git clone https://github.com/tgalal/yowsup

Anschließend in den Unterordner „src“ von „yoswum“ wechseln, da dort die Kommandozeilen-Tools (yowsup-cli) liegen, die nun benötigt werden:

cd yowsup/src/

Registrierung

Bevor man Nachrichten versenden kann, muss die eigene Handynummer bei WhatsApp registriert werden. Als erstes muss die Handynummer, die zum versenden von Nachrichten genutzt werden soll, in der Config-Datei angegeben werde. Ich habe dazu einfach, weil Nerds wie ich ja tendenziell eher faul sind, einfach die Beispiel-Datei (config.example) geöffnet und angepasst:

vi config.example
cc=49 #if not specified it will be autodetected
phone=491751234321
id=
password=

Wichtig sind hier im ersten Schritt nur die Parameter „cc“ und „phone“. Unter „cc“ muss die Landeskennung angegeben werden. Für Deutschland wäre dies die „49“. Unter „phone“ muss die Handynummer angegeben werden, die für WhatsApp registriert werden soll. Das Format lautet in meinem Fall: 491751234321.

Anschließend die Datei speichern und folgenden Befehl ausführen (wir befinden uns immer noch im Ordner yowsup/src/):

python yowsup-cli -c config.example -r sms

Die Antwort könnte wie folgt aussehen:

status: sent
retry_after: 25205
length: 6
method: sms

Auf dem angegeben Handy sollte nun eine SMS mit einem Freischaltcode für WhatsApp angekommen sein. Als Beispiel dient hier mal der Code „123-987“.
Abgeschlossen wird die Registrierung mit dem Befehl:

python yowsup-cli -c config.example -R 123-987

Das Ergebnis sollte wie folgt aussehen:

Detected cc: 49
status: ok
kind: free
pw: 74beaae5d1af0c04c57c37ff0045573603ff34dd=
price: 0,89 €
price_expiration: 1389688778
currency: EUR
cost: 0.89
expiration: 1418553624
login: 491751234321
type: existing

Wichtig ist nun das Attribut „pw“. Dort steht das Passwort, mit dem der Login auf den WhatsApp-Servern durchgeführt wird. Dieses Passwort muss nun in der Config-Datei angegeben werden. Also wieder die Datei öffnen und anpassen:

vi config.example
cc=49 #if not specified it will be autodetected
phone=491751234321
id=
password=74beaae5d1af0c04c57c37ff0045573603ff34dd=

Die Registrierung und Konfiguration ist abgeschlossen. Jetzt kommt der lustige Teil.

Nachricht versenden

Nachdem die Konfiguration abgeschlossen ist, kann nun eine Nachricht versendet werden. Hierzu gibt es zwei Möglichkeiten: Zum einen kann man eine Nachricht stumpf versenden, ohne auf Antworten zu warten („Fire-and-forget“) und zum anderen kann man den interaktiven Modus starten, über welchen man im klassischen Chat-Stil Nachrichten empfangen und versenden kann.

Der Befehl für ein einfaches verschicken lautet:

python yowsup-cli -c config.example -s 4915777818466 'Hallo Welt'

Das Ergebnis dürfte in etwa so aussehen:

Detected cc: 49
Authed 491751234321
Sent message

Es wurde somit eine Nachricht vom Absender 491751234321 (der registrierten Nummer) mit dem Inhalt „Hallo Welt“ an die Nummer 4915777818466 geschickt.

Wenn der interaktive „Chat-Modus“ gestartet werden soll, genügt der Befehl:

python yowsup-cli -c config.example -i 4915777818466

Jetzt wird ein Chat-ähnlicher Dialog gestartet, über den nicht nur Nachrichten abgeschickt, sondern auch empfangen werden können.

Diese Spielerei kann nun für alle möglichen Schweinereien genutzt werden. Der Fantasie sind keine Grenzen gesetzt. Ich selbst spiele gerade mit dem Gedanken, Nagios/Icinga Notifications aus meinem Monitoring-System über WhatsApp zu verschicken.

Fragen oder Feedback zu der Anleitung bitte jederzeit gerne als Kommentar, Tweet oder Mail hinterlassen.