Haben Sie in der letzten Zeit schon einmal Ihren Mülleimer auf dem Desktop entleert? Das sollten Sie regelmäßig tun! Einmal davon abgesehen, daß ein ungeleerter Mülleimer höchst unhygienisch ist, bietet er ein ideales Nest für Insekten. Besonders die Fliege der Gattung musca atarius liebt halb verschimmelte Dateien für ihre Eiablage. Dieses Ungeziefer stellt zwar keine Gefahr für den ST oder Ihre Daten dar, aber es ist unter Umständen ziemlich lästig.
Nicht nur, daß sein ewiges Gebrumme und Herumgesause um den Cursor schon so manchen ST-Besitzer auf die Palme getrieben hat: Nein, musca atarius ist zudem ein ausgesprochener Nahrungspezialist. Bevorzugt ernährt sich das Insekt von Pixeln, die es mit dem besonders dafür ausgerüsteten (viereckigen) Rüssel einsaugt. Welche schwerwiegenden Folgen dies auf die Dauer für Ihren Desktop hat, brauche ich Ihnen nicht zu erzählen. Wenn Ihr Computer von einer solchen Insektenplage betroffen ist, hilft Ihnen unser Programm FLY—EX.PRG (im PROGRAME-Ordner) vielleicht weiter: Die speziell für diese Insekten entwickelte FLY-EX-Fliegenklatsche befreit Sie bei korrekter und zielsicherer Anwendung von diesen Plagegeistern.
Was aussieht wie ein Insektenschaukasten, ist das Bild, aus dem die Spriteliste für unser heutiges Gimmick entstand. Die Zahlen unter den Sprites bezeichnen die jeweiligen Spritenummern, unter denen die Sprites in der Spriteliste definiert sind Dabei gibt es allein für die Fliege 80 Sprites.
Kopieren Sie das Programm FLY-EX.PRG in den Auto-Ordner oder starten Sie es vom Desktop aus. (Nicht schlucken!) Wichtiger Hinweis: FLY-EX nur im monochromen Grafikmodus (640*400) anwenden.
Nach einer kurzen Inkubationszeit ist FLY-EX dann aktiviert: Halten Sie die rechte Maustaste gedrückt. Anstatt des normalen Mauscursors sehen Sie nun unsere FLY-EX-Fliegenklatsche. Wenn Sie jetzt bei gedrückter rechter Maustaste zudem noch die linke Maustaste drücken, senkt sich die Klatsche blitzschnell auf das Desktop herab. Nach Möglichkeit sollte sich an der entsprechenden Stelle auch eine Fliege befinden. Um die ist es dann nämlich geschehen. Aber nur eine gezielte Anwendung garantiert eine optimale Wirkung. Achten Sie darauf, daß Sie nicht zu wild um sich schlagen. Herumliegende Knöpfe, besonders die mit den Aufschriften »OK« oder gar »FORMAT HARDDISK«, sollten Sie keinesfalls treffen. In den meisten Fällen verbleibt an der Tötungsstelle ein kleiner Fleck zurück. Dies ist auf das Arbeitsprinzip von FLY-EX zurückzuführen und durchaus normal und unbedenklich. In Zeichenprogrammen entfernen Sie diese Flecken mit einem einfachen Schwamm. Weitere Nebenwirkungen sind dem Entwicklungsteam nicht bekannt.
Unser heutiges Gimmick ist das bisher aufwendigste dieser Serie und nutzt die verschiedenen Techniken der bisherigen Gimmicks, wie das Sprite-Zeichnen von MAGIC, die Soundausgabe von DJANGO und die physikalischen Bewegungen von PHYSICAL.
FLY-EX entstand wieder mit dem MEGAMAX-MODULA-2. Die Module MSINIT, MSSOUNDS, MSSY-STEMS und MSGRAPHICS sind uns schon von den anderen Gimmicks her bekannt. MSSOUNDS ist gegenüber der alten Version erweitert, doch darauf gehen wir an geeigneter Stelle genauer ein. MSFIXRE-ALS ist neu und enthält Funktionen zur Festkomma-und Vektorenrechnung. Das Modul MSMOUSE erlaubt eine komfortable Abfrage des Mauszustandes. Das Modul FLYDATAS werden Sie vergeblich auf der Diskette suchen. Dieses Modul stellt alle Sprite- und Klangdaten zur Verfügung und ist in Textform größer als 330 KByte. Diese Daten sind auch in dem fertig gelinkten Programm FLY-EX.PRG vorhanden. Das Programm MAKEFLYD.PRG erzeugt aus der Programmdatei FLY—EX.PRG eine Textdatei - den Quelltext FLYDATAS.ITX. Achten Sie beim Starten von MAKEFLYD.PRG darauf, daß sich die Datei FLY—EX.PRG im gleichen Ordner befindet. FLY—EX.TXT ist das eigentliche Hauptprogramm.
Noch eine kleine Bitte: Da ich Ihnen die Quelltexte zur Verfügung stelle, sollten Sie auf jeden Fall die Urheberrechte beachten. Sie können Ihre Gimmick-Variante natürlich auch an Ihre Freunde weitergeben. Dann sollten Sie aber wissen, daß das Entfernen der Copyright-Meldung strafbar ist. Also lassen Sie bitte die Meldung im Programm und schreiben ggf. eine Zusatzmeldung, die auf Ihre eigene Variation hinweist. Und: Eine kommerzielle Nutzung der Gimmicks und deren Variationen, insbesondere die Verteilung über PD-Versand und Mail boxen, ist untersagt.
Das Ziel des heutigen Gimmicks ist es, eine Fliege realistisch zu simulieren. Das heißt, die Fliege sollte frei über den Bildschirm fliegen, sich setzen, laufen, ihre Flügel putzen und bei Gefahr wieder in die Luft steigen. Zu diesem Zweck definieren wir zunächst die Grundzustände (FlyStateType), in denen sich die Fliege befinden kann:
Wie das Gimmick MAGIC, so hängt sich auch dieses Programm in den VBL-Vektor ein und bleibt damit im Hintergrund aktiv. Die Prozedur MakePicture zeichnet die Figuren und verwaltet die Grafikseitenum-schaltungen. Wie die Animationen und Grafikseitenverwaltung funktionieren, lesen Sie in TOS 7/90.
Der Flug der Fliege berechnet sich nach dem gleichen physikalischen Prinzip wie die Cursorbewegung beim Gimmick »Physical« (TOS 9/90). Allerdings ist hier die Kraft (FlyingPower) ein fester Wert, der gleichfalls die Aggressivität der Fliege bestimmt. Die Richtung der Kraft ergibt sich über einen zuvor zufällig bestimmten Punkt, auf den die Fliege zusteuern soll.
Ein neues Flugziel wird erst dann ermittelt, wenn die Fliege in die Nähe des alten Punktes gelangt ist. Zur Berechnung der Entfernung zum Flugziel verwenden wir die Prozedur VectorLengthPowerOfTwo, welche die quadratische Entfernung nach der Formel I2—x2 + y2 berechnet. Wir sparen uns so die Berechnung einer Wurzel, wenn wir den Vergleichswert ebenfalls quadratisch angeben. Soll der Abstand z. B. mindestens 30 Pixel betragen, so müssen wir auf kleiner 900 abfragen. Zur Berechnung des notwendigen Kraftvektors nutzen wir die Prozedur ScaleVector. Sie rechnet den angegebenen Vektor auf eine bestimmte Länge um. Als Vektor geben wir den Ortsvektor von der Fliegenposition zum anzufliegenden Punkt an. Als Länge erhalten wir die Kraft, mit der die Fliege den Punkt anfliegen soll. Die Prozedur ScaleVector verlangt als zweiten Parameter die Länge des ursprünglichen Vektors. Diese Länge errechnen wir mit der Prozedur VectorLength. Die Prozedur VektorLength benötigt dazu eine Wurzelfunktion. Interessant ist hierbei das Verfahren der verwendeten SQR-Funktion, die das Ergebnis über eine Folge berechnet.
Die Folge, die den Wurzelwert von N berechnet:
A[i] = ( A[i] - 1 + N / A[i] - 1 ) / 2
Sonderfall: A[1] = SQR (N)
Die Orientierung der Fliege, also die Richtung, in die der Kopf der Fliege zeigt, ergibt sich ebenfalls über den Kraftvektor. Die Berechnung erfolgt in der Prozedur FlyAnimation über eine Tabelle. Bei der Definition der Sprites ist wichtig, daß der »HotSpot« der Fliegensprites sich immer am Flügelansatz der Fliege befindet, sich die Fliege also später im Flug genau um diesen Punkt dreht.
Haben Sie sich schon einmal überlegt, wie eine Fliege läuft? Nun, die Fliege schiebt zunächst ihren Körper nach vorne und zieht anschließend alle ihre sechs Beine hintereinander nach. Das hört sich leicht an. Aber es dauerte ziemlich lange, bis sämtliche Sprites für die Fliegenanimation gezeichnet waren. Eine Laufsequenz der Fliege besteht aus vier Sprites, die Flugsequenz aus drei Sprites. Für's Sitzen, Saugen und Putzen gibt es jeweils ein Sprite, was für jede Richtung zehn Sprites macht. Diese zehn Sprites müssen wir für alle acht Orientierungen definieren, womit wir für die Fliegenanimation insgesamt zehn mal acht, also 80 Sprites benötigen (siehe Bild).
Auf dem Schreibtisch zeigt unsere Fliege mehrere Verhaltensweisen. Bevor sich die Fliege aber auf den Schreibtisch niederläßt, berechnen wir die gesamte Dauer des Schreibtischaufenthalts (DeskTimeEnd). Anschließend bestimmen wir mit der Zufallsfunktion eine Verhaltensweise und die Dauer dieser Phase. Ihre Richtung (Direction) kann die Fliege nur beim Laufen ändern. Das Laufen selbst stellen die Sprites n2 bis n5 dar. Bei jedem Bild wird die Fliege um den Laufoffset (WalkOffset) weiterbewegt. Zur Darstellung des Saugens verwenden wir Sprite n9. Sprite 83 dient zum Entfernen der eingesaugten Pixel.
Zu einem natürlichen Verhalten gehört auch, daß sich die Fliege aus gefährlichen Situationen herausmanövrieren kann. Befindet sich die Fliege auf dem Desktop, dann nimmt sie sicherheitshalber den Flugzustand an, wenn sich ihr der entnervte Anwender mit seinem Mauspfeil bzw. Fliegenklatsche zu schnell nähert oder mit der Klatsche auf den Schreibtisch haut (FlySwatterPaffThere).
In der Luft ist das Reagieren auf Gefahren komplizierter. Kommen Sie hier der Fliege mit der Klatsche zu nah, dann wird die Kraft (FlyingPower), die die Fliege zum Fliegen aufbringt, verstärkt und ein neues Flugziel berechnet. Das neue Flugziel ist ein Punkt, der sich entgegen der Richtung Fliege-Klatsche befindet, also sich von der Klatsche entfernt. Je mehr Sie nun die Fliege jagen, desto schneller und aggressiver verhält sie sich. Lassen Sie sie anschließend in Ruhe, dann fliegt sie wieder mit normaler Geschwindigkeit.
Für die notwendigen Geräusche konnte ich das alte Modul MSSounds nicht verwenden, da beim Fliegen ein sich wiederholender Klang notwendig ist. Um die Kompatibilität zu den alten Gimmicks zu gewährleisten, existiert in der neuen Version von MSSounds immer noch die Prozedur StartSound, die einfach die Startadresse des Samples als Parameter nutzt. Unser Gimmick verwendet diese Prozedur nicht. Stattdessen benutzt es die Prozedur StartASound, bei der nun eine Referenz vom Typ Sound anzugeben ist. Eine solche Referenz wird mit der Prozedur NewSound erzeugt und enthält die Sampleadresse, sowie die Information, ob es sich um einen wiederholbaren Sound handelt. Falls dies so ist, muß man noch angeben, ab welcher Sampleadressse die Wiederholung einsetzen soll. Gleichfalls ist die Prozedur StopASound neu. Sie erlaubt es, einen aktiven Klang abzubrechen. Mit der Prozedur ASoundlsActive überprüfen Sie, ob zur Zeit ein spezifizierter Klang ertönt. Auf diese Weise verhindern Sie z. B., daß das Fluggeräusch der Fliege zweifach erklingt.
Setzt die Fliege zum Flug an, starten wir das Fluggeräusch mit dem Aufruf »StartASound(Flyln-Sound,200)«. Damit schwillt das Fluggeräusch an und bleibt nachfolgend eingeschaltet. Sollte die Fliege jetzt den Desktopbereich verlassen, bricht das laufende Fluggeräusch mit »StopASound(FlylnSound)« ab und ein ausklingendes Fluggeräusch (FlyOutSound) ertönt. Bei einer Unterbrechung des Fluges, z. B. Landen auf dem Desktop, hört das Fluggeräusch sofort auf, ohne daß FlyOutSound startet.
Die Steuerung der Fliegenklatsche übernimmt die Prozedur FlySwatterSteering. Sie berechnet, ob die Klatsche gezeichnet werden muß, und wenn ja, wie die Klatsche auszusehen hat. Gleichfalls vollzieht sich darin der eigentliche »Fliegentötungsakt«.
Während die Fliegenklatsche sichtbar ist (MyMouse.RightButton.Pressed = TRUE), sollte der Mauscursor nicht mehr zu sehen sein. Deshalb schalten wir ihn mit Hilfe der LINE-A-Funktion HideMouse ab und hinterher, wenn die rechte Maustaste losgelassen wurde, mit ShowMouse wieder ein.
Drücken Sie gleichzeitig mit der rechten auch die linke Maustaste (MyMouse.LeftButton.JustPressed), so senkt sich die Fliegenklatsche, indem sich das Sprite für die Klatsche verändert. Über die Entfernung von Fliege und heruntergesenkter Klatsche entscheidet sich, ob der Anwender die Fliege getroffen hat. Ist das der Fall, ertönt ein saftiges Geräusch, der Fliegenstatus ändert sich auf flylsDead, und auf die TOSScreen wird ein kleiner Fleck gezeichnet (Sprites 81 oder 82).
Zur Dokumentation der Insektenbekämpfung führen wir, wie bei der Insektenjagd üblich, eine kleine Strichliste, die links oben in der Menüzeile erscheint. Die Prozedur DrawScore zeichnet die gesamte Punktzahl direkt auf den TOS-Bildschirm.
Übrigens verhalten sich die Fliegen von Generation zu Generation flinker und sensibler. Auch das Gewicht der einzelnen Fliegen ist unterschiedlich. Leichte Fliegen sind wesentlich wendiger als ihre schweren Artgenossen. Und: Fliegen, die viele Pixel fressen, nehmen an Gewicht zu. Sollten Sie nach einiger Zeit so viel Übung haben, daß Sie auch sieben Fliegen auf einen Streich treffen würden, kann ich Ihnen nur empfehlen, das Gimmick aus der letzten TOS-Ausga-be zusätzlich zu starten. Eine Fliegenklatsche, die sich nach den physikalischen Gesetzen bewegt, erhöht die Spannung bei der Fliegenjagd.
Soviel zu FLY-EX. Freunde der chemischen Insektenbekämpfung erweitern das vorliegende Programm. Die Spritenummern 95 und 96 enthalten die Bilder für eine Spraydose. Wie wär's denn z. B., wenn die Fliege nach zu viel Chemie kleine Motoraussetzer bekommt und anschließend schmerzgekrümmt auf dem Schreibtisch liegt?
Im nächsten Monat stelle ich Ihnen Trashy vor. Trashy ist ein kleiner Kobold, mit dem Sie Ihre Kolleginnen und Kollegen necken können. (ba)