| Blickfeldbeschränkung

###### Vorüberlegungen

Eure Hauptcharaktere werden während ihrer Reisen sich in dunkle Bergwerksstollen oder Kellergewölbe begeben, in denen es keinerlei Lichtquellen hat. im wirklichem Leben ist bei Dunkelheit das Blickfeld stark eingeschränkt und nicht so lang, wie es in Spielen oftmals dargestellt wird. Am Beispiel von "Zelda - A Link to the past" soll dies demonstriert werden:
[Beispielbild]
Nur, wie lässt sich so etwas anstellen, ohne allzugroßen Aufwand?

| Zuallererst braucht ihr Grafiken (Pictures, um genau zu sein), die das begrenzte Blickfeld freigeben und den Rest schwarz bedecken sollen. In unserem Beispiel habt ihr die Wahl zwischen zwei Grafik-Paketen für diesen Zweck: [sichtkegel_1.zip] [sichtkegel_2.zip]
| Danach geht es ans Anlegen des Ereignisses, das in der Datenbank geschieht. Es soll als paralleler Prozess laufen und erst dann aktiv werden, wenn ein Schalter namens "Finstre Dungeons" aktiv ist.
| Zuerst müssen zwei Variablen die Heldenposition auf dem aktuell dargestelltem Bildbereich pixelgenau speichern (Also die X- und Y-Koordinate/Scene X bzw. Scene Y).
| Direkt danach soll eine Bedingung abfragen, ob das Ereignis "Held" nach oben (Up) schaut. Ein Nein-Fall ist hier wichtig.
| Im Ja-Fall wird dann zuerst das Bild mit dem Sichtkegel auf der zuvor ermittelten Position der Helden angezeigt. Die Bildnummer, die im Maker vergeben werden muss, soll hier 15 sein.
| Direkt nach diesem Bild-Zeigen soll eine Endlosschleife stehen.
| In dieser Endlosschleife wiederum soll eine Bedingung abfragen, ob die Heldentruppe immer noch nach oben schaut.
| Im Ja-Fall dieser Bedingung soll wieder die pixelgenaue Position der Helden gespeichert werden. Verwendet hierfür die selben Variablen wie zuvor auch.
| Mittels Bildbewegung soll das Bild des Sichtkegels nun an die neue Position bewegt werden, was in einem Zeitraum von 0 Sekunden geschehen muss.
| Im Nein-Fall der selben Bedingung soll aus der Endlosschleife ausgebrochen werden.
| Im Nein-Fall der Bedingung, die ganz am Anfang angelegt wurde (die erste, welche die Blickrichtung abfragt) soll nun das ganze für die Blickrichtung "rechts" wiederholt werden, nur dass ihr hier auch den entsprechenden Sichtkegel verwendet. Führt dieses Schema auch für die Blickrichtungen "runter" und "links" durch.

###### Darstellung der Stichpunkte in MML

Blickfeldbegrenzung-Ereignis [Parallel][Schalter [Finstre Dungeons]]
[Variable [Held Pixel-X]] [<-- [setzen][Ereignis [Held][Pixel X]] [Variable [Held Pixel-Y]] [<-- [setzen][Ereignis [Held][Pixel Y]] [Bedingung[Ereignisblickrichtung][Held][hoch]
| [Ja-Fall]
| [Picture zeigen] [15] [Sichtkegel hoch][Startkoordinate] [X=Held Pixel-X|Y=Held Pixel-Y][Transparent] [Schleife Beginn] [Bedingung[Ereignisblickrichtung][Held][hoch]
| [Ja-Fall]
| [Variable [Held Pixel-X]] [<-- [setzen][Ereignis [Held][Pixel X]] [Variable [Held Pixel-Y]] [<-- [setzen][Ereignis [Held][Pixel Y]] [Picture bewegen] [15][X=Held Pixel-X|Y=Held Pixel-Y][Transparent]
| [Nein-Fall]
| [Schleife Ausbruch]
[Schleife Ende]
| [Nein-Fall]

###### Anleitung zur Erstellung des Maker-Codes

1. | : | Begebt euch in die Datenbank eures Projektes, indem ihr die Taste [F8] drückt oder auf den Button mit der Tabelle klickt. Dort wechselt ihr auf die Registerkarte "Common Events/Häufig benötigte Ereignisse".
2. | : | Wählt eine freie Zahlenkolonne aus, der ihr das Ereignis für die Blickfeldbegrenzung zuweisen wollt. Bestimmt hier, dass es als paralleler Prozess laufen und erst dann starten soll, wenn der Schalter "Finstre Dungeons" aktiv ist.
3. | : | Erstellt nun mit Hilfe des Befehls "Change Variable(s)/Variable(n) verändern" (zu finden auf der ersten Seite der Ereigniskommandos) zwei Variablen, die ihr "Held Pixel-X" und "Held Pixel-Y" nennt. Ihnen weist ihr mit Hilfe des Operators "Set/Wert setzen" und der Option "Event/Ereignis" nun vom Ereignis "Held" jeweils die "Scene X/Bildausschnitt X " und "Scene Y/Bildausschnitt Y" zu.
4. | : | Direkt danach soll nun eine Bedingung abfragen, ob die Heldentruppe nach oben schaut. Wählt hierfür das Ereigniskommando "Fork Conditions/Bedingung" (zu finden auf der dritten Registerkarte der Ereigniskommandos), wo ihr im Dialog der Bedingungserstellung auf der zweiten Registerkarte "Event/Ereignis", dort im erstem Drop-Down-Menü wiederum "Hero/Held" und daneben "Up/Hoch" wählt. Wichtig ist, dass diese Bedingung einen Nein-Fall hat (Else-Case/Ansonstenfall). Die Bedingung sollte nun wie folgt aussehen:
Im englischem Maker
<>If Hero==>Up (Direction) <> :Else Case <> :End Case
Im deutschem Maker (V1.10c)
<>Bedingung:Held - Ob[Ges-Richt.] <> :Ansonsten <> :End-Fall
5. | : | Im Ja-Fall dieser Bedingung (Die Heldentruppe schaut nach oben; der Bereich ist dunkelgrün hevorgehoben) bestimmt ihr nun mit dem Befehl "Show Picture/Bild anzeigen", dass das Bild eines Sichtkegels nach oben angezeigt werden soll. Das Ereigniskommando dafür findet ihr auf der zweiten Registerkarte der Ereigniskommandos. Die Bildnummer soll 15 sein und die Koordinatenangaben für X und Y aus den Variablen "Held Pixel-X" und "Held Pixel-Y". Bestimmt unbedingt, dass die transparente Farbe verwendet werden soll (mittels der Option "Stir/Ja").
6. | : | Direkt nach dieser Bildanzeige soll eine Endlosschleife folgen, deren Befehl ihr auf der dritten Registerkarte der Ereigniskommandos findet.
7. | : | Direkt danach soll nun wieder eine Bedingung abfragen, ob die Heldentruppe nach oben schaut. Die Vorgehensweise ist exakt die Selbe wie bereits unter Punkt 4 gezeigt.
Im englischem Maker
<>If Hero==>Up (Direction) <> :Else Case <> :End Case
Im deutschem Maker (V1.10c)
<>Bedingung:Held - Ob[Ges-Richt.] <> :Ansonsten <> :End-Fall
8. | : | Im Ja-Fall dieser eben erstellten Bedingung (Die Heldentruppe schaut immer noch nach oben; der Bereich ist dunkelblau hervorgehoben) wird wieder mit Hilfe des Befehls "Change Variable(s)/Variable(n) verändern" (zu finden auf der ersten Seite der Ereigniskommandos) in die beiden Variablen "Held Pixel-X" und "Held Pixel-Y" die Werte "Scene X/Bildausschnitt X " und "Scene Y/Bildausschnitt Y" zugewiesen.
9. | : | Direkt danach soll ein Bildbewegungsereignis das Bild Nummer 15 (den Sichtkegel) zu der eben ermittelten Heldenposition bewegen. Das Ereigniskommando dafür findet ihr auf der zweiten Registerkarte und bestimmt dort exakt die selben Werte wie unter Punkt 5 geschehen, also die beiden Variablen für die Koordinaten X und Y, die Bildnummer 15 und die transparente Farbe "Stir/Ja".
10. | : | Im Nein-Fall der Bedingung aus Punkt 7 (die Helden schauen nicht mehr nach oben; der Bereich ist pink hervorgehoben) bestimmt ihr, dass ein Ausbruch aus der Endlosschleife geschehen soll. Das Ereigniskommando dafür ist auf der dritten Registerkarte der Liste an Ereigniskommandos zu finden.
11. | : | Im noch leerem Nein-Fall der Bedingung aus Punkt 4 (der dunkelrot hervorgehobene Bereich) wiederholt ihr die Punkte 5 bis 10 für die Blickrichtung "rechts".
12. | : | Verfahrt nach dem selbem Schema auch für die Blickrichtungen "runter" und "links".

###### Der erstellte Maker-Code

Im englischem Maker
<>Change Var: Var[Held PixelX](Set)-Hero's Screen X <>Change Var: Var[Held PixelY](Set)-Hero's Screen Y <>If Hero==>Up(Direction) <>Show Picture: ID:15-Sichtkegel_Hoch-(V[xxxx],V[yyyy]) <>Loop <>If Hero==>Up(Direction) <>Change Var: Var[Held PixelX](Set)-Hero's Screen X <>Change Var: Var[Held PixelY](Set)-Hero's Screen Y <>Move Picture: ID:15-(V[Held PixelX],V[Held PixelY]), 0.0sec <> :Else Case <>Break <> :End Case <> :End Loop <> :Else Case <>If Hero==>Rigt(Direction) <>Show Picture: ID:15-Sichtkegel_Rechts-(V[Held PixelX],V[Held PixelY]) <>Loop <>If Hero==>Rigt(Direction) <>Change Var: Var[Held PixelX](Set)-Hero's Screen X <>Change Var: Var[Held PixelY](Set)-Hero's Screen Y <>Move Picture: ID:15-(V[Held PixelX],V[Held PixelY]), 0.0sec <> :Else Case <>Break <> :End Case <> :End Loop <> :Else Case <>If Hero==>Down(Direction) <>Show Picture: ID:15-Sichtkegel_Rechts-(V[Held PixelX],V[Held PixelY]) <>Loop <>If Hero==>Down(Direction) <>Change Var: Var[Held PixelX](Set)-Hero's Screen X <>Change Var: Var[Held PixelY](Set)-Hero's Screen Y <>Move Picture: ID:15-(V[Held PixelX],V[Held PixelY]), 0.0sec <> :Else Case <>Break <> :End Case <> :End Loop <> :Else Case <>If Hero==>Down(Direction) <>Show Picture: ID:15-Sichtkegel_Rechts-(V[Held PixelX],V[Held PixelY]) <>Loop <>If Hero==>Down(Direction) <>Change Var: Var[Held PixelX](Set)-Hero's Screen X <>Change Var: Var[Held PixelY](Set)-Hero's Screen Y <>Move Picture: ID:15-(V[Held PixelX],V[Held PixelY]), 0.0sec <> :Else Case <>Break <> :End Case <> :End Loop <> :End Case <> :End Case <> :End Case <> :End Case <>
Im deutschem Maker (V1.10c)
<>Var ändern: [Held PixelX]Wert, Held, TileX <>Var ändern: [Held PixelY]Wert, Held, TileY <>Bedingung: Held - Ob[Ges.Richt] <>Bild anzeigen: 15-Sichtkegel_Hoch-(V[Held PixelX],V[Held PixelY]) <>Schleife <>Bedingung: Held - Ob[Ges.Richt] <>Var ändern: [Held PixelX]Wert, Held, TileX <>Var ändern: [Held PixelY]Wert, Held, TileY <>Bild bewegen: 15-(V[xxxx],V[yyyy]), 0.0Sek <> :Ansonsten <>Schleife stoppen <> :End-Fall <> :Schleifenende <> :Ansonsten <>Bedingung: Held - Rc[Ges.Richt] <>Bild anzeigen: 15-Sichtkegel_Hoch-(V[Held PixelX],V[Held PixelY]) <>Schleife <>Bedingung: Held - Rc[Ges.Richt] <>Var ändern: [Held PixelX]Wert, Held, TileX <>Var ändern: [Held PixelY]Wert, Held, TileY <>Bild bewegen: 15-(V[Held PixelX],V[Held PixelY]), 0.0Sek <> :Ansonsten <>Schleife stoppen <> :End-Fall <> :Schleifenende <> :Ansonsten <>Bedingung: Held - Un[Ges.Richt] <>Bild anzeigen: 15-Sichtkegel_Hoch-(V[Held PixelX],V[Held PixelY]) <>Schleife <>Bedingung: Held - Un[Ges.Richt] <>Var ändern: [Held PixelX]Wert, Held, TileX <>Var ändern: [Held PixelY]Wert, Held, TileY <>Bild bewegen: 15-(V[Held PixelX],V[Held PixelY]), 0.0Sek <> :Ansonsten <>Schleife stoppen <> :End-Fall <> :Schleifenende <> :Ansonsten <>Bedingung: Held - Ln[Ges.Richt] <>Bild anzeigen: 15-Sichtkegel_Hoch-(V[Held PixelX],V[Held PixelY]) <>Schleife <>Bedingung: Held - Ln[Ges.Richt] <>Var ändern: [Held PixelX]Wert, Held, TileX <>Var ändern: [Held PixelY]Wert, Held, TileY <>Bild bewegen: 15-(V[Held PixelX],V[Held PixelY]), 0.0Sek <> :Ansonsten <>Schleife stoppen <> :End-Fall <> :Schleifenende <> :End-Fall <> :End-Fall <> :End-Fall <> :End-Fall <>

###### Was noch erledigt werden sollte

Immer, wenn eure Hauptcharaktere eine dunkle Ortschaft betreten, an der die Sichtfeldbegrenzung aktiv sein soll, muss der Schalter "Finstre Dungeons", der ganz am Anfang erwähnt wurde, aktiviert werden. Wenn eure Hauptcharaktere diese finsteren Orte wieder verlassen, so muss der Schalter wieder deaktiviert werden. Dies sollte kurz vor dem jeweiligem Teleport-Befehl, der eure Hauptcharaktere die Karte wechseln lässt, geschehen.