Code: Select all
-- lava
defineObject{
name = "eruption",
components = {
{
class = "Light",
offset = vec(0, -0.5, 0),
range = 10,
color = vec(2.8, 1.2, 0.7),
brightness = 1,
fadeOut = 6,
castShadow = false,
destroyObject = true,
},
{
class = "Particle",
particleSystem = "eruption",
},
{
class = "Projectile",
spawnOffsetY = 0,
velocity = 1,
radius = 0.1,
gravity = 4,
fallingVelocity = 4,
destroyOnImpact = false,
onProjectileHit = function(self, what, entity)
self.go.particle:stop()
end,
onInit = function(self)
self.go:setSubtileOffset(math.random()-0.5, math.random()-0.5)
self:setFallingVelocity(math.random()*2+3)
self:setVelocity(math.random()*2)
end,
},
},
placement = "floor",
editorIcon = 88,
}
defineParticleSystem{
name = "eruption",
emitters = {
-- star
{
--spawnBurst = true,
emissionRate = 200,
emissionTime = 3,
maxParticles = 700,
boxMin = {0,0,0},
boxMax = {0,0,0},
sprayAngle = {0,0},
velocity = {0,0},
objectSpace = false,
texture = "assets/textures/particles/candle_glow.tga",
lifetime = {1,1},
color0 = {4, 0.4, 0.2},
opacity = 1,
fadeIn = 0,
fadeOut = 1,
size = {0.05, 0.1},
gravity = {0,0,0},
airResistance = 0.1,
rotationSpeed = 5,
blendMode = "Additive",
},
}
}
defineObject{
name = "lava_effects",
components = {
{ class = "Light",
offset = vec(0, -0.5, 0),
range = 6,
color = vec(2.8, 1.2, 0.7),
brightness = 10,
castShadow = true,
shadowMapSize = 64,
staticShadows = true,
staticShadowDistance = 0, -- use static shadows always
},
{ class = "Particle",
particleSystem = "lava_effects",
offset = vec(0, -0.4, 0),
},
{
class = "TileDamager",
attackPower = 3,
damageType = "fire",
repeatCount = math.huge,
repeatDelay = 1,
onInit = function(self)
if self.go.map:getElevation(self.go.x, self.go.y) < self.go.elevation then
spawn("under_lava_effects", self.go.level, self.go.x, self.go.y, self.go.facing, self.go.elevation-1)
end
end,
},
{ class = "Timer",
timerInterval = 1,
triggerOnStart = true,
onActivate = function(self)
local l,x,y,f,e = self.go.level, self.go.x, self.go.y, self.go.facing, self.go.elevation
for i in self.go.map:entitiesAt(x, y) do
if i.item and i.elevation < e then
local m = self.go:spawn("fire_elemental")
m.monster:addItem(i.item)
end
end
self.go:playSound("magma_explosion")
spawn("magma_golem_meteor_impact_ground", l, x, y, f, e-1)
for f = 0,3 do spawn("eruption", l, x, y, f, e) end
self:setTimerInterval(300*(0.1+0.9*math.random()))
end,
onInit = function(self)
self:setTimerInterval(300*math.random())
end,
},
{ class = "Sound",
sound = "fire_pit",
volume = 0.5,
},
},
placement = "floor",
editorIcon = 88,
}
defineObject{
name = "under_lava_effects",
components = {
{ class = "Particle",
particleSystem = "under_lava_effects",
},
{
class = "TileDamager",
attackPower = 1000,
damageType = "fire",
repeatCount = math.huge,
repeatDelay = 1,
onInit = function(self)
if self.go.map:getElevation(self.go.x, self.go.y) < self.go.elevation then
spawn("under_lava_effects", self.go.level, self.go.x, self.go.y, self.go.facing, self.go.elevation-1)
end
end,
},
},
placement = "floor",
editorIcon = 88,
}
defineObject{
name = "lava_surface",
components = {
{
class = "Model",
model = "assets/models/env/ocean_water.fbx",
material = "lava_surface",
offset = vec(0, -0.4, 0),
},
},
placement = "floor",
dontAdjustHeight = true,
editorIcon = 264,
color = {250,140,50,255},
reflectionMode = "never",
}
defineObject{
name = "lava_surface_tiles",
baseObject = "base_floor_decoration",
components = {
{
-- updates global reflection and refraction maps
class = "WaterSurface",
planeY = -0.4,
fogColor = math.saturation(vec(0.26, 0.09, 0.042), 0.5) * 0.5,
fogDensity = 0.4,
reflectionColor = vec(1.5, 0.9, 0.27) * 0.9,
refractionColor = vec(1.5,1.0,0.5),
},
{
-- builds a continuous mesh from underwater tiles
class = "WaterSurfaceMesh",
material = "lava_surface_tiles",
underwaterMaterial = "lava_surface_tiles",
offset = vec(0, -0.4, 0),
},
},
dontAdjustHeight = true,
editorIcon = 264,
color = {250,140,50,255},
}
defineMaterial{
name = "lava_surface",
diffuseMap = "mod_assets/textures/env/lava_dif.tga",
normalMap = "assets/textures/env/beach_ground_normal.tga",
emissiveMap = "mod_assets/textures/env/lava_emissive.tga",
displacementMap = "assets/textures/env/ocean_disp.tga",
doubleSided = true,
lighting = true,
alphaTest = false,
castShadow = false,
blendMode = "Opaque",
textureAddressMode = "Wrap",
glossiness = 60,
depthBias = 0,
onUpdate = function(self, time)
self:setTexcoordScaleOffset(0.5, 0.5, math.cos(time*0.0625)*0.0625, math.sin(time*0.0625)*0.0625)
end,
}
defineMaterial{
name = "lava_surface_tiles",
diffuseMap = "mod_assets/textures/env/lava_dif.tga",
normalMap = "assets/textures/env/beach_ground_normal.tga",
emissiveMap = "mod_assets/textures/env/lava_emissive.tga",
displacementMap = "assets/textures/env/ocean_disp.tga",
doubleSided = true,
lighting = true,
alphaTest = false,
castShadow = false,
blendMode = "Opaque",
textureAddressMode = "Wrap",
glossiness = 60,
depthBias = 0,
onUpdate = function(self, time)
self:setTexcoordScaleOffset(0.5, 0.5, math.cos(time*0.0625)*0.0625, math.sin(time*0.0625)*0.0625)
end,
}
defineParticleSystem{
name = "lava_effects",
emitters = {
-- stars
{
emissionRate = 40,
emissionTime = 0,
maxParticles = 200,
boxMin = {-1.3, 0.0,-1.3},
boxMax = { 1.3, 0.5, 1.3},
sprayAngle = {0,360},
velocity = {0,0},
objectSpace = true,
texture = "assets/textures/particles/firefly_dif.tga",
lifetime = {0.5,5.0},
color0 = {4, 0.4, 0.2},
opacity = 1,
fadeIn = 0.1,
fadeOut = 1.0,
size = {0.05, 0.1},
gravity = {0,0.5,0},
airResistance = 0.1,
rotationSpeed = 5,
blendMode = "Additive",
},
-- flames 1
{
emissionRate = 5,
emissionTime = 0,
maxParticles = 5,
boxMin = {-1.5, -0.1,-1.5},
boxMax = { 1.5, -0.1, 1.5},
sprayAngle = {0,360},
velocity = {0,0},
objectSpace = false,
texture = "assets/textures/particles/flame.tga",
frameSize = 32,
frameCount = 40,
frameRate = 60,
lifetime = {0.5,1.0},
color0 = {4, 0.4, 0.2},
opacity = 0.5,
fadeIn = 0.5,
fadeOut = 0.5,
size = {0.5, 0.5},
gravity = {0,0.02,0},
airResistance = 0.1,
rotationSpeed = 1,
blendMode = "Additive",
},
-- flames 2
{
emissionRate = 5,
emissionTime = 0,
maxParticles = 5,
boxMin = {-1.5, -0.1,-1.5},
boxMax = { 1.5, -0.1, 1.5},
sprayAngle = {0,360},
velocity = {0,0},
objectSpace = false,
texture = "assets/textures/particles/flame.tga",
frameSize = 32,
frameCount = 40,
frameRate = 60,
lifetime = {0.5,1.0},
color0 = {4, 0.4, 0.2},
opacity = 0.5,
fadeIn = 0.5,
fadeOut = 0.5,
size = {0.5, 0.5},
gravity = {0,0.02,0},
airResistance = 0.1,
rotationSpeed = -1,
blendMode = "Additive",
},
-- smoke
{
emissionRate = 4,
emissionTime = 0,
maxParticles = 40,
boxMin = {-1.3, 0, -1.3},
boxMax = { 1.3, 1.0, 1.3},
sprayAngle = {0,20},
velocity = {0.4, 0.8},
texture = "assets/textures/particles/smoke_01.tga",
lifetime = {1,5},
color0 = {0.25, 0.20, 0.17},
opacity = 0.5,
fadeIn = 0.3,
fadeOut = 0.9,
size = {1.5, 2},
gravity = {0,0.3,0},
airResistance = 0.1,
rotationSpeed = 0.5,
blendMode = "Translucent",
},
}
}
defineParticleSystem{
name = "under_lava_effects",
emitters = {
-- fog under 1
{
emissionRate = 1,
emissionTime = 0,
maxParticles = 10,
boxMin = {-1.5, -1.0, -1.5},
boxMax = { 1.5, 2.0, 1.5},
sprayAngle = {0,360},
velocity = {0,0},
objectSpace = true,
texture = "assets/textures/particles/fog.tga",
lifetime = {10,10},
color0 = {1.75,0.6,0.2},
opacity = 1,
fadeIn = 2.5,
fadeOut = 2.5,
size = {5, 5},
gravity = {0,0,0},
airResistance = 0.5,
rotationSpeed = -0.3,
blendMode = "Translucent",
},
-- fog under 2
{
emissionRate = 1,
emissionTime = 0,
maxParticles = 10,
boxMin = {-1.5, -1.0, -1.5},
boxMax = { 1.5, 2.0, 1.5},
sprayAngle = {0,360},
velocity = {0,0},
objectSpace = true,
texture = "assets/textures/particles/fog.tga",
lifetime = {10,10},
color0 = {1.75,0.6,0.2},
opacity = 1,
fadeIn = 2.5,
fadeOut = 2.5,
size = {5, 5},
gravity = {0,0,0},
airResistance = 0.5,
rotationSpeed = 0.3,
blendMode = "Translucent",
},
}
}
defineSound{
name = "magma_explosion",
filename = "assets/samples/monsters/magma_golem_meteor_fall_01.wav",
loop = false,
volume = 2.5,
minDistance = 1,
maxDistance = 10,
}