Construction Set Ingame-Videosequenzen

Fellan

Freund des Hauses
Ich möchte gerne per Script ein Video einspielen lassen. Aber kein "normales" Video, denn man soll den Spieler sehen können.

Ich möchte mit einem Befehl die Kamera auf Position XYZ setzen, der Spieler soll dabei sichtbar sein (bei der Ego-Perspektive existieren ja im Grunde nur die Arme und die Waffe). Die Kamera soll fest sein und einer Person folgen, also ihr "hinterhersehen", wenn sie sich nach links bewegt, schwenkt (!) die Kamera nach links, bleibt aber auf ihrer Position.

Wenn ich es für richtig halte, möchte ich während der Ingame-Sequenz die Kamera auch in ihrer Position verändern.

Ist sowas möglich? Wie kann ich Spieler und NPCs während dieser Videosequenz (die ja eigentlich keine ist) "steuern"?

Wie kann ich einen NPC sprechen lassen, ohne dass der Spieler sich mit diesem im Dialog befindet? Das gibt es im Spiel schon bei dem Gespräch zur Aufnahme in die Diebesgilde, falls das jemandem was sagt. Wie kann ich sowas machen und dabei auch noch die Kamera hin- und herbewegen, wobei der Spieler sichtbar sein soll?
 
also die kamera ingame ohne konsole vom spieler zu lösen, wird wahrscheinlich unmöglich sein. dafür kann man trotzdem den spieler an sich als kamera benutzen, und einen doppelgänger für ihn arbeiten lassen.
-also mit 'disableplayercontrols' wird dem spieler die kontrolle entzogen
-mit 'player.setrestrained 1' kann der spieler sich nicht mehr umgucken(nur noch nach oben und unten, unten steht, wie man das auch verhindert)
-mit 'player.equipitem waffeID' und gleich darauf 'player.unequipitem waffeID' kann der "kamera" die waffe aus der hand genommen werden(wie waffe verstecken geht, weiß ich leider nicht)
-mit 'set doppelganger to player.createfullactorcopy' wird vom ein identischer npc erzeugt, und gleich der referenzvariablen doppelganger zugeordnet
-mit 'doppelganger.addscriptpackage packageID' und 'doppelganger.evp' wird dem "spieler"-dummy gesagt, was er machen soll(mit 'evp', dass er das sofort machen soll)
-mit 'npcref.sayto doppelganger topicID 1' kann ein npc etwas dem player erzählen
-mit 'player.setangle z grad' kann man die "kamera" dann rundumschwenken lassen, wenn es nötig ist
-mit 'player.setangle x grad' (von -89 bis 89) kann man die hoch-runter-komponente der kamera bestimmen. diese funktion solltest du evtl jeden frame ausführen, da wie oben erwähnt die hoch-runter-blickrichtung von allein nicht verhindert werden kann.
-mit 'player.setpos x ingamekoordinate'(x-achse oder eben andere achse) kann die kamera gesteuert werden

zum schluss noch: da man mit dem "kamera"-player nicht direkt den leuten folgen kann, muss das ganze natürlich extrem gut getimed sein und du wirst einiges an triggerboxen und sonstigem benötigen(PS: die kamera immer auf den doppelgänger auszurichten würde hiermit gehen(ganz unten). für einen smoothen ablauf der kamerabewegungen würde ich counter einbauen, bei denen die kamera pro frame um soundsoviele einheiten gerückt wird.
das einzige wirlkliche problem was mir beim schreiben jetzt aufgefallen ist: man kann nicht prüfen, ob der spieler grade in 1st person oder 3rd person spielt. du solltest also vorher(auch wenn das noch so die atmosphäre zerstört) eine message anbringen, dass man denn nun bitte in 1st person umschalten sollte.

ansonten noch: obwohl die scriptengine nun so begrenzt ist, und man kaum hoffnung haben durfte, dass
so eine ingame-cutscene wirklich funktioniert, bin ich trotzdem erstaunt, und interessiert, dass man so etwas(evtl nicht ganz so professionelles) trotzdem, zwar mit einem wahrscheinlich riesigen scriptaufwand, ermöglichen kann. viel glück :-D
 
  • Like
Reaktionen: Fellan
Erstmal Danke für die ganzen Befehle mit Beschreibung.

MrMuh schrieb:
-mit 'player.equipitem waffeID' und gleich darauf 'player.unequipitem waffeID' kann der "kamera" die waffe aus der hand genommen werden(wie waffe verstecken geht, weiß ich leider nicht)

Mit

Player.SAA 0.0

kann man den Spieler unsichtbar machen - die Waffen, die er in der Hand hat, alles, was er im Inventar hat (und somit angelegt haben könnte), sprich alles, was vom Spieler zu sehen ist, wird unsichtbar. Mit

Player.SAA 1.0

wird der Spieler wieder sichtbar gemacht. Das geht auch mit anderen NPCs, vielleicht auch mit Objekten aller Art.



Kannst du bitte nochmal in einem Beispielscript erklären, wie das genau mit dem Erstellen des Doppelgängers geht, wie ich dem Doppelgänger eine bestimmte Reference-ID zuweise und wie ich ihn und somit die Kamera dann bewege? Irgendwie verstehe ich das nicht so ganz...

Zur Message: Wenn ich dem Spieler, der ja mitsamt der Spieler-Kopie unsichtbar ist, einen Zauber gebe, der ihn zu Boden wirft, wechselt die Kamera automatisch in die 3rd-Person-Perspektive.
 
also, ich weiß nicht, wie du das jetzt genau haben wolltest.
aber ich hab das eben so gedacht, dass DU als kamera fungierst. also wirst DU auch hin-und herbewegt.
der doppelgänger von dir ist ein npc.

gut, beispiel:

Code:
scn ingamecutscene

ref doppelganger
short state
float angle
float z
float y
float x
float timer
short count

begin gamemode

if irgendwelchebedingung == 1

set angle to player.getangle z + player.GetHeadingAngle doppelganger
player.setangle z angle

if state == 0
set state to 1
set doppelganger to player.createfullactorcopy
player.disableplayercontrols
player.setrestrained 1
player.saa 0.0
doppelganger.addscriptpackage laufzuNPCpackage
doppelganger.evp
NPCref.sayto doppelganger topicID 1
set timer to timer + getsecondspassed
player.moveto beobachtungsmarker
endif


elseif state == 1 
if timer > 3
set state to 2
set timer to 0
set count to 100
endif

elseif state == 2
if count > 0               ;kamera wird 100 einheiten nach unten bewegt
set count to count - 1
set z to player.getpos z - 1
player.setpos z z
else
set state to 3
set count to 100
endif

elseif state == 3
if count > 0             ;leichte schräge fahrt auf x und y-achse
set count to count - 1
set x to player.getpos x + 2
set y to player.getpos y - 1
player.setpos x x
player.setpos y y
else
set state to 4
endif
endif

endif
end
 
  • Like
Reaktionen: Fellan
Danke, das hilft mir sehr. Problem: Der Spieler fungiert als Kamera, seine Kopie als er selbst. Kann ich denn die "Spieler-Kamera" nun auch in die Luft bewegen? Dann falle ich doch runter!

Nagut, dafür könnte man an die Position der "Spieler-Kamera" eine CollisionBox als Boden setzen. Der Spieler kann sich dann auch ruhig weiterhin umsehen.

Nochmal, Danke für die Hilfe! :)
 
Du könntest dann doch vielleicht auch diesen TCL Befehl für die Konsole benutzen, der die Kollision des Spielers völlig außer Kraft setzt und dich schweben lässt. ;)
 
Ich will keine Screenshots machen, sondern eine Kamerafahrt. Aber du hast Recht, mit "TFC" bleibt der Spieler sichtbar.

Ist denn "TFC" per Script möglich und die "TFC"-Position veränderbar? Kann ich außerdem die "TFC"-Position festsetzen, sodass der Spieler zwar die Kamera schwenken, aber nicht bewegen kann?
 
nein, also konsolenbefehle kann man nicht in scripts verwenden (andersrum geht jedoch). alternativ kannst du nur den spieler in jeden frame an seine aktuelle position teleportieren.
also immer:
set z to player.getpos z
player.setpos z z