MONSTER EINSETZEN
Autor: Fragpoint
Downloads: Beispielmap 17
Nachdem wir unseren Raum für das Monster erstellt und mit Nebel versehen haben, wollen wir nun auch noch unseren Pinky reinsetzen. Macht dazu einen Rechtsklick in die Draufsicht und wählt dort aus einer ewig langen Liste "monster -> monster_demon_pinky" aus.

Gleich danach erscheint das Monster im Raum. Wir können das nun noch schön mittig in seine Behausung setzen, indem wir es wie bei den Brushes verschieben.

Das Monster soll nun direkt zum Eingang blicken. Welche Blickrichtung es aktuell hat, sehen wir im 3D-Fenster. Ausrichten können wir das wieder über die Gradanzeigen im Entity-Fenster (N-Taste).

Wenn wir uns den Pinky jetzt im Spiel anschauen, hat er eine - wie soll ich sagen - grau gefärbte Oberfläche. Dies wird durch den Nebel verursacht, den wir gesetzt haben. Deshalb verkleinern wir den Nebel und schieben in nach unten, so dass dieser nur noch die Füße des Pinkys berührt. Beachtet aber, dass das Entity selbst nicht außerhalb des Raumes liegt!

Das war es schon, denn das Monster wird Euch nun selbständig angreifen, sobald Ihr von ihm gesichtet wertet. Verfolgen wird es Euch nicht, da unser Gang für den Pinky zu eng ist. Ist schließlich eine Testmap und wir wollen nicht ständig ein Monster auf den Fersen haben.

Naja, eigentlich sind wir nur fast fertig... Jetzt gehen wir nämlich noch auf ein einige dutzend Entity-Befehle ein, die für Monster aller Art verwendet werden können. Leider ist die Liste auch noch nicht vollständig, so dass ich für Eure Mithilfe dankbar wäre.
KEY: noDamage
VALUE: Zahlenwert 0 oder 1
Setzt ihr diesen Wert, nimmt das Monster durch Euren Beschuss keinen Schaden. Es ist also unsterblich.
KEY: ambush
VALUE: Zahlenwert 0 oder 1
Wir dieser Wert gesetzt, erwacht das Monster erst dann zum Leben, wenn es den Spieler sieht. Vorher verhält es sich ruhig.
KEY: enemy
VALUE: Charakter-Name (z.B. monster_demon_pinky_1)
Über diesen Befehl kann man den Namen des Objektes (zum Beispiel eines anderen Monsters) angeben, den dieses Monster angreifen soll.
KEY: teleport
VALUE: Zahlenwert 0 oder 1
Wenn das Monster über einen Trigger aktiviert wird, beamt es sich in den Raum. Diesen Befehl brauchen wir am Ende des Tutorials nochmals. Deshalb die Rotfärbung.
KEY: wakeup_target
VALUE: Entityname
Bei Value muss der Name eines Entities eingegeben werden (z.B. func_door_1), zusätzlich muss beim Monster der Key "ambush" aktiviert sein (Key:ambush Value:1). Dadurch reagiert das Monster nur, wenn es den Spieler wirklich sieht. Wenn man das gemacht hat. wird das Entity ausgelöst, wenn das Monster Sichtkontakt zum Spieler hat (in diesem Fall würde sich die Tür öffnen).
KEY: attack_path
VALUE: ???
Hier kann man dem Monster sagen, dass es nach seiner Aktivierung einem bestimmt Weg folgen soll. Dieser wird mit path_corners abgesteckt.
KEY: stay_on_attackpath
VALUE: Zahlenwert 0 oder 1
Egal was passiert, das Monster bleibt auf dem vorbestimmten Weg.
KEY: anim
VALUE: ???
Animation die ausgeführt wird, wenn das Monster erscheint.
KEY: num_cinematics
VALUE: Werte anim1, anim2 odwer anim3
Spiel offenbar auch Animationen ab, vermutlich für Zwischensequenzen.
KEY: cinematic_no_hide
VALUE: Zahlenwert 0 oder 1
DEr Charakter wird nach Ende der Animation nicht ausgeblendet.
KEY: on_activate
VALUE: ???
Gibt die Animation an, die abgespielt werden soll, wenn das Monster den Spieler sieht. Wird dieser Wert nicht gesetzt, greift das Monster automatisch an.
KEY: on_activate_blend
VALUE: Zahlenwerte
Gibt die Frames an, mit der die Animation wiedergegeben werden soll.
KEY: trigger_anim
VALUE: ???
Funktion unbekannt
KEY: wake_on_attackcone
VALUE: Zahlenwert 0 oder 1
Das Monster reagiert erst, wenn sich der Spieler innerhalb seines Angriffsradius befindet. Es reagiert aber auch auf Beschuss oder wenn es über einen Trigger aktiviert wird.
KEY: walk_on_trigger
VALUE: Zahlenwert 0 oder 1
Das Monster folgt seinem Weg, wenn es getriggert wurde, aber ist nicht angriffslustig. Die Befehle "attack_path" und "trigger" dürfen nicht zusammen mit diesem Wert gesetzt werden.
KEY: ignore_flashlight
VALUE: Zahlenwert 0 oder 1
Das Monster reagiert nicht darauf, wenn es von der Taschenlampe angestrahlt wird.
KEY: trigger
VALUE: Zahlenwert 0 oder 1
Das Monster ist nur angriffslustig, wenn es getriggert oder verletzt wird. Es greift nicht an, wenn es den Spieler sieht.
KEY: spawner
VALUE: Zahlenwerte 0-X
Wenn das Monster durch einen Trigger aktiviert wird, kann hierüber bestimmt werden, wie oft immer wieder ein neues erscheinen soll, wenn jemand durch den Trigger läuft.
KEY: spawn_target
VALUE: ???
Veranlasst das Monster, denjenigen anzugreifen, der den Trigger von "Spawner" ausgelöst hat.
KEY: no_idle_chatter
VALUE: Zahlenwert 0 oder 1
Das Monster ist still und gibt keinen Laut von sich.
KEY: walk_on_sight
VALUE: Zahlenwert 0 oder 1
Soweit ich das verstehe, erlaubt dieser Wert dem Monster, auf den Spieler zuzugehen, bevor die Animation zu Ende ist.
KEY: no_sight
VALUE: Zahlenwert 0 oder 1
Das Monster erwacht nicht, wenn es den Spieler sieht, reagiert jedoch auf Geräusche oder Trigger.
KEY: target
VALUE: path_.... Entities
Gibt z. B. an, welchen Path-Corner das Monster auf einer bestimmten Strecke zuerst ansteuern soll.
KEY: wait
VALUE: Zahlenwert in Sekunden
Gibt an, wie lange das Monster warten soll, bevor es einen vorgegebenen Weg abläuft.
KEY: neverdormant
VALUE: Zahlenwert 0 oder 1
Der Raum bzw. Map wird beim Rendering in bestimmte Map/Raum-Sektionen unterteilt. Dieser Wert gibt dann praktisch an, dass das Monster nicht steht/still ist, obwohl der Spieler es innerhalb der für ihn einsehbaren Raumsektionen noch nicht sehen kann. Es ist also immer "aktiv", wenn der Wert auf 1 steht.
KEY: ignore_obstacles
VALUE: Zahlenwert 0 oder 1
Gibt an, dass das Monster keinen Hindernissen ausweicht. Sollte aber nur für Zwischensequenzen verwendet werden.
KEY: ignore_lostcombat
VALUE: Zahlenwert 0 oder 1
Lässt das Monster nicht verschwinden, wenn es den Spieler nicht mehr erreichen kann.
KEY: alt_path1, alt_path2 und alt_path3
VALUE: ???
Eine alternative Weg, den das Monster ablaufen kann.
KEY: noshadows
VALUE: Zahlenwert 0 oder 1
Schaltet die Schattenberechnung des Monsters komplett aus.
KEY: animate_z
VALUE: Zahlenwert 0 oder 1
Hebt die Schwerkraft für das Monster auf, wenn es erwacht (nicht sicher, ob diese Annahme stimmt).
KEY: kick_force
VALUE: Zahlenwerte
Gibt an, wie viel Kraft das Monster hat, um Hindernisse aus dem Weg zu räumen.
KEY: team
VALUE: Zahlenwerte
Vergebt ihr zum Beispiel mehren Monstern den gleichen Wert beim Befehl "team", gehören diese zu einer Gruppe und attackieren den Spieler gemeinsam.
KEY: rank
VALUE: Zahlenwert 0 oder 1
Das Monster schlägt nur gegen Mitglieder aus seinem Team zurück, die ihn angreifen, wenn es selbst stärker ist, wie die Angreifer. Tragt ihr hier 0 ein, wird es niemals einen Angriff erwidern.
KEY: turn_rate
VALUE: Zahlenwerte
Gibt an, um wie viel Grad sich ein Monster je Sekunde drehen kann.
KEY: mass
VALUE: Zahlenwerte
Gibt die Masse, also das Gewicht des Monsters an.
KEY: ragdoll
VALUE: ???
Gibt an, mit welcher Animation das Monster sterben soll. Diese sind in Datein mit der Endung .AF gespeichert.
KEY: ragdoll_slomoStart
VALUE: Zahlenwerte
Grundwert ist hier -0.2. Darüber wird die Startgeschwindigkeit der Sterbeanimation angegeben.
KEY: ragdoll_slomoEnd
VALUE: Zahlenwerte
Grundwert ist hier 1.0. Darüber wird die Endgeschwindigkeit der Sterbeanimation angegeben.
Auf die weiteren ragdoll-Befehle gehe ich hier nicht mehr ein, da die Liste langsam aber sicher unübersichtlich wird und diese hoffentlich nicht alle von Euch gebraucht werden.
KEY: attac_accuracy
VALUE: Zahlenwerte
Maximale schräge Position, aus der ein Monster seine Raketen abfeuern kann.
KEY: attack_cone
VALUE: Zahlenwerte
Sozusagen der Angriffsradius des Monsters in dem es seine Waffen einsetzen kann.
KEY: attack_target
VALUE: ???
Funktion unbekannt. Vermutlich kann man hier die Waffe angeben, die benutzt werden soll.
KEY: melee_range
VALUE: ???
Funktion unbekannt
KEY: projectile_height_to_distance_ratio
VALUE: Zahlenwerte
Gibt die maximale Höhe, bis zu der ein Geschoss geworfen/geschossen werden kann.
KEY: talks
VALUE: ???
Monster - sofern ihnen das möglich ist - können sich unterhalten.
KEY: pain_threshold
VALUE: Zahlenwerte
Wie viel Schaden ein Monster nehmen kann, bevor eine Schmerz-Animation abgespielt wird.
KEY: damage_zone XXXXX
VALUE: ???
Funktion unbekannt
KEY: damage_scale XXXXX
VALUE: ???
Funktion unbekannt
KEY: bone_leftEye
VALUE: ???
Funktion unbekannt
KEY: bone_rightEye
VALUE: ???
Funktion unbekannt
KEY: af_push_moveables
VALUE: ???
Funktion unbekannt
KEY: blink_min
VALUE: Zahlenwerte
Minimale Zeitangaben, bis die Augen des Monsters blinzeln.
KEY: blink_max
VALUE: Zahlenwerte
Maximale Zeitangabe, bis die Augen des Monsters blinzeln.
KEY: fly_offset
VALUE: ???
Funktion unbekannt
KEY: fly_speed
VALUE: ???
XXX
KEY: fly_bob_strength
VALUE: ???
Funktion unbekannt
KEY: fly_bob_vert
VALUE: ???
Funktion unbekannt
KEY: fly_bob_horz
VALUE: ???
Funktion unbekannt
KEY: def_projectile
VALUE: ???
Funktion unbekannt
KEY: num_projectiles
VALUE: Zahlenwerte
Anzahl der Projektile/Geschoss, die ein Monster in einer bestimmten Zeit abfeuern kann.
KEY: projectile_spread
VALUE: Zahlenwerte
Streuweite der Projektile/Geschosse, die das Monster abfeuert.
KEY: bone_focus
VALUE: ???
Funktion unbekannt
KEY: look_min
VALUE: Zahlenwerte
Minimaler Drehwinkel des Kopfes des Monsters.
KEY: look_max
VALUE: Zahlenwerte
Maximaler Drehwinkel des Kopfes des Monsters.
KEY: look_joint jointname
VALUE: ???
Funktion unbekannt
KEY: eye_turn_min
VALUE: Zahlenwerte
Gibt an, wie weit sich die Augen minimal drehen können, bevor sich der Kopf dreht.
KEY: eye_turn_max
VALUE: Zahlenwerte
Gibt an, wie weit sich die Augen maximal drehen können, bevor sich der Kopf dreht.
KEY: eye_horizontal_offset
VALUE: ???
Funktion unbekannt
KEY: eye_verticle_offset
VALUE: ???
Funktion unbekannt
KEY: eye_focus_rate
VALUE: Zahlenwerte
Gibt an, wie schnell sich die Augen auf das Ziel ausrichten.
KEY: head_focus_rate
VALUE: Zahlenwerte
Gibt an, wie schnell sich der Kopf auf das Ziel ausrichtet.
KEY: focus_align_time
VALUE: ???
Funktion unbekannt
KEY: mtr_flashShader
VALUE: ???
Funktion unbekannt
KEY: flashColor
VALUE: ???
Funktion unbekannt
KEY: falsh_Radius
VALUE: ???
Funktion unbekannt
KEY: flashTime
VALUE: ???
Funktion unbekannt
KEY: use_aas
VALUE: Dateiangabe
Hier wird angegeben, welches .AAS-File für die Navigation des Monsters benutzt werden soll.
KEY: use_combat_bbox
VALUE: Zahlenwert 0 oder 1
Hier kann man festlegen, ob für Schäden die Per-Poly-Hit-Detection verwendet werden soll, oder einfach eine simple Box um das Monster als Trefferzone gilt.
KEY: offsetModel
VALUE: ???
Funktion unbekannt
KEY: def_attach
VALUE: ???
Funktion unbekannt
KEY: head
VALUE: ???
Funktion unbekannt
KEY: eye_height
VALUE: ???
Funktion unbekannt
KEY: fov
VALUE: Zahlenwert
Sichtwinkel des jeweiligen Monsters, in dem das Monster den Spieler sehen kann.
KEY: mtr_splat_flesh
VALUE: ???
Welches Material/Textur soll bei Blut angezeigt werden.
KEY: mtr_wound_flesh
VALUE: ???
Welches Material/Textur soll bei Wunden angezeigt werden.
KEY: smoke_wound_flesh
VALUE: ???
Raucheffekt, der aus den Wunden aufsteigt?
KEY: gravityDir
VALUE: ???
Funktion unbekannt
KEY: blockedRadius
VALUE: ???
Funktion unbekannt
KEY: blockedMoveTime
VALUE: ???
Funktion unbekannt
KEY: blockedAttackTime
VALUE: ???
Funktion unbekannt
So, zum Abschluss wollen wir nach all der grauen Theorie noch etwas in die Praxis umsetzen. Wir begeben uns dazu wieder in unseren 2. Raum (der mit der Treppe). Dort setzen wir zwei neue Monster. Eines am Ende der Treppe, das andere am Anfang der Treppe.

Ferner setzen wir da, wo die Treppen einen Knick macht, einen großen trigger_once (wir erinnern uns), durch den der Spieler durchlaufen und die Monster erwecken soll. Einen "trigger_once" benötigen wir wieder, weil die von uns gewünschte Aktion nur einmal ausgeführt werden soll.

Wie Ihr seht, habe ich den Trigger bereits mit den beiden Monstern verbunden. Beachtet wieder, dass ihr zuerst den Trigger markiert, dann eines der Monster und dann erst Strg-K drückt. Dies wiederholt Ihr anschließend auch für das andere Monster.
Bei den Monstern tragen wir anschließend jeweils noch folgenden Befehl ein, der oben in meiner Liste extra rot markiert ist.

Betritt der Spieler nun die Map, wird er an den beiden benannten Punkten keine Monster sehen und sich in Sicherheit wiegen. Die Monster und der Trigger sind für ihn noch unsichtbar. Erst wenn der Trigger durchschritten wird, weil er den Rocket-Launcher will, teleportieren sich die Monster in das Level.

Doch gehen wir jetzt ein paar Schritte weiter, nämlich durch den von uns gesetzten Trigger, um zu testen, ob sich die beiden Monster wirklich herbeamen.

Während des Beamens erfolgt bereits eine sehr schöne Animation, die automatisch mit Sound untermalt ist. Dumm ist nur, dass der Spieler lediglich den Imp auf der Plattform im Auge hat und sich der fette Zombie von hinten anschleichen kann bzw. der Spieler diesem bei der Flucht in die Arme läuft. Aber das ist ja so gewollt *g* Ich habe in unserer Beispielmap übrigens noch eine Shotgun mit ausreichend Munition beim Starpunkt gesetzt, damit wir uns besser gegen diese Übermacht verteidigen können.