Lua Scripting Effekte (Feuer, Partikel, Licht, Blut usw.) erstellen LUA

  • Effekte in TEN mit Lua erstellen

    Effekte erstellen Lua


    In Lua können wir ebenfalls Effekte wie Licht, Feuer, Blut usw. erstellen. Diese ordnen wir idealerweise einem Nullmesh Objekt hinzu, da man dies im Spiel nicht sieht.


    Anmerkung:

    Man kann natürlich diese Effekte auch Moveables oder Statics zuordnen, ähnlich wie der AddEffect= Befehl aus TRNG.


    Zunächst müssen wir ein Nullmesh Objekt definieren, dem wir den Effekt zuordnen. Das kann z.B. ein "Camera Target", "Smoke Emitter White" usw. sein. Dieses muss im Spiel nicht ausgelöst werden. Wir brauchen es nur, damit man einem Effekt eine Position zuweisen kann.


    Code
    local nullmesh = GetMoveableByName("smoke_emitter1")
    local nullmeshposition = nullmesh:GetPosition()
    
    nullmeshposition.y = nullmeshposition.y - 500


    Hier setzen wir in die Variable "nullmesh" ein Objekt (Smoke_Emitter_White) mit dem LUA Namen "smoke_emitter1".

    In die Variable "nullmeshposition" setzen wir die Position des Nullmesh Objekts, welche wir der Variable "nullmesh" zugeordnet haben.


    nullmeshposition.y = nullmeshposition.y - 500


    Platzieren wir das Nullmesh Objekt direkt auf den Boden, können wir optional noch festlegen, dass der Effekt um z.B. 500 höher auf der Y-Achse liegen soll.

    Wir können aber auch das Nullmesh Objekt direkt höher oder tiefer setzen.


    Nun können wir diesem Nullmesh Smoke_Emitter_White Objekt folgende Effekte zuweisen:


    Anmerkung:

    Die vollständige Auflistung findet ihr in der Dokumentation von squidshire unter "Effects".

    1 EmitLightningArc

    EmitLightningArc(src, dest, color, lifetime, amplitude, beamWidth, detail, smooth, endDrift)


    src= Position des erstens Objektes, an welcher der Effekt zu sehen sein soll

    dest= Position des zweiten Objektes, an welcher der Effekt zu sehen sein soll

    color= Farbe des Lichtbogens

    lifetime= Lebensdauer in Sekunden. Standardwert ist 1.0

    amplitude= Umfang des Lichtbogens. Standardwert ist 20

    beamWidth= Abstrahlbreite. Standardwert ist 2

    detail= Anzahl der Segmente. Standardwert ist 10

    smooth= true - (lange, geglättete Kurven) false - (kurze, gezackte Spitzen)

    endDrift= true - (Ende des Bogen driftet langsam weg) false - (Ende des Bogen bleibt fest)


    Effects.EmitLightningArc


    nullmeshposition

    Ist der Name der Variable, in der wir die Position des ersten "smoke_emitter1" gesetzt haben.


    nullmeshposition2

    Ist der Name der Variable, in der wir die Position des zweiten "smoke_emitter2" gesetzt haben.


    Anmerkung:

    Der LightningArc hat eine Besonderheit, er benötigt 2 Nullmesh Objekte für die Position, einen für den Startpunkt und den anderen für den Zielpunkt.


    Color

    Farbe hier ein Blauton


    6

    Lebensdauer hier 6 Sekunden


    20

    Umfang des Lichtbogens. Standardwert 20


    2

    Abstrahlweite . Standardwert 2


    10

    Segmente. Standardwert 10


    false

    kleine, gezackte Spitzen


    false

    feste Richtung


    EmitLightningArc

    2 EmitParticle

    EmitParticle(pos, velocity, spriteIndex, gravity, rot, startColor, endColor, blendMode, startSize, endSize, lifetime, damage, poison)


    pos= Position des Objektes an welcher der Effekt zu sehen sein soll

    velocity= Geschwindigkeit der Partikel

    spriteindex= ID Nummer des Sprites Objetes in "Default Sprites". (Kann mit WadTool eingesehen werden)

    gravity= Schwerkraft. Standardwert ist 0. Positive Werte lassen den Partikel fallen, negative Werte lassen ihn emporsteigen

    rot= Rotation. Standartwert ist 0. Negative Werte gegen den Uhrzeigersinn, Positive Werte im Uhrzeigersinn

    startColor= Anfangsfarbe im RGB Modus

    endColor= Endfarbe im RGB Modus

    blendMode= BlendModus. Standardwert ist "ALPHABLEND". Welche Einträge noch gehen, kann hier nachgesehen werden

    startSize= Startgröße der Partikel. Standardwert ist "10". "15" ist ungefähr die Größe von Laras Kopf

    endSize= Endgröße. Standardwert ist 0. Der Partikel schrumpft oder wächst linear zu dieser Endgröße

    lifetime= Lebensdauer in Sekunden. Standardwert ist 2

    damage= false (verletzt Lara nicht) true (verletzt Lara)

    poison= false (vergiftet Lara nicht) true (vergiftet Lara)


    Effects.EmitParticle


    nullmeshposition

    Ist der Name der Variable, in der wir die Position des "smoke_emitter1" gesetzt haben.


    Vec3

    Geschwindigkeit, hier zufällig von 0-1


    22

    Sprite Index in der Default Sprites


    0

    Schwerkraft


    -2

    Rotation


    Color

    Anfangsfarbe im RGB Modus


    Color

    Endfarbe im RGB Modus


    TEN.Effects.BlendID.ADDITIVE

    Blendmodus Additive


    15

    Startgröße des Partikels


    50

    Endgröße des Partikels


    20

    Lebensdauer


    false

    verletzt Lara nicht


    true

    vergiftet Lara


    EmitParticle Effect

    3 EmitShockwave

    EmitShockwave(pos, innerRadius, outerRadius, color, lifetime, speed, angle, hurtsLara)


    pos=Position des Objektes an welcher der Effekt zu sehen sein soll.

    innerRadius= Innenradius (128 ist ein Klick, 512 ein Block)

    outerRaidus= Außenradius (Standard ist 128)

    color= Farbe der Druckwelle im RGB Modus.

    lifetime= Dauer, Standard ist 1 Sekunde, Höchstwert 8.5.

    speed= Geschwindigkeit, Standard ist 50

    angle= Winkel der x-Achse. 90 setzt die Druckwelle vertikal.

    hurtslara= Standard - false - verletzt Lara nicht, true - verletzt Lara



    Code
    LevelFuncs.EmitShockwave = function ()
               
               local nullmesh = GetMoveableByName("smoke_emitter1")
               local nullmeshposition = nullmesh:GetPosition()
               nullmeshposition.y = nullmeshposition.y - 500
             
    Effects.EmitShockwave(nullmeshposition, 0, 128, Color(255,255,255), 1, 50, 0, false)
    
    end

    Effects.EmitShockwave


    nullmeshposition

    Ist der Name der Variable, in der wir die Position des "smoke_emitter1" gesetzt haben.


    0

    Innenradius i


    128

    Aussenradius


    Color

    Farbe ist weiß


    1

    Lebenszeit


    50

    Geschwindigkeit


    0

    Winkel der x-Achse.


    false

    verletzt Lara nicht


    Diese LevelFuncs. Funktion setzen wir nun noch in einen Volume Trigger.


    EmitShockwave Effect

    4 EmitLIght

    EmitLight(pos, color, radius)


    pos= Position des Objektes an welcher der Effekt zu sehen sein soll.

    color= Farbe des Lichts im RGB Modus.

    radius= Radius des Lichtkegels. Standard ist 20.


    Code
    LevelFuncs.EmitLight = function ()
    
               local nullmesh = GetMoveableByName("smoke_emitter1")
               local nullmeshposition = nullmesh:GetPosition()
               nullmeshposition.y = nullmeshposition.y - 500
              
    Effects.EmitLight(nullmeshposition,Color(255,0,0), 20)
    
    end

    Effects.EmitLight


    nullmeshposition

    Ist der Name der Variable, in der wir die Position des "smoke_emitter1" gesetzt haben.


    color

    Farbe ist Rot


    20

    Standardradius


    Diese LevelFuncs. Funktion setzen wir nun noch in einen Volume Trigger.

    Möchten wir ständiges Licht haben, setzen wir diese Funktion in "When inside", damit sie jeden Frame ausgelöst wird.



    EmitLight Effect mit der Farbe Rot

    5 EmitBlood

    EmitBlood(pos, count)


    pos= Position des Objektes an welcher der Effekt zu sehen sein soll.

    count= Menge des Blutes. Standard ist 1.0. Höhere Werte wirken eher wie eine rote Leuchtkugel.

    Code
    LevelFuncs.EmitBlood = function ()
               
               local nullmesh = GetMoveableByName("smoke_emitter1")
               local nullmeshposition = nullmesh:GetPosition()
               nullmeshposition.y = nullmeshposition.y - 500
                 
    Effects.EmitBlood(nullmeshposition,1.0)
    
    end

    Effects.EmitBlood


    nullmeshposition

    Ist der Name der Variable, in der wir die Position des "smoke_emitter1" gesetzt haben.


    1

    Menge des Blutes.


    Diese LevelFuncs. Funktion setzen wir nun noch in einen Volume Trigger.

    Möchten wir ständiges Blut haben, setzen wir diese Funktion in "When inside", damit sie jeden Frame ausgelöst wird.


    EmitBlood Effect

    6 EmitFire

    EmitFire(pos, size)


    pos= Position des Objektes an welcher der Effekt zu sehen sein soll.

    size= Größe der Flamme. Standartwert ist 1.0.


    Code
    LevelFuncs.EmitFire = function ()
               
               local nullmesh = GetMoveableByName("smoke_emitter1")
               local nullmeshposition = nullmesh:GetPosition()
               nullmeshposition.y = nullmeshposition.y - 500
             
    Effects.EmitFire(nullmeshposition, 1.0)
    
    end

    Effects.EmitFire


    nullmeshposition

    Ist der Name der Variable, in der wir die Position des "smoke_emitter1" gesetzt haben.


    1

    Größe


    Diese LevelFuncs. Funktion setzen wir nun noch in einen Volume Trigger.

    Möchten wir ständiges Feuer haben, setzen wir diese Funktion in "When inside", damit sie jeden Frame ausgelöst wird.


    EmitFire Effect

    7 MakeExplosion

    MakeExplosion(pos, size, shockwave)


    pos= Position des Objektes an welcher der Effekt zu sehen sein soll.

    size= Größe der Explosion. Standartwert ist 512.0.

    shockwave=

    false) - Standardexplosion

    (true) - sehr matte Druckwelle mit Geräusch. Beide Arten verletzen Lara nicht.


    Code
    LevelFuncs.MakeExplosion = function ()
               
               local nullmesh = GetMoveableByName("smoke_emitter1")
               local nullmeshposition = nullmesh:GetPosition()
               nullmeshposition.y = nullmeshposition.y - 500
           
    Effects.MakeExplosion(nullmeshposition, 512.0, false)
            Lara:SetHP(Lara:GetHP()-10)
    end

    Effects.MakeExplosion


    nullmeshposition

    Ist der Name der Variable, in der wir die Position des "smoke_emitter1" gesetzt haben.


    512.0

    Abstand zwischen den Original und zusätzlichen Sprites.


    False

    Standardexplosion.


    Lara:SetHP (Lara:GetHP()-10)

    Diesen Script Befehl habe ich noch eingefügt, damit Lara ständig Energie abgezogen wird, wenn sie sich in der Nähe der Explosion aufhält.


    Diese LevelFuncs. Funktion setzen wir nun noch in einen Volume Trigger.


    Make Explosion Effect

    8 MakeEarthquake

    MakeEarthquake(strength)


    strength = ist die Stärke des Erdbebens. Standardwert ist 100.

    Code
    LevelFuncs.MakeEartquake = function ()
    
               Effects.MakeEarthquake(100)
    
    end

    Effects.MakeEarthquake


    Der Effekt "MakeEarthquake" benötigt keine Positionsangabe (pos), deswegen müssen wir ihn auch nicht mit einem Objekt verknüpfen.


    100

    Stärke

    9 FlashScreen

    FlashScreen(color, speed)


    color= Farbe des Lichts im RGB Modus.

    speed= Dauer des Effekts. Standard ist hier 1.0. Effekt dauert dann 1 Sekunde.

    Code
    LevelFuncs.MakeFlashScreen = function ()
               Effects.Flash(Color(255,0,255),4)
            
    end

    Effects.FlashScreen


    Wichtige Anmerkung:

    In der TEN Version 1.0.1 wurde der Befehl von "FlashScreen" in "Flash" geändert. Er wird aber wieder ab Version 1.0.2 "FlashScreen" heißen.


    Der Effekt "Flashscreen" benötigt keine Positionsangabe (pos), deswegen müssen wir ihn auch nicht mit einem Objekt verknüpfen.


    Color

    Farbe ist Rosa


    4

    Dauer in Sekunden


    EmitFlash Effect

Share