|
HL2-SP: NPC-Angriff |
|
|
Hier möchte ich mich mit einer Alternative zur scripted_sequenz beschäftigen und zwar mit den Entities: ai_goal_assault, assault_rallypoint und assault_assaultpoint.
Dieses Tutorial funktioniert nur mit dem HL² Singleplayer.
Im Gegensatz zu der Scripted_sequenz, ist ein System mit den oben genannten Entitys dynamischer und bietet mehr "Bewegungsfreiheit" für den npc. Der Nachteil bei einer scripted_sequenz ist, dass die AI des betroffenen NPC´s für die Dauer der Sequenz ausgeschaltet ist. Diesen Nachteil hat man bei dem System, welches ich euch vorstellen und erklären möchte, nicht.
Zunächst einmal solltet ihr euch eine Beispielmap aufbauen, die in etwa so aussieht:
Dieser labyrinthartige Aufbau wird später zu Demo-Zwecken benötigt, kann aber auch weggelassen werden.
Wenn ihr soweit seid, geht es daran, eine Navigation aufzubauen. Diese bauen wir mit dem Entity "info_node" auf. Es ist wichtig, dass die info_nodes dort Platziert werden, wo ihr wollt, dass sich die Npcs bewegen können. Bereiche ohne einen info_node werden von den Npc´s Navigationstechnisch ignoriert. Die info_nodes können also getrost als Wegpunkte bezeichnet werden.
So sollten die info_nodes auf dieser Map platziert werden:
Für Bild klicken!
Die gelb markierten Vierecke stellen die einfachen "info_node" Entitys dar, die rot markierten sind Entities namens "info_node_hint". Sie sind spezielle Nodes auf denen Npc´s gewisse Tätigkeiten durchführen können. Während eines Gefechtes sucht ein Npc ständig nach Deckung. Ein info_node_hint kann so eingestellt werden, dass der npc dort Deckung sucht. Hier sind die info_node_hint´s so eingestellt, dass sie eben diese Deckungsmöglichkeiten den Npc´s zeigen.
Dafür gehen wir bei den info_node_hints in die Properties und gehen unter den Menupunkt "Hint". Dort suchen wir uns aus der Liste "Crouch Cover Medium" oder "Crouch Cover Low" aus. Beide Einträge unterscheiden sich lediglich in der Deckungssicherheit (Low = Weniger Deckung, hier wird der Npc also nicht sehr lange verweilen und Medium = etwas mehr Deckung, hier weiß der Npc, dass er hier etwas länger ausharren könnte.). Wichtig ist außerdem, dass die einzelnen info_nodes und info_node_hints sich gegenseitig sehen können, ansonsten würde ein Riss in der Navigation entstehen und die Npcs würden diesen Weg meiden.
Habt ihr also erfolgreich die info_nodes und info_node_hints auf der Map verteilt, geht es ans Eingemachte.
Erstellt drei npc_combine_s und stellt sie an die untere linke Ecke der Map.
Wählt nun alle gleichzeitig aus und gebt ihnen alle den selben Namen, z.b. "ass_combine_1" (nein, "ass" steht nicht für das Englische Wort Arsc... sondern für assault ;) ). Außerdem ist es vorteilhaft, den Combines den selben "Squad Name" zu geben. Dazu gehen wir in den Properties der Combines unter den Eintrag "Squad Name" und geben bei allen drei den selben Namen ein, z.b. ass_combine_squad_1. Diese Gruppierung hat zur Folge, dass die Npcs mit dem selben Squad Name Informationen über ihren derzeitigen Feind austauschen und Positionsdaten durchgeben usw...
Nun gehen wir zu den Stellen, zu denen die Combines nacher rushen sollen und setzen genau auf diese Stellen einen assault_assaultpoint.
(Auf dem Bild sind alle drei Assaultpoints zusammen ausgewählt, um sie deutlicher erkennen zu lassen.)
Nun geben wir jedem assault_assaultpoint unterschiedliche Namen. Ich habe sie "ass_assault_1" "ass_asault_2" und "ass_asault_3" genannt.
Jetzt gehen wir zurück zu den drei Combines und Setzen vor die Combines jeweils ein "assault_rallypoint" Entity. Es ist wichtig, dass jeder Combine seinen eigenen Rallypoint hat, sonst kommen die Armen nacher durcheinander. Sitzen die Rallypoints nun vor den Combines , müssen wir allen drei Rallypoints den selben Namen geben, ich habe sie "ass_rally_1" genannt.
Für Bild klicken!
Nun muss jeder Rallypoint seinen eigenen assault_assaultpoint zugewiesen bekommen. Setzen wir z.b. bei dem ersten Rallypoint unter den Properties den Eintrag "Assault Point" auf ass_assault_1 (der Name des ersten assault_assaultpoint), bei dem zweiten auf ass_assault_2(der Name des zweiten assault_assaultpoint) und bei dem dritten auf ass_assault_3...
Wenn ihr es bis hier hin richtig gemacht habt, sollten nun die jeweiligen Rallypoints mit einer Violetten-Linie mit ihren Assaultpoints verbunden sein.
Ihr habts fast geschaft :).
Jetzt müssen wir ein weiteres Entity setzen und zwar das "ai_goal_assault". Dieses Entity Steuert die ganze Angelegenheit und bestimmt, welche Npcs welche Rallypoints benutzen.
Setzt es der Übersichtshalber zu den 3 Combines und ihren Rallypoints. Das ai_goal_assault wird Folgendermaßen eingestellt:
Name = "ass_trigger_1"
Actor(s) to affect = "ass_combine_1"
Rally Point Set = "ass_rally_1"
Search Type = "Entity Name"
Start Aktive = "Yes"
Assault Cue = "Entity System Input" (Startet den Assault durch einen Input des Entity I/O Systems ansonsten ist hier noch auszuwählen zwischen "gunfire" = Der Assault beginnt, sobald einer der Npcs Gewehrfeuer wahrnimmt und "Don't wait for a cue" = bewirkt, das der Assault unmittelbar nach dem Mapspawn erfolgt, setzt aber vorraus, das "Start Aktive" auf Yes gestellt ist.)
Für Bild klicken!
Nun ist das System, bis auf einen Auslöser komplett.
In unser Fall wird es sich dabei um einen einfachen func_button handeln.
Dazu erstellen wir einen Brush, belegen ihn mit einer Textur (hier verwende ich die Textur "dev/dev_measureswitch03") und machen ihn per Tie to Entity zu einem func_button.
Bei den Flags des func_buttons aktivieren wir noch "Don´t move" und setzen unter dem Reiter "Outputs" folgendes:
Für Bild klicken!
Um die Sache noch ein wenig spannender zu machen, setzen wir in die Nähe der assault_assaultpoints der Combines noch 2-3 "npc_citizen" und geben ihnen in den Properties unter dem Menüpunkt "Weapon" eine Waffe (lasst lieber die Finger von Beerbottle und Beerbottle2, als ich diese vor einiger Zeit ausprobierte, gab es einen Total-Absturz meines HL², nehmt statt dessen lieber etwas normales wie SMG1 oder AR2).
So, nun wieder einmal das ganze durch den Compiler drehen und das Ergebniss bestaunen (um den Assault nun zu Starten, muss man selbstverständlich mit +use auf den Button drücken)
Bei Fehlern kann man eigentlich nur noch einmal alle Namen und Verknüpfungen durchgehen, ansonsten kann eigentlich nicht viel schief gehen.
Alternativ könnt ihr euch auch meine Beispielmap anschauen:
Download!
Greez
U-One |
|
|
U-One |
|
|