Artikel » MoHAA Tutorials » Der BBMD-Filmprojektor6: Steuerscript Artikel-Infos
   

MoHAA Tutorials   Der BBMD-Filmprojektor6: Steuerscript
07.01.2006 von cubus

Projektor Teil 6 - Das Steuerungs-Script MoH Projektor-Tutorial: Globales Steuer-Script

Das Steuer-Script

 

Vorneweg möchte ich erwähnen, dass das script nur auf Funktionalität und nicht auf logisches scripten aufbaut. Insofern sieht es in einigen Teilen ein wenig unbeholfen aus. Hier könnte man durch einige wenige scriptzeilen die threads „INIT“, „MOVIE_START“ und „MOVIE_MOVE“ ordentlich verkürzen. Wer also mag kann das tuen und vielleicht seine Version auf unserer Page mal posten!

 

Diese Steuerscript beinhaltet alle notwendigen Threads zum Reibungslosen Ablauf des Projektors mit Bild/Filmwiedergabe, Sound Sowie Qualm und Funkenflug.

 

Im Nachfolgenden seht ihr Auszüge der einzelnen Threads und eine kleine Erklärung der Funktionen.

 

1.) Thread „init“

 

Dieser wird vom Map-Script aus aufgerufen und

 

  • Setzt die level-variabel „level.projector_isOn” auf 0. Solange dieser Wert „0“ ist, wird kein Film gezeigt.

  • Startet das verschieben der einzelnen, vorbelichteten Bilder auf die Leinwandposition

  • Macht die Bilder, das Projektorlicht und den Lichtstrahl unsichtbar

  • Schaltet die Animation des Rauches und des Funkenflugs ab

  • Initialisiert die Trigger

//-------------------------------------------------------------

init:

//-------------------------------------------------------------

            level.projector_isOn = 0

           

            //iprintlnbold "Warten auf Film-Initialisierung"

 

            thread movie_move

           

            $projector_beam hide   

            $projector_corona hide

            $projector_sparks anim stop

            $projector_smoke anim stop

           

            $projector_face0 hide

            $projector_face1 hide

            $projector_face2 hide

usw…….

            $projector_face38 hide

            $projector_face39 hide

           

           

            $projector_trigger thread doprojector

            $movie_effect_trigger thread movie_effect

           

            $projector_off_trigger thread projector_off

            $projector_off_trigger_effect thread projector_off_effect

           

 

end

 

 

 

2.) Thread „doprojector”

 

Die Threadausführung wartet auf Aktivierung durch den “Projector_trigger”, welcher ja im Startraum durchschritten warden muß. Er startet den Projektorsound, das Projektlicht und sorgt dafür,

dass der Projektorlichtstrahl sichtbar wird und ein wenig flackert, solange die Level-Variabel „level.projector_isOn” den Wert „1“ hat.

//------------------------------------------------------------------

doprojector:

//------------------------------------------------------------------

 

            self waittill trigger         

                       

            $projector_speaker loopsound projector

           

            $projector_corona show

           

            level.projector_isOn = 1

           

            while( level.projector_isOn == 1 )

            {                                 

                        $projector_beam hide

                        wait .01

                       

                        if(level.projector_isOn == 1 )

                       

                        {

                                   $projector_beam show

                        }

                       

                        wait .01           

            }

           

            end

 

 

3.) Thread “projector_off”

 

Wird durch den “projector_off_trigger” ausgelöst. Er stellt die Level-Variabel „level.projector_isOn” wieder auf den Wert „0“ und stellt das Projektorlicht und den Lichtstrahl auf unsichtbar.

//-------------------------------------------------------------------

projector_off:

//-------------------------------------------------------------------

           

            self waittill trigger

           

            level.projector_isOn = 0

            $projector_corona hide

           

            $projector_beam hide   

           

 

end

 

4.) Thread “projector_off_effect”

 

Wird durch den “projector_off_trigger_effect” ausgelöst. Er schaltet das Projektorgesurre ab, und startet und beendet die Animation des Qualms und der Funken. Der Rauch wird nach jeweils 10 Sekunden weiter verkleinert und schließlich ganz gelöscht.

//---------------------------------------------------------------------

projector_off_effect:

//---------------------------------------------------------------------

 

            self waittill trigger

           

            $projector_speaker stoploopsound

            $projector_sparks anim start

            wait 0.5

            $projector_smoke anim start

            wait 10

            $projector_smoke scale 0.2

            wait 10

            $projector_smoke scale 0.05

            wait 10

            $projector_smoke anim stop

            wait 2

            $projector_smoke delete

            wait 5

            $projector_sparks anim stop

            wait 1

            $projector_sparks delete

                       

 

            end

 

 

5.) Thread „movie_effect“

 

Wird ebenfalls im Startraum durch den Player ausgelöst. Er startet den thread „MOVIE_START“. Sonst nichts. Warum ich dies so gelöst habe, weiß ich heute nicht mehr, nur ging es irgendwie nicht anders.

//---------------------------------------------------------------------

movie_effect:

//---------------------------------------------------------------------

 

self waittill trigger

 

thread movie_start

 

end

 

 

 

6.) Thread „movie_start“

 

Regelt das Ein- und Ausblenden der bereits auf die Leinwandposition verschobenen script_objects mit den Bildtexturen, unserem Film.

In Abhängingkeit des Variabelnwertes „level.projector_isOn” werden nacheinander alle Befehle abgearbeitet. Sollte sich zwischenzeitlich der Variabelnwertes „level.projector_isOn” auf „0“ ändern, wird augenblicklich die Bilddarstellung gestoppt.

Der Wait-Befehl 0.04 zwischen dem Ein- und dem Ausblenden der Bildträger erscheint zwar zuerst sehr klein, aber bedeutet das innerhalb einer Sekunde 25 Bilder nacheinander dargestellt werden.

25 Bilder pro Sekunde erlauben eine flüssige Darstellung von Bewegungen und liegt etwa in der Framerate von AVI-Files.

 

movie_start:

 

if (level.projector_isOn = = 1)

{

                        $projector_face0 show

                        wait 0.04

                        $projector_face0 hide

                        wait 0.04                     

                       

                        if (level.projector_isOn = = 1)

                        {

                        $projector_face1 show

                        wait 0.04

                        $projector_face1 hide

                        wait 0.04                     

                        }

                        if (level.projector_isOn = = 1)

                        {

                        $projector_face2 show

                        wait 0.04

                        $projector_face2 hide

                        wait 0.04

                        }

usw…..

                        if (level.projector_isOn = = 1)

                        {

                        $projector_face38 show

                        wait 0.04

                        $projector_face38 hide

                        wait 0.04

                        }

                        if (level.projector_isOn = = 1)

                        {

                        $projector_face39 show

                        wait 0.04

                        $projector_face39 hide

                        wait 0.04

                        }

                        if (level.projector_isOn = = 1)

                                   {

                                   goto movie_start

                                   }

                                               else

                                               {

                                              

                                               }

}

 

end

 

 

7.) Thread “movie_move”

 

Dieser Thread wird durch den “INIT-Thread” aufgerufen. Er verschiebt – moveto - die Bildträger vom Beleuchtungsraum an die Leinwandposition, welche durch das script_origin „$movie_start_node.origin“ markiert ist. Speed 500 ist die Verschubgeschindigkeit.

movie_move:

 

                        $projector_face0 moveto $movie_start_node.origin

                        $projector_face0 speed 500

                        $projector_face0 waitmove

                        $projector_face1 moveto $movie_start_node.origin

                        $projector_face1 speed 500

                        $projector_face1 waitmove

                        $projector_face2 moveto $movie_start_node.origin

                        $projector_face2 speed 500

                        $projector_face2 waitmove

usw…..

                        $projector_face38 moveto $movie_start_node.origin

                        $projector_face38 speed 500

                        $projector_face38 waitmove

                        $projector_face39 moveto $movie_start_node.origin

                        $projector_face39 speed 500

                        $projector_face39 waitmove

                       

//                      iprintlnbold "Fertig mit Bilderbewegen!"

                       

end

 

 

Speichert alle eure Einträe in der Datei „cubus_projector.scr“ – oder einer mit beliebigen Namen, im Verzeichnis „mainta/global“ ab.

 

Wenn ihr jetzt nochmals die Map startet, sollte euer Filmchen bereits laufen. Falls ihr ne Waffe dabei habt, könnt ihr ja mal auf den Projektor ballern……….

 

Am Ende des Tutorials erfolgt wie gewohnt noch ein Nachwort

 

 

Einleitung

Vorbereitung

Shader

Radiant

Map-Script

Steuer-Script

Nachwort

 

© Das bbmd-Team / cubus 2005

 



Druckansicht   druckbare Version anzeigen
Seite empfehlen   Seite empfehlen
0 Kommentar(e)   kommentieren
Wertung ø 10,00
1 Stimme(n)
Seitenanfang nach oben