Kapitel 17 · Half-Life 2 & CS: Source

GEISELBEFREIUNG

Autor: Fragpoint
Downloads: Beispielmap 15

Ein weiteres Missionsziel bei "CS: Source" besteht darin, Geiseln zu befreien und zu einem bestimmten Zielgebiet zu eskortieren. Dazu schauen wir uns erst einmal die nachfolgende Übersicht an, damit ihr ungefähr wisst, wo unsere nächsten Arbeitsbereiche liegen:

image140.jpg

Wie Ihr sehen könnt, positionieren wir unsere Geiseln auf der 2. Ebene. Von dort müssen diese dann über verschiedene Wegpunkte (orangefarbene Kreise) zum Zielgebiet gebracht werden, das sich direkt vor dem Brunnen befindet. Soweit zur Vorplanung. Jetzt stürzen wir uns in die Arbeit.
Zunächst fangen wir mit dem Zielbereich an, da es sich dabei um altbekannte Funktionen handelt. Wir erstellen dort nämlich wieder Brush, der komplett mit der Textur "toolsnodraw" belegt ist.

image141.jpg

Dieser Brush dient zur Markierung des Zielgebietes, damit der Spieler weiß, wohin er die Geiseln bringen muss. Deshalb muss er oben drauf noch eine Textur erhalten, die ihn eindeutig kennzeichnet (vgl. Bombenablageplatz). Ich habe hierfür die Textur "decals/hrpoint" verwendet. Vergesst hier wieder nicht, den Fit-Button zu drücken, damit die Textur gleichmäßig ausgerichtet ist.

image142.jpg

Für diese Art der Markierung von Flächen gibt es auch noch eine alternative Methode, die Euch J69L in diesem Tutorial schön ausführlich erklärt. Ich persönlich bevorzuge die vielleicht etwas umständlichere Methode aus meinem Tutorial.
Den Brush versenken wir nun wieder bis auf einen klitzekleinen Überstand im Boden. Ihr könnt den Brush auch wieder über "RMT -> Tansform" drehen, so dass die Grafik in eine sinnvolle Richtung schaut.

image143.jpg

So, das hätten wir schon mal. Jetzt erstellen wir noch einen geräumigen Trigger-Brush über dem Zielgebiet.

image144.jpg

Damit dieser Trigger-Brush jedoch eine Funktion ausüben kann, müssen wir Ihn über "Tie to Entity" wieder in ein Entity mit Namen "func_hostage_rescue" verwandeln. Ihr könnt diesem Objekt auch gleich wieder einen treffenden Namen, wie zum Beispiel "zielpunkt" geben. Eine Namenseintrag ist hier aber nicht zwingend erforderlich.

image145.jpg

Als nächstes wollen wir die Geiseln setzen. Dazu benötigen wir unser Entity-Tool (Shift-E). Anschließend wählen wir unten rechts das Entity "hostage_entity" aus und setzen es über einen Linksklick in das 3D-Fenster.

image146.jpg

Es kann dabei ruhig etwas über dem Boden schweben. Im Gegensatz zu den Spawnpoints wird dieses Objekt nur als roter Würfel angezeigt.

image147.jpg

Nun rufen wir kurz die Properties auf und überprüfen, ob dort unter "Hostage Model" auch der Typ "A" aktiviert ist. Der gewählte Model-Typ hat keinerlei Auswirkungen auf das Gameplay, sondern lediglich auf das Aussehen der Geisel.

image148.jpg

Im Spiel ist unser junger Freund sogar schon zu sehen.

image149.jpg

Wenn Ihr ihn allerdings mit der Benutzen-Taste - in meinem Fall E - ansprecht, antwortet er zwar, folgt Euch aber noch nicht zum Zielgebiet, sondern steht nur dumm herum. Jetzt folgt ein Schritt, der nicht unbedingt nötig ist, aber vorsichtshalber von Euch auch gemacht werden sollte, damit wir später eventuelle Fehler ausschließen können. Wir müssen nämlich noch Wegpunkte setzen, an denen sich die KI (hier die Geisel) orientieren kann. Bei den Wegpunkten handelt es sich um Entities mit Namen "info_node". Diese setzen wir wieder über das Entity-Tool in unser 3D-Fenster.

image150.jpg

Den ersten Wegpunkt setzen wir dazu ganz nah an unsere Geisel, damit sie diesen auf keinen Fall übersehen kann.

image153.jpg

Schaut Euch jetzt noch mal kurz den Screenshot ganz am Anfang des Tutorials an. Dort seht Ihr alle Stellen, an denen die Geisel vom geraden Weg abbiegen muss. Insbesondere an diesen Stellen sollte immer ein Wegpunkt zur Orientierung sein. Auch müsst Ihr beachten, dass die Geisel immer vom letzten Standpunkt aus den nächsten Wegpunkt sehen können muss. Sonst verliert sie die Orientierung und kann dem Spieler unter Umständen nicht folgen. In unserem Level würde ich die Wegpunkte wie folgt setzen (Draufsicht im 3D-Fenster):

image152.jpg

Merkt Euch: Setzt lieber zu viel dieser Wegpunkte, als zu wenige. Zwingend sind diese aber nicht erforderlich, da bei mir die Map auch ohne Wegpunkte problemlos funktioniert. Allerdings - das werdet Ihr zugeben - handelt es sich dabei auch noch um ein sehr einfaches Level. Deshalb setzt diese Wegpunte in Euren Projekten unbedingt, da diese vermutlich sehr viel komplexer sind.
Jetzt können wir die Map wieder berechnen lassen und in "CS: Source" starten. Dummerweise werden wir dort feststellen, dass die Geisel immer noch zu faul zum Bewegen ist. Das liegt daran, dass für die Geisel momentan noch nicht klar ist, wo Wände, Treppen oder Türen sind. Man kann das mit einem blinden Menschen vergleichen, der in eine völlig fremde Umgebung gesetzt wurde. Im echten Leben wird dieser Blinde seine Umgebung "abtasten", um zu erfahren, wie diese aufgebaut ist. Auch "CS: Source" muss dies zunächst durchführen. Dazu öffnen wir über die ESC-Taste das Menü und geben rechts in der Konsole folgenden Befehl ein:

nav_generate


Anschließend berechnet die Engine kurz die Umgebung für unsere "blinde" Geisel. Wie Ihr auf dem nachstehenden Screenshot sehen könnt, legt das Spiel eine Datei mit Namen "beispielmap15.nav" an, über die sich unsere Geisel von nun an orientiert.

image154.jpg

Falls Ihr später einmal Eure Map im Internet oder unter Freunden verbreiten möchtet, muss diese Datei beigefügt werden. Auch sie findet Ihr - wie auch die BSP-Datei - im Maps-Verzeichnis.