Fausts Cutscene System

Jetzt geht’s los!

Man stelle sich nun vor, dass man eine Zwischensequenz in sein Modul einbauen möchte in dem sich 2 Leute treffen: Der Spieler und ein NPC, welcher hier mal Fritz genannt werden soll. Das ganze soll passieren, wenn der Spieler über einen Trigger läuft.

Folgende Dinge sollen in dieser Scene passieren:

Scene

Aktionen                                Dauer der Aktion   Scriptbefehl	
1. Fritz nähert sich dem Spieler        5 sek.             ActionMoveToObject	

2. Fritz und Spieler sagen "Hallo."     3 sek.             ActionSpeakString	

3. Fritz verbeugt sich und sagt er
müsse leider ersteinmal weg, weil er                       ActionPlayAnimation
keine Zeit hat                          6 sek.             ActionSpeakString

4. Spieler nickt und geht weg           6 sek.             ActionPlayAnimation
                                                           ActionMoveToObject

WICHTIG: Vergleiche diese Tabelle am Ende mit dem Actionscript, dass (nur) die Aktionen des Spielers, beschreibt!

Was wissen wir nun über die Scene:

  • 1. Der Spieler kommt darin vor.
  • 2. Die Scene soll an der Stelle stattfinden, wo der Spieler einen Trigger ausgelöst hat.
  • 3. Es nimmt als weiterer Schauspieler (Actor) neben dem Spieler (also NPC Actor) nur Fritz an der Scene teil. Sein Tag sei jetzt einfach mal "Fritz"
  • 4. Die Sequenz besteht aus 4 Teilscenen.
Weiterhin legen wir noch 2 Dinge fest:

  • 5. Die Scene soll „"ritzTalk" heissen.
  • 6. Die Scene bekommt eine eindeutige Nummer. Da wir bei 2000 anfangen wollen und das unsere erste Scene ist, bekommt die Scene die Nummer 2000. Nummern von 1001 bis 1008 sind verboten.
Wer den ersten Abschnitt aufmerksam gelesen hat, kann sich eventuel schon denken, warum diese Nummern verboten sind:
Die Nummer 2000, wird die Eventnummer für unsere Zwischensequenz werden. Aber später mehr dazu.

Aus diesen 6 Erkenntnissen können wir folgende Dinge ableiten:

  • Der Spieler soll in der Scene sichtbar sein.
    ( int DevEnter_iPCVis =TRUE; )
  • Die Scene findet dort statt, wo der Trigger ausgelöst wurde, also wird keine Teleportation des Spielers nötig sein. Wäre dies anders, müsste ein Wegpunkt erstellt werden, der folgendes Tag haben muss:
    "_WP". Das ist in unserem Fall "FritzTalk_WP". Platziert wird der Wegpunkt dort, wo die Scene stattfinden soll.
  • Es wird nur einen NPC Actor geben, der das Tag „Fritz“ hat.
    (string DevEnter_sActors ="Fritz";)

    Nehmen mehrere NPCs teil sieht die Codezeile wie folgt aus:
    (string DevEnter_sActor = „Fritz,Ludwig,Hans,Rolf“)
    Wichtig: es dürfen keine Leerzeichen im String vorkommen!!!
  • Die Scene besteht aus 4 Teilsequenzen.
    (int DevEnter_iSceneCount =4;)
  • Der Name der Scene wird „FritzTalk“ sein.
    (string DevEnter_sName ="FritzTalk";)
  • Die Nummer der Scene ist 2000.
    (int DevEnter_iScene =2000;)
  • Der Spieler löst die Scene durch das Betreten eines Triggers aus.
    Das bedeutet, im OnEnterEvent, kann man den Spieler (das Spielerobject) mit GetEnteringObject heranholen.
    (object DevEnter_oPC = GetEnteringObject();)
Sodele, jetzt wissen wir schon mal eine ganze Menge.
Und aus dem wissen heraus machen wir auch gleich ein Script, dass unsere Zwischensequenz aufruft. Nämlich einfach, indem wir die ganzen Zeilen Code, die wir jetzt gebaut haben aneinanderhängen:
#include „incl_cutscenes“

void main()
{
    if(GetIsPC(GetEnteringObject() && GetLocalInt(OBJECT_SELF, „used“) != 1)
    {
    int DevEnter_iPCVis =TRUE;
    string DevEnter_sActors ="Fritz";
    int DevEnter_iSceneCount =4;
    string DevEnter_sName ="FritzTalk";
    int DevEnter_iScene =2000;
    object DevEnter_oPC = GetEnteringObject();
    InitScene (DevEnter_oPC , DevEnter_iScene, DevEnter_iPCVis,
    DevEnter_iSceneCount, DevEnter_sName, DevEnter_sActors);
    }
}

So, jetzt haben wir schon mal die halbe Miete.

Erstellt von Faust | am 17.07.2007