1. TRLevel
  2. Forum
    1. Unresolved Threads
    2. Articles
  3. Members
    1. Recent Activities
    2. Users Online
    3. Team
    4. Trophy
    5. Search Members
  4. Tutorials
  5. Levels
  6. Downloads
  7. Adventskalender
    1. Kalender 2025
    2. Kalender 2024
    3. Kalender 2023
    4. Kalender 2022
    5. Kalender 2021
    6. Kalender 2020
    7. Kalender 2019
    8. Kalender 2018
    9. Kalender 2017
  8. Osterkalender
    1. Osterkalender 2026
    2. Osterkalender 2025
    3. Osterkalender 2024
    4. Osterkalender 2023
    5. Osterkalender 2022
    6. Osterkalender 2021
    7. Osterkalender 2020
    8. Osterkalender 2019
    9. Osterkalender 2018
    10. Osterkalender 2017
    11. Osterkalender 2016
  9. Mediathek
    1. Albums
    2. Video channels
  • Login
  • Register
  • Search
Tutorials
  • Everywhere
  • Articles
  • Pages
  • Forum
  • Tutorials
  • Files
  • Images
  • Videos
  • More Options
  1. TRLevel.de
  2. Lexicon

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

  • Jörg
  • September 9, 2022 at 4:47 PM
  • April 24, 2023 at 11:37 AM
  • 1,670 times viewed

WICHTIG

Diese Tutorials sind beim schreiben immer mit der aktuellsten TEN/TE Version erstellt worden.
Leider kann sich von Version zu Version des Tomb Editor oder der Tomb Engine immer etwas am Code ändern. Daher können manche Teile der Tutorials veraltet sein, bzw. nicht mehr funtkionieren.
Wenn euch hier etwas auffällt, teilt uns dies BITTE mit. Damit man sich das Tutorial ansehen und überarbeiten kann. Dazu bitte einfach ein Thema im "TRLevel Forum" eröffnen.

  • 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)

    Code
    LevelFuncs.EmitLightningArc = function ()
               local nullmesh = GetMoveableByName("smoke_emitter1")
               local nullmeshposition = nullmesh:GetPosition()
               nullmeshposition.y = nullmeshposition.y - 500
    
               local nullmesh2 = GetMoveableByName("smoke_emitter2")
               local nullmeshposition2 = nullmesh2:GetPosition()
               nullmeshposition2.y = nullmeshposition2.y - 500
    
    Effects.EmitLightningArc(nullmeshposition, nullmeshposition2, Color(128, 127, 255), 6, 20, 2, 10, false, false)
    
    end
    Display More

    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)

    Code
    LevelFuncs.EmitParticle = function ()
               local nullmesh = GetMoveableByName("smoke_emitter1")
               local nullmeshposition = nullmesh:GetPosition()
               nullmeshposition.y = nullmeshposition.y - 500
    
    Effects.EmitParticle(
        nullmeshposition,
        Vec3(math.random(), math.random(), math.random()),
        22, -- spriteIndex
        0, -- gravity
        -2, -- rot
        Color(255, 0, 0), -- startColor
        Color(0,  255, 0), -- endColor
        TEN.Effects.BlendID.ADDITIVE, -- blendMode
        15, -- startSize
        50, -- endSize
        20, -- lifetime
        false, -- damage
        true -- poison
        )
    
    end
    Display More

    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.FlashScreen(Color(255,0,255),4)
            
    end

    Effects.FlashScreen

    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

    • blood
    • Emit
    • fire
    • light
    • explosion
    • earthquake
    • lightning arc
    • shockwave
    • flash screen

Share

  • Previous entry Bildschirm bei Energieverlust schwarz weiß färben
  • Next entry EnemyHP Counter für alle anvisierten Gegner - LUA
  • Changelog
  • PDF

Table of Contents

  • 1 EmitLightningArc
  • 2 EmitParticle
  • 3 EmitShockwave
  • 4 EmitLIght
  • 5 EmitBlood
  • 6 EmitFire
  • 7 MakeExplosion
  • 8 MakeEarthquake
  • 9 FlashScreen

Categories

  1. Archiv 8
    1. Tomb Editor_Alt 2
    2. TRNG_Alt 4
  2. Bauen 239
    1. Tomb Editor (TE) 107
      1. Tipps und Tricks 19
      2. SoundTool 5
      3. TombIDE 6
      4. WadTool 11
      5. NodeEditor 2
    2. Tomb Engine (TEN) 72
      1. Tipps und Tricks 17
      2. Lua Scripting 35
    3. TRNG Engine 194
      1. Scripting 4
      2. NG Center 20
      3. Allgemein 7
      4. Neue TRNG Script Befehle 66
      5. Neue TRNG Trigger 66
      6. Neue TRNG OCB Werte 9
      7. TRNG Plugins 6
      8. Tipps und Tricks 5
      9. TRNG Engine Praktische Beispiele 8
    4. NGLE (Next Generation Level Editor) 12
    5. Tomb Raider Level Editor 86
      1. Licht 4
      2. Geometrie 8
      3. Levelbau 110
      4. Tipps und Tricks 12
      5. Script 3
      6. Sounds 2
      7. Texturen 2
      8. OCB 4
      9. Sonstiges 3
      10. Dxtre3D 1
  3. Tools 21
    1. Metasequoia 5
      1. Metasequoia 3.x 2
      2. Metasequoia 4.x 3
    2. StrPix und WADMerger 4
      1. StrPix 2
      2. WADMerger 2
    3. FLEP 9
    4. Tools 2
    5. TREP 7
      1. Flipeffect Editor 1
      2. Custom Patches 2
    6. TRViewer 1
    7. Blender 0
  4. Allgemeine Tipps und Tricks 3
  5. Level Editor Lexikon 107
    1. Tomb Editor 1
    2. Tools 3
      1. TREP/FLEP 3
      2. WADMerger 0
      3. Strpix 0
    3. NGLE/LE 97
    4. Allgemein 6
      1. WAD Slots 5
    5. NGEngine 0
  1. Privacy Policy
  2. Contact
  3. Legal Notice
Lexicon 7.1.17, developed by www.viecode.com
Powered by WoltLab Suite™ 6.1.18
TRLevel.de in the WSC-Connect App on Google Play
TRLevel.de in the WSC-Connect App on the App Store
Download