Erstellen einer neuen Szene
Zuerst sollte ich wohl darauf hinweisen das dieses Tutorial möglicherweise etwas zu lang geraten ist und es ist zeitweise vielleicht auch nur schwer zu verstehen. Wenn du das erstemal eine flm Datei öffnet sieht diese wohl wie ein riesiges furchteinflössendes Monster aus, das ging mir am Anfang nicht anders aber desto öfter man damit arbeitet desto mehr erkennt man das sie doch eher harmlos sind.
So welche Programme brauchen wir?
MED um die Dateien zu extrahieren
FLM Reader um die neue Szene erstellen zu können
Blender (oder ein anderes Programm das mit msh Dateien arbeiten kann) Blender wird nicht unbedingt benötigt aber ich rate dringend dazu da es vieles erleichtert.
Wir beginnen indem wir die Datei 023_chair_seated.flm im FLM Reader öffnen, dort klicken wir nun auf Actor ID 696. Dort finden wir die erste Information, womit die Szene beginnt, in diesem Fall ist es die Nummer 697 welche als Next Item ID eingetragen ist. Wir folgen zunächst sämtlichen Next Item IDs so wie es im Bild 1 zu sehen ist bis zum Ende der Szene.
Bild 1
Jetzt lasst uns rausfinden was das alles ist, die Lila Box ist der Actor während er das Set betritt und sich auf den Captains Stuhl setzt. In diesem Fall entscheidet der Branch der zur Roten Box geht über die Stimmung (mood) des Actors, wir wollen hier nur die normale Stimmung nutzen, aber später mehr dazu. Nur die Items in der Roten Box sind am Ende wirklich in der Szene, alles andere sind Dinge die nur im Game eine Rolle spielen, nicht aber für das was letzlich "gefilmt" wird. Branch 712 bringt uns dann zur Grünen Box, diese Box scheint nur dem Regisseur des Films Zeit zu geben zu entscheiden was er nun tun soll, das bringt uns zum Branch 764 und der Orangen Box. das erste Next ID Item im Branch ist ein -1, das wäre das Ende der Szene. Die zweite Option wäre die 699, das würde bedeuten der Regisseur war nicht zufrieden mit dem was die Darsteller abgeliefert haben und will das sie es nochmal machen. Option drei ist die 710, der Actor steht vom Stuhl auf, ->783 dreht sich -> 715 der Actor verlässt das Set da die Szene fertig ist, ->727 ist dann wieder ein -1 und bedeutet die Szene ist vollständig beendet.
Nun da wir wissen welche Items wir brauchen können wir damit beginnen die Szene zu bearbeiten. Wie schon erwähnt wollen wir nur die normale Stimmung verwenden, das bedeutet wir brauchen Branch 2343 nicht, gehen wir also zu Item 787 und ändern die Next Item Id auf 3154. Nachdem wir das erledigt haben, haben wir einige ungenutzte Action, SFX, Type 0 und Type 4 Items die wir für unsere Änderungen nutzen können.
Jetzt sollten wir entscheiden was unser Actor denn tun soll, in diesem Beispiel lassen wir den Actor auf dem Captains Stuhl sitzen, dann aufstehen und ein paar Schritte laufen.
Wir begeben uns zum Item 700 welches dafür verantwortlich ist das der Actor auf dem Stuhl sitzt so wie es bei dieser Szene üblich ist, wir ändern die Next Item ID auf 790 und die ID 13 Reihe von 1 auf 0, wenn wir das nicht machen wird das Next Item unserer Szene nicht gezeigt. Nun gehts zum Item 790, als ActionTE haben wir hier sit_stndrd_2_angry_sit.anm aber das ist nicht was wir hier brauchen. Also auf zu den Text Elements dort finden wir schließlich die ID 22 (sit2std_standard.anm), klingt so als könne dies den Actor aufstehen lassen, also nutzen wir diese. Zurück zum Item 790 und dann mit Doppelklick auf die ActionTE welche wir dann auf 22 ändern. Mittels eines weiteren Klicks auf Item 790 können wir dann die Änderung sehen. Dann geht es weiter indem wir die Next Item ID auf 715 ändern. 715 befand sich in der Orangen Box und war noch in benutzung, aber wir brauchen diesen MoPath nunmal für unsere Änderungen, also ein kurzes Entschuldigung an unseren Actor das er das Set nicht wie vorgesehen verlassen kann nachdem die Szene gedreht wurde
Da die Szene endet nachdem 715 auf 727 linkt sind nun alle Items in der Grünen und der Orangen Box nicht länger in Benutzung, aber keine Panik, wir brauchen sie auch gar nicht mehr. So unser Szenen Pfad selbst ist nun komplett aber noch nicht fertig. Trotzdem können wir die Szene schonmal kurz testen um zu sehen was wir bisher getan haben.
Wir speichern die flm Datei als 023_new_scene.flm ab und verschieben sie hierhin: dein The Movies Ordner\Data\scene\interactions\023
Nun müßen wir dem Spiel nocht sagen das es eine neue Szene gibt, wir exportieren die 023_chair_seated.ini aus dem Spiel und öffnen diese. Die erste Zeile ist der Name der Szene wie sie sich im Spiel nennt, name = scene_chairseated, wir ändern dies auf: name = new_scene
Außerdem müßen wir noch die dritte Zeile bearbeiten: interaction = 023_chair_seated.flm zu: interaction = 023_new_scene.flm
Achtung, es ist sehr wichtig das in dieser Zeile keine Fehler enthalten sind, wenn die ini auf eine flm Datei linkt die es nicht gibt stürzt das Spiel ab.
Die ini speichern wir als: 023_new_scene.ini und verschieben sie hierhin: dein The Movies Ordner\Data\scene\023
So nun können wir das Spiel starten und einen ersten Test der neuen Szene machen.
Der Actor sitzt auf dem Captains Stuhl, steht nach ein paar Sekunden auf und dann hoppla, das wollten wir aber nicht, er verlässt doch tatsächlich das Set bevor die Szene abgedreht wurde, was haben wir denn da falsch gemacht? Gar nichts, wir müßen ihm nur noch sagen wohin er denn laufen soll.
Also zurück zum MoPath 715, diesen sehen wir uns jetzt mal ein wenig genauer an.
Bild 2
Wir wissen bereits das ID 31 die ActionTE ist und die ID 33 das Next Element, jetzt sehen wir mal nach was die andern IDs tun. ID 4, 5 und 6 haben dieselben Koordinaten wie ID 18, 19 und 20.
ID 18, 19 und 20 sind die Koordinaten wo der Actor beginnt dem MoPath zu folgen, also der Start Punkt. ID 21, 22, 23 sind der erste Wegpunkt, zu diesem bewegt sich der Actor vom Startpunkt. ID 24, 25, 25 sind der zweite Wegpunkt zu dem der Actor sich von Wegpunkt eins bewegt. ID 27, 28 und 29 sind der Endpunkt des MoPath zudem sich der Actor von Wegpunkt zwei bewegt.
Die Zahlen dieser IDs scheinen keinem logischen Muster zu folgen, zumindest nicht auf den ersten Blick, werfen wir nun einen Blick auf Bild 3 um zu sehen was sie bedeuten.
Bild 3
Jedes Set hat einen Mittelpunkt, von diesem Punkt aus werden wie in Bild 3 zu erkennen alle Koordinaten berechnet. Alle Sets haben unterschiedliche größen, das bedeutet die Koordinaten der einzelnen Setz können sehr unterschiedlich sein. Hierfür ist es hilfreich wenn ein Programm wie Blender vorhanden ist da wir hiermit die genauen Koordinaten ermitteln können. Soweit ich es bisher herraus gefunden habe entspricht 0,1 etwa einer Fußlänge des Actors, vielleicht hilft diese Information ja jemandem der die msh Dateien nicht öffnen kann.
Bild 4
Bild 4 zeigt die Brücke 2 in Blender, der Set Mittelpunkt ist hier klar zu erkennen. Die Außengrenzen dieses Sets sind:
Y=10,0
Y- = -10,0
X= 9,0
X- = -9,2
Es ist einfach diese heraus zu finden indem wir einen Kubus (Cube) erstellen und einen der Vertics auf den Mittelpunkt setzen, diesen bewegen wir dann zur Außengrenze und lesen die Distanz ab um die wir das Vertic verschoben haben.
So, unser Actor verlässt derzeit das Set, das ändern wir jetzt so das er zum Bildschirm der Brücke geht.
Den Startpunkt lassen wir so wie er ist, wir verändern nur die beiden Wegpunkt und den Endpunkt. Für dieses tutorial benutzen wir nur sehr einfache Koordinaten.
ID: 21 = 2,0
ID: 22 = 0,5
ID: 24 = 3,0
ID: 25 = 0,7
ID: 27 = 4,0
ID: 28 = 0,0
Ok, wir testen unsere Szene erneut um zu sehen was wir getan haben.
Ja sieht besser aus, unser Actor geht nun tatsächlich zum Bildschirm an der Linken Seite der Brücke, aber er läuft auf der Stelle weiter wenn er dort angekommen ist. Daher müßen wir jetzt noch die ID 30, die Duration unseres MoPath bearbeiten. Dies ist nun so ziemlich das komplizierteste überhaupt wenn man kein Blender oder etwas ähnliches hat, ich beschreibe hier aber beide Wege. Bei Blender können wir die nötigen Informationen einfach bekommen, ohne müßen wir einiges rechnen (ein Taschenrechner wird dabei zum besten Freund). Derzeit beträgt die Duration 5,523201, das sind allerdings keine Sekunden sondern der Weg den der Actor geht, wir müßen also nur rausbekommen wir lang unser Weg denn ist.
Mit Blender adden wir ein einfaches plane zu unser msh Datei, wir löschen 2 Vertics und platzieren die anderen beiden auf den Start und End Punkten der neuen Koordinaten, jetzt subdividen wir sie (w key), das nun entstandene neue Vvertic platzieren wir auf Wegpunkt eins, jetzt subdividen wir das neue Vertic und den Endpunkt, das jetzte neu entstandene Vertic kommt auf Wegpunkt zwei. Jetzt wählen wir das Start Vertic und bewegen es zu Wegpunkt eins, die Koordinaten in der Klammer () zeigen uns wie weit die Distanz ist (Erst ab Blender 2.42 möglich), in diesem Fall sind es 1,8111, nun dasselbe mit Wegpunkt eins zu Wegpunkt zwei = 1,0198 und Wegpunkt zwei zum Endpunkt = 1,2207
Außerdem brauchen wir noch die direkte Distanz vom Start zum End Punkt = 3,3895
So müßen wir auch hier ein wenig rechnen
1,8111 + 1,0198 + 1,2207 = 4,0516
4,0516 ist unsere neue Duration, zumindest vorläufig.
Bevor es weiter geht, hier der Weg ohne Blender, keine Sorge das sieht nur ein wenig schwer aus
Für die X Koordinaten
(ID 21 ) 2 - (ID 18 ) 0,6814888 = 1,3185112 (A)
(ID 24 ) 3 - (ID 21 ) 2 = 1 (B)
(ID 27 ) 4 - (ID 24 ) 3 = 1 (C)
(ID 18 ) 0,6814888 - (ID 27 ) 4 = 3,3185112 (G) <-(Die Erklärung für kein Minus erfolgt bei den Y Koordinaten)
Für die Y Koordinaten
(ID 22 ) 0,5 - (ID 19 ) -0,7423667 = 1,2423667 (D) <- Möglicherweise wird es nun heißen ich kann nicht rechnen da das Ergebniss nicht stimmt, es stimmt aber . Wir haben von +0,5 bis -0,7423667 subtrahiert, das heißt also der Weg von 0,5 bis 0 und von 0 zu 0,7423667. Also kann man in diesem Fall anstelle des - rechnens auch einfach zusammenzählen.
(ID 25 ) 0,7 - (ID 22 ) 0,5 = 0,2 (E)
(ID 28 ) 0 - (ID 2 ) 0,7 = 0,7 (F) <- Hier wieder ein Beispiel wie falsch Mathe doch sein kann, 0 - 0,7 ist -0,7 aber unser Weg ist 0,7, also ist das Ergebniss 0,7 ohne das -
(ID 19 ) -0,7423667 - (ID 28 ) 0 = 0,7423667 (H) <- (Hier dasselbe wie schon bei D und F))
Ok nun zum zweiten rechen Schritt
1,3185112 (A) x 1,3185112 (A) + 1,2423667 (D) x 1,2423667 (D) = 3,281946802 Jetzt müßen wir nur noch die Wurzel ziehen = 1,811614410
1 (B) x 1 (B) + 0,2 (E) x 0,2 (E) = 1,04 -> Wurzel = 1,019803903
1 (C) x 1 (C) + 0,7 (F) x 0,7 (F) = 1,49 -> Wurzel = 1,220655562
1,811614410 + 1,019803903 + 1,220655562 = 4,052073875
3,3185112 (G) x 3,3185112 (G) + 0,7423667 (H) x 0,7423667 (H) = 11,5636249 -> Wurzel = 3,400533031
Wenn wir also gerechnet haben ist unsere neue Duration 4,052073875
Leider stimmen aber beide Durations die wir nun haben noch nicht, hier müßen wir nun leider noch ein klein wenig rechnen, egal ob wir mit Blender gearbeitet haben oder nicht. Für dieses Beispiel nutze ich die Blender Durations
Unsere Duration war dort 4,0516 und der Weg vom Start zum Endpunkt war 3,3895
Und so gehts: 4,0516 - 3,3895 = 0,6621 : 2 = 0,33105 + 3,3895 = 3,72055
3,72055 ist unsere endgültige Duration.
Zur Erklärung, 4,0516 ist die bisherige Duration, 3,3895 wie schon gesagt die Distanz vom Start zum Ende, 0,6621 ist der Unterschied zwischen den beiden. Dann haben wir das ganze durch 2 geteilt um die Hälfte zu bekommen, das war die 0,33105, darauf folgt wieder die 3,3859 welche wieder die Distanz vom Start zum Ende darstellt (es ist auch möglich stattdessen die original Duration 4,0516 - 0,33105 zu rechnen, das Ergebniss ist dasselbe)
So nun da wir die richtige Duration der Szene haben gibt es da immernoch zwei störende Dinge an denen wir arbeiten sollten. Der Actor steht von seinem Stuhl auf, und geht dann ohne Bewegung plötzlich um 90° gedreht los. Wir brauchen also eine weitere Action in unserer Szene, wir gehen zum Item 790 und ändern die Next Item ID auf 769, außerdem ändern wir auch noch die Next Item ID von 769 auf 715, so unser Szenen Pfad ist wiedermal fertig. Nun brauchen wir noch eine Animation die den Actor um 90° nach links dreht, also auf zu den Text Elements, diesmal werden wir bei ID 31 fündig, also zurück zur Action 769, die Action TE ändern wir hier nunr auf 31 und testen anschließend erneut unsere Szene.
Schon viel besser, jetzt sitzt unser Actor zunächst auf dem Captains Stuhl, steht dann auch, dreht sich 90° nach links und geht dann zur linken Seite des Bildschirms. Nun zur zweiten Sache, es ist ja nun nicht so schön eine Szene damit zu beenden das jemand nur zum Bildschirm geht, also adden wir zwei weitere Actions. Wir gehen zum MoPath 715 und ändern die Next Item ID auf 770, da wir zwei Actions adden wollen können wir hier die Next Item ID auf 771 belassen, aber dafür ändern wir die Next Item ID von Item 771 auf 727 (vormals next Item von 715)
Beginnen wir mit 770, unser Actor soll sich wiedermal drehen, diesmal aber um 180°, in den Text Elemants stellen wir diesmal aber fest das keine derartige Animation vorhanden ist, also Zeit zum aufgeben? Nein, wir suchen uns eine der IDs aus die wir nich brauchen, zum Beispiel die ID 32 sit_stndrd_2_angry_sit.anm, doppelklick darauf, dann suchen wir nach turn_180_stand_pos.anm anschließend geht es zurück zum Item 770 wo wir die ActionTE auf 32 ändern. Das ist aber nicht alles was wir hier tun müßen, da die Animation nun an einer anderen Stelle spielt als zu Anfang müßen wir die X Y Z Koordinaten noch bearbeiten, wir können hierzu einfach die Endpunkt Koordinaten des MoPath 715 verwenden.
Also in Item 770 die ID 4 = 4, ID 5 = 0 und ID 6 = 0
Nun testen wir unsere Szene erneut.
Ok scheint soweit zu funktionieren das der Actor sich dreht, aber dann sitzt er plötzlich wieder auf dem Captains Stuhl, das ist Item 771 das wir schon geaddet, aber noch nicht bearbeitet haben, also tun wir es jetzt.
In Item 771 ändern wir die ID 4, 5 und 6 Koordinaten zu denseleben wie schon in Item 770. Außerdem brauchen wir noch eine andere Animation, also mal wieder zu den Text Elements um eine weitere ID zu ändern, diesmal nehmen wir die ID 28 angry_sit_idle.anm, also wieder Doppelklick darauf und dann ändern auf dir_idle.anm. Da Item 771 bereits die ID 28 enthält sind hier diesmal keine Änderungen nötig. Dafür müßen wir uns aber wieder an eine neue ID machen, die ID 7 Rotation, derzeit würde der Actor wieder zum Bildschirm sehen nachdem er sich bereits gedreht hatte. Also müßen wir dies um 180° drehen, leider arbeitet die Rotation aber nicht mit Grad Zahlen, es arbeitet nur mit den X Y Z Koordinaten und wir müßen nun heraus finden wie.
Bild 5
Wir sehen in welche Richtung unser Actor bei welcher Nummer guckt, es würde auch mit - funktionieren aber dann sind die Richtungen wieder komplett anders. Derzeit befindet sich unser Actor im X Y Feld, möglicherweise sind die Rotations Koordinaten in den andern Feldern ein wenig anders als in diesem, ich habe das noch nicht getestet. Jetzt wollen wir den Actor erstmal nur in dieselbe Richtung blicken lassen wie nach der Drehung um 180°. Wir ändern die derzeitige Rotation von -0,7485316 auf 2,4, die einzige Möglichkeit diese 2,4 heraus zu finden ist ausporbieren. Nun da wir die Rotation haben erkennen wir das die Position unseres Actors noch nicht 100% stimmt, er steht etwa einen Fuß weit von der gewünschten Position weg, also ändern wir die ID 4 auf 3,75 und die ID 5 auf 0,25, leider kann man auch dies nur durch ausprobieren heraus bekommen.
Das wars, unsere Szene sollte nun funktionieren, vielleicht ist es dir schon aufgefallen das sie nicht perfekt ist. Als kleines Beispiel sei hier erwähnt, nachdem der Actor aufgestanden ist und sich nach links gedreht hat, befindet sich sein linkes Bein für einen Moment im Stuhl. Aber dieses Tutorial sollte ja auch nur zeigen wie alles funktioniert. Du bist jetzt in der Lage eigene Szenen zu erstellen
Hier noch eine kleine Info über die Action Items bevor dieses Tutorial wirklich endet. Die ID 14 ([-1,0,1-55,60-66,70,72,73,75,80,85,86,90,100,112,120]) ist die Duration der Action, es sind keine Sekunden, aber mit ein wenig ausprobieren lässt sich heraus finden was wielange ist. -1 bedeutet das die Action nicht in der Szene gezeigt wird.
Ich hoffe das Tutorial hat geholfen, bei Fragen zu irgendwelchen Details einfach fragen
In absehbarer Zeit dürfte dann noch ein Tutorial zur Nutzung der Kamera folgen, nur soviel vorweg die FreeCam ist nicht so frei wie eine richtig programmierte Kamera da man diese auch auf den Kopf stellen kann oder auch im 45° Schrägen Winkel