Community-Tutorials (Source)

Npc Assault

Hier möchte ich mich mit einer Alternative zur scripted_sequenz beschäftigen und zwar mit den entitys: ai_goal_assault, assault_rallypoint und assault_assaultpoint.

Da solch ein System nur im HL² SP Sinn macht, gilt dieses Tutorial nur Für HL² SP.

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, das 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ächsteinmalm solltet ihr euch eine Beispielmap aufbauen, die inetwa so aussieht:

uone008.jpg

Dieser Labyrinth-Artige 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, das die info_nodes dort Platziert werden, wo ihr wollt, das sich die Npc´s bewegen können. Berreiche 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:

uone009.jpg

Die Gelb-Makierten vierecke stellen die einfachen "info_node" Entitys dar, die Rot-Makierten sind Entitys 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, das der npc dort Deckung sucht. Hier sind die info_node_hint´s so eingestellt, das 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, das er hier etwas länger ausharren könnte.). Wichtig ist auserdem, das die einzelnen info_node´s und info_node_hint´s sich gegenseitig sehen können , ansonsten würde ein Riss in der Navigation entstehen und die Npc´s würden diesen Weg meiden.

Habt ihr also erfolgreich die info_node´s und info_node_hint´s auf der Map verteilt, geht es ans eingemachte.

Erstellt 3 npc_combine_s und stellt sie an die Untere Linke Ecke der Map.

uone010.jpg

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 ;) ). Auserdem 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. Diesen Umstand hat zurfolge, das die Npc´s 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 ein assault_assaultpoint.

uone011.jpg

(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.

uone012.jpg

Jetzt gehen wir zurück zu den 3 Combines und Setzen vor die Combines jeweils ein "assault_rallypoint" Entity. Es ist wichtig, das jeder Combine seinen eigenen Rallypoint hat, sonst kommen die Armen nacher durcheinander :D. Sitzen die Rallypoints nun vor den Combines , müssen wir allen drei Rallypoints den selben Namen geben, ich habe sie "ass_rally_1" genannt.

uone013.jpg

Nun muss jeder Rallypoint seinem 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(...bla...).

uone014.jpg

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 Npc´s 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" (oder ein anderer Name, den ihr euch gut merken könnt.)

Actor(s) to affect = "ass_combine_1" (das ist der Name den die 3 Combines sich teilen)

Rally Point Set = "ass_rally_1" (das ist der Name, den sich die drei assault_rallypoints teilen.)

Search Type = "Entity Name" (wenn man es auf Classname umstellt, funkioniert es nicht mehr, anscheihnend muss man dafür das System umbauen, womit ich mich aber noch nicht beschäftigt habe.)

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, sobalt einer der Npc´s Gewehrfeuer wahrnimmt und "Dont´s wait for a cue" = bewirkt, das der Assault unmittelbar nach dem Mapspawn erfolgt, setzt aber vorraus, das "Start Aktive" auf Yes gestellt ist.)

uone015.jpg

---

Nun ist das System, bis auf einen Auslöser Komplett.

Unser Auslöser wird ein normaler func_button werden.

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:

uone016.jpg

Um die Sache noch ein wenig Spannender zu machen, setzen wir in die Nähe der assault_assaultpoint´s der Combines noch 2-3 "npc_citizen"´s und geben ihnen in den Properties unter dem menupunkt "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 (Standard: E) auf den Button drücken)

Bei Fehlern kann man eigentlich nur nocheinmal alles Nachprüfen, ansonsten kann eigentlich nicht viel Schief gehen.

Greez

U-One

Beispielmap ist angehängt