FAQ Die "Events" (Ereignisse) bilden das Nervensystem eines Levels in FarCry. Sie kontrollieren fast alles, können zu komplexen Verbindungen verknüpft werden und erwecken die Map richtig zum Leben. In den vorherigen Kapiteln haben wir bereits "Events" ein paar Mal kurz angesprochen, aber es gibt natürlich noch viel mehr Inhalt zu erläutern.
"Events" fügen die Objekte des Levels in ein interaktives Ganzes zusammen, anstatt diese einzeln aktiviert wirken zu lassen. Dadurch lässt sich ein Gang durch einen Tunnel in ein Abenteuer im Stile von Indiana Jones verwandeln, wo der Spieler sich vor Fallen in Acht nehmen, Bomben platzieren und Ketten zerschießen muss.
Events mit Objekten verknüpfen
"Events" können an jede Art von "Entity" angebracht werden: archetype entity, AI entity, simple entity usw., aber nicht an "Brushes", "Tag Points" oder "Areas". "Entities" können "Event"-Signale senden und empfangen. In beiden Fällen handelt es sich immer um die gleichen Signale. Wenn ihr also einmal überprüfen wollt, welche Signale von eurem Objekt gesendet werden können, dann schaut doch bei diesem selber auf welche es reagieren kann und schon habt ihr eure Antwort.
Aktiviert euer "Event", in dem ihr das Objekt auswählt, welches das Ereignis auslöst. Danach klickt ihr auf "Pick New" unter dessen "Input/Output Events" und wählt das Objekt aus, bei dem etwas ausgelöst werden soll. Danach fehlen nur noch das "Event Signal" sowie das eigentliche Ereignis selber. Ihr könntet z.B. bei einem "Proximity Trigger" das Signal "On Enter" (Bei Betreten) auswählen und einen Gas-Kanister auswählen, an den das Signal "Explode" (Explodieren) gesendet wird.
Hinweis
Einige "Events" können nur Signale empfangen ODER versenden, während andere beides beherrschen. Zum Beispiel kann "Die" (Sterben) ein "Event" empfangen, was einen Söldner sterben lässt. "on Die" hingegen kann kein Signal bezüglich des Todes eines Söldners versenden. Dafür müsst ihr dann "OnDeath" benutzen.
Events einfacher Objekte für sich nutzen
Es gibt einige einfache "Events" bei vielen Objekten, die schnell verstanden und benutzt werden können. Als erstes gibt es die simplen "Enable" (Aktivieren) und Disable" (Deaktivieren) Ereignisse, welche Entities entsprechend aktivieren und deaktivieren, bis sie zum Einsatz kommen sollen.
Wenn ihr z.B. einen Proximity Trigger habt, der ein Gebäude in die Luft sprengt, wenn der Spieler dieses sicher verlassen hat, soll der Trigger (Auslöser) natürlich beim Betreten deaktiviert sein. Ist er im Gebäude wird dann der Trigger allerdings aktiviert und beim Verlassen gibt es ein schönes Feuerwerk. Außerdem könnt ihr auch Objekte aus Performance-Gründen deaktivieren, die nicht in Sichtweite des Spielers sind (z.B. dynamisches Licht). Nach einer Explosion könnt ihr auch automatisch ein weiteres Ereignis wie einen Missionshinweis für den Spieler auslösen lassen. Solch ein Objekt löst ihr mit Hilfe des "On Explode"-Ereignis nach einer Explosion aus.
Ausblenden von gerade nicht benötigten Objekten
Einfache Ereignisse sind außerdem noch "Hide" (Verstecken) und "Unhide" (sichtbar machen), welche bestimmte Objekte aus der Sicht des Spielers verschwinden lassen können. Nützlich sind diese gerade bei Gegnern wie Söldnern. Eine Szene könnte zum Beispiel so aussehen, dass der Spieler nach Verlassen eines Gebäudes von ein paar Söldnern angegriffen wird. Diese dürfen natürlich beim Beitreten des Gebäudes nicht zu sehen sein, da ihr Auftritt erst später kommen soll.
Beim Verlassen des Gebäudes sendet ihr ein "Unhide"-Signal an die Söldner und schon kann das Scharmützel beginnen. Söldner haben eine kleine Anzahl von simplen "Events" zusätzlich zu den bereits in Kapitel 3 genannten Einträgen. Ihr könnt eine KI-Figur töten, in dem ihr ein "Die"-Event auslöst oder ihr lasst ein anderes Objekt mit einem Signal auf diesen Tod reagieren, wenn das "OnDeath"-Events ausgelöst wird. Sieht ein Söldner z.B. seinen Kameraden plötzlich sterben, so kann man ihm ein Signal schicken, dass er daraufhin "what the...?" ("Was zum...?") sagt.
Mit einem Trigger ein Event auslösen
Komplexere Mechanismen verbergen sich mit "Trigger" (Auslösern) hinter einfachen "Events". "Trigger" arbeiten vollkommen unabhängig von Objekten und können ein Ereignis auslösen, ohne dass auch nur ein Objekt in irgendeiner Weise beeinflusst wurde. Zum Beispiel kann das Betreten eines Bereichs durch den Spieler einige Objekte mit Hilfe eines Triggers auslösen. Trigger können außerdem von normalen Objekten oder sich selbst ausgelöst werden. Beispiel wären hier ein Söldner, die in einen AI Trigger läuft oder eine Explosion, die einen "Input Trigger" (Eingabeauslöser) an einen "Delay Trigger" (Verzögerungsauslöser) sendet.
Multiple Trigger und ihr Nutzen im Spiel
Der "Multiple trigger" erlaubt es euch ein Ereignis so lange aufzuhalten, bis der Trigger ein Signal zu einer bestimmten Anzahl erhalten hat. Zum Beispiel könnte der Spieler auf eurer Karte verschiedene Aufgaben zu erledigen haben und jede sendet ein Signal an den "Multiple Trigger". Erst wenn alle Signale eingetroffen sind wird dieser dann die Türe zum nächsten Level öffnen.
Wie ein "Delay Trigger" funktioniert der "Multiple Trigger" am besten in Verbindung mit einem "Input Trigger". Das vom "Multiple Trigger" auszulösende Ereignis muss natürlich dank der ganzen Eingaben unter den Punkt "On Output". Der Parameter "NumInputs" definiert wie viele Ereignisse an einen "Multiple Trigger" gesendet werden müssen, damit dieser sein Ereignis auslöst.
Komplexe Ereignisse erfordern mehr Arbeit
Einige der Ereignisse im Spiel benötigen etwas mehr Zeit für den Aufbau als die bisher besprochenen Beispiele. Dazu gehört unter anderem der Punkt "AddImpulse". Einige Objekte besitzen Ereignisse, die miteinander verkettet werden müssen, damit das ganze System funktioniert, wie z.B. ein Fahrstuhl. Hier tauchen einige Ereignisse auf, deren Bedeutung anfangs nicht ganz klar sein dürfte. Ein paar Beispiele werden wir hier ansprechen, aber die meisten müsst ihr selber durch "learning by doing" oder Betrachten der existierenden FarCry Levels Verstehen lernen.
Einfach nur "AddImpulse" reicht nicht
Ihr könnt recht einfach vielen Objekten einen Impuls zuweisen, in dem ihr ein "AddImpulse"-Ereignis an ein Objekt sendet, welches dieses auch akzeptiert. In den meisten Fällen resultiert daraus aber nur ein leichtes "Wackeln" des Objekts, ohne es überhaupt Bewegung nennen zu können. Der Grund dafür sind die niedrigen Standardwerte des Impulses (1, 2, 3 auf der X, Y und Z Achse). Damit ein "AddImpulse"-Signal wirklich flexibel ist und Objekte ein wenig weiter durch die Gegend gestoßen werden können, müsst ihr euch eigene "Impulse"-Parameter erschaffen. Dafür könnt ihr keine fertigen "Entities" benutzen wie die aus der Objektdatenbank. Ihr müsst zwangsläufig ein "simple entity" benutzen und dessen physikalische Eigenschaften neu programmieren.
Ein bewegliches Objekt neu erstellen
Platziert ein "simle entity" auf eurer Karte, z.B. einen "locker" (Spind) aus dem Verzeichnis "indoor/furniture/cabinets". Dann verändern die physikalischen Einstellungen, damit dieser Spind im Level umher geschoben werden kann. Wählt den Spind aus und setzt ein Häkchen in dessen Einstellungen (RollUpBar) hinter den Punkt "RigidBody". So hat das Objekt nun eine physikalische Präsenz, es fehlt aber noch eine Definition von dessen Masse. Der Standardwert des Parameters "Mass" steht immer auf "700", was sehr viel ist. Eine Kokosnuss würde z.B. eher "2" wiegen.
Nun müsst ihr noch die X, Y und Z Achsen Parameter des "AddImpulse"-Ereignisses ändern, damit sich das Objekt über die Map stoßen lässt. Die Z Achse steht natürlich dafür, wie hoch das Objekt in die Luft geschleudert wird. X und Y definieren dessen Bewegungen nach vorne. Danach braucht ihr noch einen "Trigger" oder ähnliches, welcher das Signal "AddImpulse" an unseren Spind senden kann (z.B. einen Proximity Trigger oder den dafür ausgelegten AddImpulse Trigger).
Die vier wichtigen Signale eines Fahrstuhls
Die "Events" eines Fahrstuhls müssen ein wenig erklärt werden, da nicht alle ihrer Funktionen sofort bewusst sind. Am verwirrendsten dürften die "Events" "Close" (Schließen), "Closed" (Geschlossen) und "Open" (Öffnen) sowie "Opened" (Geöffnet) sein, da sie sich alle sehr stark ähneln. Die Standard-Position eines Aufzugs ist natürlich an seinem Einbaupunkt, der Aufzug steht auf "opened". Wenn ein Spieler nun den Aufzug in Bewegung versetzt, dann wird das Ereignis "open" ausgelöst. Wollt ihr also einen Fahrstuhl sich bewegen lassen, dann löst ihn mit einem "Open"-Signal aus.
Hat der Fahrstuhl nun seinen zweiten Punkt erreicht (eben über oder unter dem Startpunkt), sendet er ein "Opened"-Signal. Natürlich kann er dann auch evtl. wieder zu seinem Startpunkt zurückkehren. Tut er dieses, so sendet er jetzt ein "Close"-Signal. Die Rückkehr zur Ursprungsposition könnt ihr ebenso einfach mit einem Trigger und dem Signal "Close" an den Fahrstuhl veranlassen. Ist der Fahrstuhl wieder oben oder unten angekommen, sendet er ein "Closed"-Event Signal.
Aufzüge realistisch gestalten
Die "Open" und "Close" Signale reichen vollkommen aus, um einen grundlegenden Fahrstuhl zu kreieren. Wirklich interessante Aufzüge haben aber Buttons, die der Spieler benutzen muss, um sie zu starten und bewegen sich erst, wenn die Türen wirklich geschlossen sind. Zum Beispiel könnt ihr den Türen die Anweisung geben, dass diese "Open" und Close"-Ereignisse an den Fahrstuhl senden, wenn sie geschlossen sind. So richtet sich der Aufzug nach dessen Türen und fährt nicht automatisch los. Oder aber ihr baut einige Schalter ein, die dem Fahrstuhl entsprechende Signale senden, dass er zur Etage des Spielers fahren soll.
Möglich sind außerdem Fahrstühle, die nur mit bestimmten "Key Cards" benutzt werden können, eigene Beleuchtung und Material haben oder sich seitwärts bewegen. Der "AutomaticElevator" besitzt einen Parameter, der ihn automatisch bei Betreten des Spielers zum nächsten Punkt fahren lässt. Diese Option könnt ihr in seinen Parametern ändern, um ihn mit "Events" zu steuern.