MoH Projektor-Tutorial: Radiant
Radiant
Erstellt im
Radiant drei zusammenhängende Räume, welche ihr mit Türen
verbindet.
Der Erste ist
euer Startraum, wo ihr den Playerstart und später die einzelnen
Trigger für die Ablaufsteuerung einsetzt.
Der Zweite Raum
ist der eigentliche Kinoraum mit Filmleinwand und Projektor.
Der Dritte Raum
ist ein „Hilfsraum“ zum „Spawnen“ und
„Vorbelichten“ der Filmbilder.

Warum nun 3
Räume werdet ihr euch sicherlich fragen. Im vorherigen Teil
erwähnte ich bereits das Performance-Problem. In einer kleinen
Testmap ist dies noch kein sonderlich großes Problem,
allerdings in
einer komplexen Map mit massig Enemy’s und anderer Action wird
das Game schon erheblich beansprucht. Daher haben wir die
Steuer-Trigger für das verschieben der Pic’s auf die
Filmleinwand und das abwechselnde Ein- bzw. Ausblenden der selbigen
in verschiede Bereiche unserer Kampagnenmap gelegt. Hier waren die
Trigger so angeordnet, dass der Player die Trigger in Momenten
auslöst, wo nur eine geringe Action herrscht.
Was brauchen wir
nun an Elementen für unseren Kinofilm.
1.) Die
Trigger zum Steuern des Ablaufs
1.1)
Entity:
trigger_once
Key:
$targetname
Value:
projector_trigger
Dieser Trigger
startet später die Projektoranimationen wie Sound,
Projektorlampe (Corona) und den Lichtstrahl (Beam)
Platziert diesen
so in den Startraum, dass der Player diesen Trigger durchlaufen muß.
1.2)
Entity:
trigger_once
Key:
$targetname
Value:
movie_effect_trigger
Dieser Trigger
startet später den thread, der für das Ein- und Ausblenden
der Bilder, den eigentlichen Film, verantwortlich ist.
Plaziert diesen
ebenfalls so in den Startraum, dass der Player diesen Trigger
durchlaufen muß. Allerdings sollte dieser Trigger erst als
zweites durchlaufen werden, also nach dem durchschreiten des
„projector_trigger“.
2.) Die
Brushes für die Bilder
Hierfür
wählte ich je darzustellendem Bild einen Brush in den
Dimensionen x = 128, y = 1 und z = 88 units, die wir nach der
Erstellung zum „script_object“ machen.

Die Abmessungen
128 x 88 entsprechen etwa einem Verhältnis von 1:2,75 des
Originalbildes, somit werden Verzerrungen beim Texturfiting
vermieden.
Ferner editieren
wir das Entitymenü unseres Brushes wie folgt:
Entity:
script_object
Key:
$targetname
Value:
projector_face0
Spawnflags:
1
= not solid
Für das
zweite Bild ändern wir den targetnamen auf projector_face1,
projector_face2 für das dritte usw.
Am Ende sollten
wir dann insgesamt 40 brushes haben
Hilfreich ist
es, wenn man zunächst alle brushes nebeneinander erstellt.

Jeden dieser
Brush’s belegen wir zunächst allseitig mit der
„NoDraw“-Textur.

Jetzt markieren
wir die sichtbare Seite des ersten script_object-brushes mit
[Umschalt+STRG+LMT] und geben im Textursuchfeld das Schlüsselwort
„meinfilm“ ein. Nach kurzer Zeit stehen unsere nach
Abschnitt 1 erstellten Bilder zur Auswahl. Die selektierte Seite
belegen wir dann mit Bild1 und wählen diesen wieder ab, wechseln
zum zweiten Brush und wiederholen die Texturauswahl mit dem zweiten
Bild usw.

Wenn wir alle
Brushes einseitig belegt haben platzieren wir alle brushes in den,
von mir als Belichtungsraum benannten, dritten Raum. Alle 40 brushes
werden dann exakt übereinandergeschoben, so dass sie im Radiant
nur als ein einziger zu erkennen sind.
Zur
Erleichterung habe ich in die Beispiel.pk3 ein Prefab mit den 40
Einzelbrushes nebeneinander hinzugepackt.
3.)
Lichtquelle zum Vorbelichten
Vor unsere
script_objects-brushes setzen wir mit etwas Abstand ein light-entity
mit den Einstellungen:
Classname:
light
Angles:
0 270 0
bzw. Werte nach der Ausrichtung eurer Map einstellen
Radius:
90
Mittels dieses
Light’s werden alle Bilder beim Mapspawn in diesem Raum
belichtet, behalten diese Belichtung bei und leuchten daher schön
im Dunkeln, wenn wir sie in die Endposition verschieben.
4.)
Filmleinwand
Im zweiten Raum,
dem Kinosaal werden wir nun einige entity’s setzen, um das
Ambiente eines Filmsaals ein wenig nachzuempfinden.
Es wird keine
eigentliche Leinwand benötigt, da die Bildbrushes selbst
dargestellt werden. Also so Geschichten wie Rahmen und Hintergrund
sind optische Verzierung und können individuell gestalltet
werden. Wir benötigen lediglich ein „script_origin“,
an den später die Bildbrushes hin verschoben werden.
Dieses
script_origin platzieren wir exakt an die Wand, wo später der
Film erscheinen soll. Einträge im Entity-Menü wie folgt:
Classname:
script_origin
$targetname:
movie_start_node
Angle:
90
oder Wert nach eurem Ermessen und Lage der Projektionsfläche
5.) Der
Projektor
5.1)
Projektor
Hierbei handelt
es sich um den bereits in der MoH:AA erschienenen Version des
„static/projector.tik“. Diesen setzt bitte in einiger
Entfernung direkt vor das Leinwand-script_origin. Achtet dabei auch
auf Höhenposition des Projektors.
Nach dem
Ausrichten zum Leinwand-script_origin sind keine weiteren Einträge
im Entity-Menü notwendig.
5.2)
Projektorlichtquelle
Nun setzen wir
an die Projektorlampenposition ein script_origin mit folgenden
Werten:
Classname:
script_origin
Model:
static/corona_reg.tik
$targetname:
projector_corona
Scale:
0.70
passt in der Größe besser zum Projektor
Angle:
90
Ausrichtung bitte individuell vornehmen
5.3)
Projektorsoundspeaker
Damit der
Projektor während der Filmwiedergabe auch sein typisches
Geratter wiedergeben kann, platzieren wir innerhalb des Projektors
ein Soundspeaker-entity mit den Einträgen:
Classname:
sound_speaker
$targetname:
projector_speaker
5.4) Der
Lichtstrahl
Eigentlich ist
so ein Projektorlichtstrahle eher ein Lichtkegel, aber ungleich
schwieriger zu bauen und zu texturieren. Aus diesem Grund habe ich
mich entschlossen, hier nur einen waagrecht liegenden Pyramidenstumpf
einzusetzen. Die kleinere Stirnfläche setzen wir vor die
Projektorlichtquelle, die größere Bodenfläche lassen
wir an dem Leinwand_origin enden. Nach dem erstellen machen wir
diesen brush zu einem script_object mit nachfolgenden
Entity-Einträgen:
Classname:
script_object
$targetname:
projector_beam
Als Textur
wählen wir je Fläche „textures/common/withe_volumetric“
aus. Dies ist eine shader-textur, welche über den shader aus
zwei verschieden Bildern zusammengesetzt und im Erscheinungsbild
gesteuert wird.
5.5)
Projektorclip
Als optische
Verzierung kann nun noch der Projektor selbst mit einem „metal-clip“
umbaut werden, damit es auch schön metallisch klappert, wenn man
draufschießt.
5.6)
Film-Aus-Trigger
Wenn wir auf
unseren Projektor schießen, ist die Wahrscheinlichkeit sehr
hoch, das dieser seinen Dienst einstellt und der Film sowie der Sound
„Logischerweise“ erlöschen. Dies regeln wir mit
einem Trigger den wir knapp um den Projektor drumherum bauen. Dieser
Trigger wird als Damage-Trigger eingestellt, löst also bei
Beschuss oder Explosion aus und stoppt später den Scriptablauf
für Projektorlampe, Lichtstrahl und Film.
Die hierfür
notwendigen Entity-Einträge:
Classname:
trigger_multiple
$targetname:
projector_off_trigger
health:
1
sehr niedrig, damit bereits ein einzelner Pistolenschuss zur
Auslösung ausreicht
spawnflags:
128
oder DAMAGE-markieren
5.7) Qualm
Wie jedes andere
elektrische Gerät wird auch unser Projektor anfangen zu
schmorren, wenn er kaputt geht. Dies simulieren wir mit ein wenig
Qualm. Dazu setzen wir innerhalb des Projektormodells ein
Smoke-Entity.
Die
Menüeinträge:
Classname:
addon_fx_smoke_debris
Model:
emitters/debris_smoke.tik
$targetname:
projector_smoke
Scale:
0.50
Mit „scale
0.50“ wird der Qualm verkleinert, sonst sieht es aus, als ob
ihr eine Ölraffinerie in Brand gesetzt habt.
5.8)
Funkenflug
Natürlich
fliegen auch die Funken, wenn’s den Projektor zerstört.
Auch hierfür haben wir eine Möglichkeit, diesen Effekt zu
simulieren. Dazu platzieren wir wiederum innerhalb unseres Projektors
ein weiteres Entity. Diesmal ein „emitters/generic_spark.tik“.
Dessen Menüeinträge:
Classname:
fx_electric_sparks
Model:
emitters/generic_spark.tik
$targetname:
projector_sparks
#set:
500
Scale:
0.70
Hier wird
ebenfalls mit dem „scale-Faktor“ ein realistischeres
Erscheinungsbild des Funkenflugs eingestellt.
5.9)
Steuertrigger für Qualm, Funken und Sound
Damit die
Effekte zu 5.3, 5.7 und 5.8 auch funktionieren, benötigen wir
noch einen weiteren Trigger, der nach seiner Aktivierung den Sound
stoppt, den Qualm und die Funken startet. Letztere zwei werden dann
automatisch nach einiger Zeit wieder gestoppt und später
gelöscht.
Dazu benutzen
wir wieder einen Trigger_multiple, den wir ebenfalls um den Porjektor
drumherum legen.
Auch hier müssen
wir im Entity-Menü einige Einträge vornehmen.
Classname:
trigger_multiple
$targetname:
projector_off_trigger_effect
#set:
500
health:
1
sehr niedrig, damit bereits ein einzelner Pistolenschuss zur
Auslösung ausreicht
spawnflags:
128
oder DAMAGE-markieren
Da der Projektor
mit allen seinen Bestandteilen doch recht umfangreich ist, hier
nochmals im Bild zur Übersicht.


So, dann mal
alles speichern und mal compilen. Zum Testen kann man ja schon mal
die MAp starten. Allerdings ist vom Film noch nicht viel zu sehen.
Dies regeln wir jetzt im Map-Script.
Einleitung
Vorbereitung
Shader
Radiant
Map-Script
Steuer-Script
Nachwort
© Das bbmd-Team / cubus 2005
|