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