BSD Rogue unter Debian ohne Savefile Check

Ja Rogue ist ein sehr schweres Spiel, das man Monate lang spielen kann ohne nur in die Griffweite des Amulets von Yendor zu kommen. Um einen Character aus einer Filmreihe der 80er zu zitieren “Ich bin zu alt für diesen Scheiß”. Also Quellcode raus und schauen wo die Fehlermeldungen auftauchen, die verhindern wollen das ich in diesem Leben noch einmal das Ende von Rogue sehen kann.

clean_up("sorry, saved game is not in the same file");
&&
clean_up("sorry, file has been touched");

Wie schon hier beschrieben war es einfach dem Programm einen weitern Parameter hinzu zu fügen. Als ich den Buchstaben ‘c’ für Cheat festgelegt hatte hielt ich das für eine gute Idee, mittlerweile bin ich mir nicht so sicher. Alle Änderungen stecken mal wieder in einem Commit.

Alles ist im master gemerged und kann unter Debian übersetzt werden. Viel Spass beim Spielen vom Rogue Clone Version 3 von 1993 …

BSD Rogue unter Debian mit besserem Highscore

Etwas das ich lange Zeit für einen Bug gehalten habe enttuppe sich als Feature. Warum auch immer man das haben wollte, gut ich könnte mir eine Situation konstruieren in der das Spaß macht – die Zeiten haben sich aber geändert. Und so ändere ich das Programm eben in meine Richtung, den zum Glück ist es ja Open Source.

Aber was ist den überhaupt das Problem. Spielt man dieses BSD Rouge auf seinem Single User Betriebssystem wird der Anmeldename als Spielernamen eingesetzt und nur der Beste Highscore wird in der Top10 Liste gespeichert. Spielt ein anderer User des Systems bekommt er seinen Eintrag ebenfalls gespeichert. Bis ich aber an dieser Stelle angekommen war, hatte ich schon Stunden im C-Code verbracht um herauszufinden wo der Fehler her kommt. Des Rätsels Lösung fand sich dann nicht im QuellCode sondern in einem README File mit folgendem unscheinbaren Satz am Absatzende.

The score is keyed to winning scores, and no player may appear twice.

OK dann baue ich das eben wieder aus, und damit alle anderen weiter spielen koennen wie gewohnt, bekommt das Programm eine weiter Command Line Option. Lustig auch das gerade das in dem Changelog des Entwicklers hervorgehoben wird. Die meisten Optionen wurden entfernt, zu meinem Glück blieb die Highscore anzeigen [-s] aber drin. So konnte ich mich recht Simple an die Erweiterung machen. Alle änderungen finden sich in diesem Commit

BSD Rogue Debian Buster with HighScore for singel user

Das Leben eines C Entwicklers ist aber auch wirklich nicht einfach, welch ein Aufwand betrieben wird um eine Lösung zu finden ist enorm. Die Variable have_fun wurde von mir eingefügt.

if((!score_only) && (!have_fun) && (found_player == -1)){
  if (!name_cmp(scores[i]+15, login_name)) {
    x = 5;
    while (scores[i][x] == ' ') {
...
    }
  }
}
if ( (!have_fun) && (found_player != -1) ) {
  ne--;
  for (i = found_player; i < ne; i++) {
  (void) strcpy(scores[i], scores[i+1]);
...
  }
}