Der BBMD-Filmprojektor4: Radiant
Projektor Teil 4 - 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.
© Das bbmd-Team / cubus 2005