amiga-news ENGLISH VERSION
.
Links| Forum| Kommentare| News melden
.
Chat| Umfragen| Newsticker| Archiv
.

[Login] [Registrieren] [Passwort vergessen?]

< Nächste MeldungVorige Meldung >
08.Dez.2022



Adventskalender: Tür 8 - Daniel Müßener
Für die 8. Tür unseres Adventskalenders konnten wir Daniel 'Daytona675x' Müßener gewinnen.

Wer hat wieder mal Lust, "Battle Squadron" zu spielen? :) Das ursprünglich 1989 von Cope-com entwickelte Spiel wurde von den Machern zusammen mit Daniel Ende 2013 in einer Neuauflage für AmigaOS 4 (und iOS, Android, Windows, OS X) herausgebracht.
Ende 2015 wurde eine Portierung des Spiels "Wings! Remastered Edition" für AmigaOS 4, AROS und MorphOS angekündigt und ein erstes Preview veröffentlicht. Anfang 2020 war dann eine neue Demoversion erhältlich.

Darüberhinaus veröffentlichte Daniel Anfang 2018 die AmigaOS-4-Version des im Sommer 2015 schwarmfinanzierten Arcade-Shooters Tower 57. Ebenso für AmigaOS 4 im Auftrag von A-EON entwickelt er den erstmals 2016 angekündigten OpenGL-ES-2-Wrapper, der Bestandteil des Enhancer Software ist.

Aktuell arbeitet der Entwickler an zwei Projekten: Atomic Bomberman Fan Rewrite ist eine Überarbeitung der gleichnamigen Bomberman-Variante für Windows aus dem Jahr 1997. Zu den Verbesserungen zählen, dass es neben den Amigasystemen auch auf aktuellen Windowsversionen wieder läuft, USB-Eingabegeräte genutzt, bis zu zehn Spieler an einem Gerät aktiv werden können und die Spielmodi überarbeitet wurden. Ebenso gibt es Netzwerkunterstützung für online-Wettkämpfe. Aktuell ist hier die Version 2.15 auf seiner Webseite erhältlich.

Schließlich informiert Daniel regelmäßig mittels Vorschau-Videos über den Entwicklungsstand seines Fußballspiels in 3D-Optik, "Souverän Soccer", dessen Zielplattform ein Amiga 1200 im Auslieferungszustand ist. Und so ganz "nebenbei" gehören zu seiner Vita auch die Amiga-Future-Ehrernämter "Übersetzer" und "Gamescom Männchen für alles"!

Vielen Dank, Daniel, für dein Engagement für den Amiga und natürlich auch für deine Advents-Geschichte, die nun folgt:

"Es war weder zur beschaulichen Weihnachtszeit noch Ostern, Silvester oder Karneval, obwohl ein entsprechender Rotwein-, Eierlikör- oder Kölschschwipps eine Erklärung für diese meine geistige Umnachtung gewesen wäre, von der ich euch, liebe Kinder, nun erzählen möchte.

Vor gar nicht allzu langer Zeit trug es sich zu, dass ich gar verzweifelt frickelnd am serial-link Feature meines Amiga Fußballspielchens werkelte. Es war schon spät des Nachts und der mit Kohlefeinstaub durchsetzte Regen prasselte braune Schlieren hinterlassend ans Bürofenster, vom Klang her kaum vom Klackern der malträtierten Tastatur zu unterscheiden.

Die Serielle unserer Freundin ist leider nichts, womit sie angeben könnte. Aber wenn man sie so langsam beackert, dass sie sich jedes Bit dreimal und von allen Seiten anschauen kann, dann passt das schon. Das Protokoll für das Spiel ist auch extra kompakt, um die Damen bloß nicht zu überfordern. Da das Spiel, bei gleicher Zufallszahlensaat, voll deterministisch ist und der Ablauf nach der Initialisierung nur noch durch die Spielerinputs bestimmt wird, reichen glücklicherweise unterm Strich schlappe 2 Byte pro Maschine pro Frame, die es zu übertragen gilt. Das ist auch gut so, denn für mehr reicht die Puste zumindest auf einer nackigen A1200 nicht aus, jedenfalls nicht bei "Souverän Soccer", wo man sich ohnehin schon am äußersten Leistungslimit bewegt und unbedingt 50 fps bei minimaler Latenz halten muss.

Jedenfalls sind in diesen insgesamt 2x2 Bytes alle Joystick- und Tastenkommandos, implizite Synchronisierung und Fehlerkorrekturinfo drin. Aber der Weg dorthin war ein steiniger und selbstverständlich bestand die Protokollevolution aus vielen Zirkeln des Ausprobierens, Weinens und wieder Wegschmeißens. Und natürlich stand am Anfang erst einmal ein weitaus simpleres Protokoll.

Zunächst sollte es ein einfacher Proof-Of-Concept sein. Dazu schickte Amiga #1 (nennen wir ihn aus aktuellem Anlass "Santa") einfach 1 Byte mit seinen aktuellen Joystick-Bits an Amiga #2 ("Rudolph"). Rudolph dagegen schickte 2 Bytes, nämlich seine eigenen Joystickdaten und die zuletzt von Santa empfangenen. Genau dieses Input-Paar wurde dann von beiden für die Berechnung des nächsten Simulationsschritts benutzt.

Und damit sind wir wieder in eingangs skizzierter Nacht. Team "Santa" und Team "Rudolph" sollten endlich auf dem Platz zeigen, was sie in der Theorie einstudiert hatten. Doch scheinbar hatten sich unsere beiden Schergen gegen mich verschworen oder irgendein Poltergeist in der Maschine hatte seine Finger im Spiel:

Wenn man den aktiven Spieler von Santa bewegte, dann rannte auch Rudolphs fokussierter Spieler in dieselbe Richtung - und als wäre das nicht schon daneben genug, taten sie das nur auf Rudolphs Bildschirm, auf Santas blieben beide einfach stehen! Und wenn man den an Rudolph angeschlossenen Joystick benutzte, passierte das gleiche, nur aus seiner gespiegelten Perspektive!

Das kann nicht sein! Jeder Programmierer kennt diesen Satz zu Genüge, aber selten war er angebrachter als in diesem Fall. Dieses Verhalten konnte und durfte einfach nicht eintreten, völlig unmöglich! Und doch war es so. Aber selbst nach zwei weiteren schrecklich langen Stunden war es mir lediglich gelungen, das ganze höchstens noch weiter zu verschlimmern.

Irgendwann fühlte ich mich wie Tom, der Jerrys Tagebuch zerfetzt. Aber bevor die armen Amigas oder Competitions einen unverdienten Tod hätten sterben müssen, zog ich lieber den Stecker und verließ meine Workbench mit schlurfendem Gang und hängenden Schultern in Richtung Bett.

Doch selbst im Schlaf war mir keine Ruhe vergönnt: im Traum fand ich mich inmitten eines stürmischen Gewitters auf einem schmierig durchweichten Fußballplatz wieder. Bei jedem Blitz schimmerten die Konturen von Spaghetticodetextfragmenten durch die Wolken und formten aberwitzige Sigillen. Auf den Zuschauerrängen tummelten sich zigtausende krankhaft aufgedunsene Nullen und sich wurmartig windende Einsen. Meine Ohren klingelten weniger vom krachenden Donner als vielmehr von den ohrenbetäubenden Fangesängen, die am ehesten noch an ein auf der Stereoanlage abgespieltes C64 Tape erinnerten. Nach einem Moment des Schwindels und der Orientierungslosigkeit realisierte ich, dass ich in einem der beiden Tore stand. Da knallte mir eine äußerst scharf geschossene Pille bereits gegen den Schädel! Der Schütze nutzte meinen Beinaheknockout, setzte nach und verwandelte den Abpraller allzu souverän. Dass sämtliche Spieler zweidimensionale Pixelmännchen waren, war nicht weiter bemerkenswert. Aber was mir ins Auge stach, waren die Trikots: während die meiner Mannschaft ein & Kaufmannsund zeigten, prangte auf denen des gegnerischen Teams ein einfacher vertikaler Strich wie ein Pipe-Symbol. Aber bevor ich mich weiter darüber wundern konnte, bekam ich einen Ball in den Bauch - und noch einen - und noch einen. Als ich den letzten in die Hand bekam, sah ich, dass es sich um keinen klassischen Fußball, sondern ein grünes rundes schrumpeliges Etwas handelte, das mich zudem aus zwei Triefaugen anglotzte und grinsend meinte: "Aufstehen, dummer Papa!".

Nachdem ich schweißgebadet aufgewacht war und meine Tochter davon abgebracht hatte, weiter auf meinem Bauch zu hüpfen, offenbarten sich mir drei Dinge mit absoluter Klarheit: Erstens, definitiv hinterließ jahrelanges C64 und Amiga Zocken doch seine Spuren, zweitens, Kinder geben einem ja so viel zurück, und drittens, mit diesen bösen Pipe-Strichen und den Kaufmannsunds hatte es doch irgendetwas auf sich, da hatte mein Unterbewusstsein etwas bemerkt, das dem Oberen entgangen war.

Also gut, Katzenwäsche, Kaffee, Morgenstuhl, frisch zurück ans Werk! Und siehe da, es dauerte nicht einmal eine Minute, die Problemursache zu entdecken und zu korrigieren. Was war geschehen?

Innerhalb der ganzen Spiellogik gibt es eine Variable, in der diverse An/Aus-Zustände als Bits gespeichert sind. Unter vielem anderen ist dort auch vermerkt, ob gerade ein Serial-Link-Match läuft und ob der jeweilige Amiga in einem solchen Fall als Santa oder Rudolph fungiert. Entsprechend gibt es Weichen, bei denen diese Bits getestet werden und je nachdem dieser oder jener Codepfad durchlaufen wird. In C sieht das so aus, wobei gf_Santa einfach ein bestimmtes Bit repräsentiert:

if(gameplay_flags & gf_Santa) {
// Santa-Kram kommt hier
} else {
// Rudolph-Kram kommt hier
}

Hier hatte sich ein kleiner, aber gemeiner, Tippfehler eingeschlichen. Anstelle des & (binäres UND) stand da ein | (binäres ODER):

if(gameplay_flags | gf_Santa)

Im Gegensatz zum eigentlich gewünschten Bit-Test ist das hier einfach nur, leider syntaktisch völlig legaler, Mist, der meinen GCC noch nicht einmal zu einer Warnung verleitet. Ich hätte dort auch if(true) schreiben können, der Effekt wäre der gleiche gewesen, nämlich dass immer nur der Santa-Code ausgeführt wurde - auch für einen Rudolph :P Dieser Tippfehler lässt sich eigentlich nur mit temporärer geistiger Umnachtung erklären. Zu allem Überfluss ist man als Programmierer grundsätzlich vor allem erst einmal faul, wodurch sich dieser Fehler auch direkt verdoppelt hatte, weil ich diese falsche Zeile noch an eine weitere Stelle kopiert hatte, sprich, sowohl in der Empfangs- als auch der Sendelogik steckte diese Macke.

Letztlich passierte dadurch in etwa Folgendes, wenn man den an Santa angeschlossenen Joystick nach links drückte:
  • Santa schickt seine Joystickdaten, "nach links"
  • Rudolph schickt seine Joystickdaten, "nix"
  • Santa will 2 Bytes empfangen, bislang ist aber nur 1 da, also nichts zu tun
  • Rudolph will 2 Bytes empfangen, bislang ist aber nur 1 da, also nichts zu tun
  • Santa schickt seine Joystickdaten, "weiterhin nach links"
  • Rudolph schickt seine Joystickdaten, "weiterhin nix"
  • Santa hat jetzt 2 Bytes bekommen und interpretiert die als "Spieler1: nix, Spieler2: nix"
  • Rudolph hat jetzt 2 Bytes bekommen und interpretiert die als "Spieler1: nach links, Spieler2: nach links"
Argh! Selbstredend funktionierte das ganze serial-link Konstrukt nach der & Korrektur noch nicht wirklich sauber, aber der Knoten war geplatzt und noch am selben Tage konnte ein erstes Testmatch erfolgreich ausgetragen werden.

Und die Moral von der Geschichte? Unterschätze nie die eigene Betriebsblindheit und Trotteligkeit, dummer Papa! Na dann, gute Nacht, liebe Kinderlein!" (dr)

[Meldung: 08. Dez. 2022, 04:15] [Kommentare: 6 - 11. Dez. 2022, 13:04]
[Per E-Mail versenden]  [Druck-Version]  [ASCII-Version]
< Nächste MeldungVorige Meldung >

.
Impressum | Datenschutzerklärung | Netiquette | Werbung | Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten.
.