I saw the thread where people were trying to bring back the grimrock1 monsters,
but has anyone successfully brought back the goromorg? I would like to try converting
my LOG1 mod into a LOG2 mod and perhaps finish it, and the plot was heavily goromorg intensive.
If nothing else, I suppose I will have to mess with the wizard and his robe colors. I had made
goromorg who were specialists of elemental masteries. Their infamous shield is completely optional to me.
Have the Goromorg Returned? [LOG1 monsters]
Re: Have the Goromorg Returned? [LOG1 monsters]
The Goromorg assets exist in the LoG2 asset Pack, except for their sound effects.
It's pretty much done for us... Making the Goromorg is only a matter of defining the material for the model, and providing suitable sound effects.
Support for the Goromorg shield spell is built in.
SpoilerShow

Support for the Goromorg shield spell is built in.

Re: Have the Goromorg Returned? [LOG1 monsters]
Thanks, Isaac. That's actually very helpful. So it's up to us to find new sound effects?
I suppose that's the limitation described by the disclaimer that the asset pack does not include some effects for licensing reasons?
That may work out for me in my favor since I was changing their spells and such anyway.
Edit: I got it to work. For those of you, like me, who are code noobs. I will spell out what I did. I just copied this script from the LOG1 asset pack and put it into my mod's monsters.lua file.
Then I had to redefine the missing sound effects so that my mod would load. For the time being, I decided to use Sutekh's quick fix which I'll post here:
Yay! We have a working Goromorg. Now to figure out how to cloneObject in LOG2 terms so that I can fuss with goromorg robe colors again.
I suppose that's the limitation described by the disclaimer that the asset pack does not include some effects for licensing reasons?
That may work out for me in my favor since I was changing their spells and such anyway.
Edit: I got it to work. For those of you, like me, who are code noobs. I will spell out what I did. I just copied this script from the LOG1 asset pack and put it into my mod's monsters.lua file.
SpoilerShow
-- goromorg
defineObject{
name = "goromorg",
baseObject = "base_monster",
components = {
{
class = "Model",
model = "assets/models/monsters/goromorg.fbx",
storeSourceData = true,
},
{
class = "Animation",
animations = {
idle = "assets/animations/monsters/goromorg/goromorg_idle.fbx",
moveForward = "assets/animations/monsters/goromorg/goromorg_walk.fbx",
strafeLeft = "assets/animations/monsters/goromorg/goromorg_strafe_left.fbx",
strafeRight = "assets/animations/monsters/goromorg/goromorg_strafe_right.fbx",
turnLeft = "assets/animations/monsters/goromorg/goromorg_turn_left.fbx",
turnRight = "assets/animations/monsters/goromorg/goromorg_turn_right.fbx",
attack = "assets/animations/monsters/goromorg/goromorg_attack.fbx",
getHitFrontLeft = "assets/animations/monsters/goromorg/goromorg_get_hit_front_left.fbx",
getHitFrontRight = "assets/animations/monsters/goromorg/goromorg_get_hit_front_right.fbx",
getHitBack = "assets/animations/monsters/goromorg/goromorg_get_hit_back.fbx",
getHitLeft = "assets/animations/monsters/goromorg/goromorg_get_hit_left.fbx",
getHitRight = "assets/animations/monsters/goromorg/goromorg_get_hit_right.fbx",
fall = "assets/animations/monsters/goromorg/goromorg_get_hit.fbx",
},
currentLevelOnly = true,
},
{
class = "Monster",
meshName = "goromorg_mesh",
footstepSound = "goromorg_footstep",
hitSound = "goromorg_hit",
dieSound = "goromorg_die",
hitEffect = "hit_dust",
capsuleHeight = 0.8,
capsuleRadius = 0.25,
collisionRadius = 0.8,
health = 400, -- goromorg shield is on top of this
protection = 0,
exp = 1000,
immunities = { "sleep", "blinded" },
},
{
class = "GoromorgBrain",
name = "brain",
sight = 5,
seeInvisible = true,
allAroundSight = true,
},
{
class = "MonsterMove",
name = "move",
sound = "goromorg_walk",
cooldown = 1,
animationSpeed = 1.3,
},
{
class = "MonsterTurn",
name = "turn",
sound = "goromorg_walk",
animationSpeed = 1.5,
},
{
class = "MonsterAttack",
name = "rangedAttack",
attackPower = 40,
cooldown = 6,
animation = "attack",
sound = "goromorg_attack",
onAttack = function(self)
local h = 1.4
local r = math.random()
if r < 0.45 then
-- cast fireball
self.go.monster:shootProjectile("fireball_large", h, 40)
elseif r < 0.7 then
-- cast lightning bolt
self.go.monster:shootProjectile("lightning_bolt_greater", h, 40)
elseif r < 0.8 then
-- cast poison bolt
self.go.monster:shootProjectile("poison_bolt", h, 40)
else
-- cast ice shards
local dx,dy = getForward(self.go.facing)
local spell = spawn("ice_shards", self.go.level, self.go.x + dx, self.go.y + dy, self.go.facing, self.go.elevation)
spell.tiledamager:setAttackPower(40)
end
end,
},
{
class = "GoromorgShield",
},
{
class = "Particle",
parentNode = "light1",
particleSystem = "goromorg_lantern",
},
{
class = "Light",
parentNode = "light1",
color = vec(0.5, 1.0, 2.5),
brightness = 4,
range = 4.5,
fillLight = true,
},
},
}
defineAnimationEvent{
animation = "assets/animations/monsters/goromorg/goromorg_walk.fbx",
event = "footstep",
frame = 1,
}
defineAnimationEvent{
animation = "assets/animations/monsters/goromorg/goromorg_move_back.fbx",
event = "footstep",
frame = 1,
}
defineAnimationEvent{
animation = "assets/animations/monsters/goromorg/goromorg_strafe_left.fbx",
event = "footstep",
frame = 1,
}
defineAnimationEvent{
animation = "assets/animations/monsters/goromorg/goromorg_strafe_right.fbx",
event = "footstep",
frame = 1,
}
defineAnimationEvent{
animation = "assets/animations/monsters/goromorg/goromorg_attack.fbx",
event = "attack",
frame = 10,
}
defineParticleSystem{
name = "goromorg_lantern",
emitters = {
-- smoke
{
emissionRate = 5,
emissionTime = 0,
maxParticles = 50,
boxMin = {-0.03, 0.1, -0.03},
boxMax = { 0.03, 0.1, 0.03},
sprayAngle = {0,30},
velocity = {0.1,0.5},
texture = "assets/textures/particles/smoke_01.tga",
lifetime = {1,1.25},
color0 = {0.08, 0.11, 0.15},
opacity = 1,
fadeIn = 0.5,
fadeOut = 0.5,
size = {0.3, 0.6},
gravity = {0,0,0},
airResistance = 0.1,
rotationSpeed = 0.6,
blendMode = "Translucent",
objectSpace = false,
},
-- flames
{
emissionRate = 30,
emissionTime = 0,
maxParticles = 100,
boxMin = {-0.03, -0.07, 0.03},
boxMax = { 0.03, -0.07, -0.03},
sprayAngle = {0,10},
velocity = {0.1, 0.4},
texture = "assets/textures/particles/goromorg_lantern.tga",
frameRate = 45,
frameSize = 64,
frameCount = 16,
lifetime = {0.25, 0.85},
colorAnimation = false,
color0 = {1.5, 1.5, 1.5},
opacity = 1,
fadeIn = 0.15,
fadeOut = 0.3,
size = {0.17, 0.015},
gravity = {0,0,0},
airResistance = 1.0,
rotationSpeed = 1,
blendMode = "Additive",
depthBias = -0.0005,
objectSpace = true,
},
-- inner glow
{
spawnBurst = true,
emissionRate = 1,
emissionTime = 0,
maxParticles = 1,
boxMin = {0,-0.05,0.0},
boxMax = {0,-0.05,0.0},
sprayAngle = {0,30},
velocity = {0,0},
texture = "assets/textures/particles/glow.tga",
lifetime = {1000000, 1000000},
colorAnimation = false,
color0 = {0.07, 0.11, 0.23},
opacity = 1,
fadeIn = 0.1,
fadeOut = 0.1,
size = {0.5, 0.5},
gravity = {0,0,0},
airResistance = 1,
rotationSpeed = 0,
blendMode = "Additive",
depthBias = -0.0005,
objectSpace = true,
},
-- outer glow
{
spawnBurst = true,
emissionRate = 1,
emissionTime = 0,
maxParticles = 1,
boxMin = {0,0,0},
boxMax = {0,0,0},
sprayAngle = {0,30},
velocity = {0,0},
texture = "assets/textures/particles/glow.tga",
lifetime = {1000000, 1000000},
colorAnimation = false,
color0 = {0.07, 0.11, 0.23},
opacity = 0.25,
fadeIn = 0.1,
fadeOut = 0.1,
size = {2, 2},
gravity = {0,0,0},
airResistance = 1,
rotationSpeed = 0,
blendMode = "Additive",
depthBias = -0.0005,
objectSpace = true,
}
}
}
defineObject{
name = "goromorg",
baseObject = "base_monster",
components = {
{
class = "Model",
model = "assets/models/monsters/goromorg.fbx",
storeSourceData = true,
},
{
class = "Animation",
animations = {
idle = "assets/animations/monsters/goromorg/goromorg_idle.fbx",
moveForward = "assets/animations/monsters/goromorg/goromorg_walk.fbx",
strafeLeft = "assets/animations/monsters/goromorg/goromorg_strafe_left.fbx",
strafeRight = "assets/animations/monsters/goromorg/goromorg_strafe_right.fbx",
turnLeft = "assets/animations/monsters/goromorg/goromorg_turn_left.fbx",
turnRight = "assets/animations/monsters/goromorg/goromorg_turn_right.fbx",
attack = "assets/animations/monsters/goromorg/goromorg_attack.fbx",
getHitFrontLeft = "assets/animations/monsters/goromorg/goromorg_get_hit_front_left.fbx",
getHitFrontRight = "assets/animations/monsters/goromorg/goromorg_get_hit_front_right.fbx",
getHitBack = "assets/animations/monsters/goromorg/goromorg_get_hit_back.fbx",
getHitLeft = "assets/animations/monsters/goromorg/goromorg_get_hit_left.fbx",
getHitRight = "assets/animations/monsters/goromorg/goromorg_get_hit_right.fbx",
fall = "assets/animations/monsters/goromorg/goromorg_get_hit.fbx",
},
currentLevelOnly = true,
},
{
class = "Monster",
meshName = "goromorg_mesh",
footstepSound = "goromorg_footstep",
hitSound = "goromorg_hit",
dieSound = "goromorg_die",
hitEffect = "hit_dust",
capsuleHeight = 0.8,
capsuleRadius = 0.25,
collisionRadius = 0.8,
health = 400, -- goromorg shield is on top of this
protection = 0,
exp = 1000,
immunities = { "sleep", "blinded" },
},
{
class = "GoromorgBrain",
name = "brain",
sight = 5,
seeInvisible = true,
allAroundSight = true,
},
{
class = "MonsterMove",
name = "move",
sound = "goromorg_walk",
cooldown = 1,
animationSpeed = 1.3,
},
{
class = "MonsterTurn",
name = "turn",
sound = "goromorg_walk",
animationSpeed = 1.5,
},
{
class = "MonsterAttack",
name = "rangedAttack",
attackPower = 40,
cooldown = 6,
animation = "attack",
sound = "goromorg_attack",
onAttack = function(self)
local h = 1.4
local r = math.random()
if r < 0.45 then
-- cast fireball
self.go.monster:shootProjectile("fireball_large", h, 40)
elseif r < 0.7 then
-- cast lightning bolt
self.go.monster:shootProjectile("lightning_bolt_greater", h, 40)
elseif r < 0.8 then
-- cast poison bolt
self.go.monster:shootProjectile("poison_bolt", h, 40)
else
-- cast ice shards
local dx,dy = getForward(self.go.facing)
local spell = spawn("ice_shards", self.go.level, self.go.x + dx, self.go.y + dy, self.go.facing, self.go.elevation)
spell.tiledamager:setAttackPower(40)
end
end,
},
{
class = "GoromorgShield",
},
{
class = "Particle",
parentNode = "light1",
particleSystem = "goromorg_lantern",
},
{
class = "Light",
parentNode = "light1",
color = vec(0.5, 1.0, 2.5),
brightness = 4,
range = 4.5,
fillLight = true,
},
},
}
defineAnimationEvent{
animation = "assets/animations/monsters/goromorg/goromorg_walk.fbx",
event = "footstep",
frame = 1,
}
defineAnimationEvent{
animation = "assets/animations/monsters/goromorg/goromorg_move_back.fbx",
event = "footstep",
frame = 1,
}
defineAnimationEvent{
animation = "assets/animations/monsters/goromorg/goromorg_strafe_left.fbx",
event = "footstep",
frame = 1,
}
defineAnimationEvent{
animation = "assets/animations/monsters/goromorg/goromorg_strafe_right.fbx",
event = "footstep",
frame = 1,
}
defineAnimationEvent{
animation = "assets/animations/monsters/goromorg/goromorg_attack.fbx",
event = "attack",
frame = 10,
}
defineParticleSystem{
name = "goromorg_lantern",
emitters = {
-- smoke
{
emissionRate = 5,
emissionTime = 0,
maxParticles = 50,
boxMin = {-0.03, 0.1, -0.03},
boxMax = { 0.03, 0.1, 0.03},
sprayAngle = {0,30},
velocity = {0.1,0.5},
texture = "assets/textures/particles/smoke_01.tga",
lifetime = {1,1.25},
color0 = {0.08, 0.11, 0.15},
opacity = 1,
fadeIn = 0.5,
fadeOut = 0.5,
size = {0.3, 0.6},
gravity = {0,0,0},
airResistance = 0.1,
rotationSpeed = 0.6,
blendMode = "Translucent",
objectSpace = false,
},
-- flames
{
emissionRate = 30,
emissionTime = 0,
maxParticles = 100,
boxMin = {-0.03, -0.07, 0.03},
boxMax = { 0.03, -0.07, -0.03},
sprayAngle = {0,10},
velocity = {0.1, 0.4},
texture = "assets/textures/particles/goromorg_lantern.tga",
frameRate = 45,
frameSize = 64,
frameCount = 16,
lifetime = {0.25, 0.85},
colorAnimation = false,
color0 = {1.5, 1.5, 1.5},
opacity = 1,
fadeIn = 0.15,
fadeOut = 0.3,
size = {0.17, 0.015},
gravity = {0,0,0},
airResistance = 1.0,
rotationSpeed = 1,
blendMode = "Additive",
depthBias = -0.0005,
objectSpace = true,
},
-- inner glow
{
spawnBurst = true,
emissionRate = 1,
emissionTime = 0,
maxParticles = 1,
boxMin = {0,-0.05,0.0},
boxMax = {0,-0.05,0.0},
sprayAngle = {0,30},
velocity = {0,0},
texture = "assets/textures/particles/glow.tga",
lifetime = {1000000, 1000000},
colorAnimation = false,
color0 = {0.07, 0.11, 0.23},
opacity = 1,
fadeIn = 0.1,
fadeOut = 0.1,
size = {0.5, 0.5},
gravity = {0,0,0},
airResistance = 1,
rotationSpeed = 0,
blendMode = "Additive",
depthBias = -0.0005,
objectSpace = true,
},
-- outer glow
{
spawnBurst = true,
emissionRate = 1,
emissionTime = 0,
maxParticles = 1,
boxMin = {0,0,0},
boxMax = {0,0,0},
sprayAngle = {0,30},
velocity = {0,0},
texture = "assets/textures/particles/glow.tga",
lifetime = {1000000, 1000000},
colorAnimation = false,
color0 = {0.07, 0.11, 0.23},
opacity = 0.25,
fadeIn = 0.1,
fadeOut = 0.1,
size = {2, 2},
gravity = {0,0,0},
airResistance = 1,
rotationSpeed = 0,
blendMode = "Additive",
depthBias = -0.0005,
objectSpace = true,
}
}
}
SpoilerShow
defineSound{
name = "goromorg_walk",
filename = {
"assets/samples/monsters/wizard_warp_01.wav",
"assets/samples/monsters/wizard_warp_02.wav",
"assets/samples/monsters/wizard_warp_03.wav",
},
loop = false,
volume = 0.2,
minDistance = 2,
maxDistance = 12,
}
defineSound{
name = "goromorg_footstep",
filename = {
"assets/samples/monsters/wizard_warp_01.wav",
"assets/samples/monsters/wizard_warp_02.wav",
"assets/samples/monsters/wizard_warp_03.wav",
},
loop = false,
volume = 0.1,
minDistance = 1,
maxDistance = 10,
}
defineSound{
name = "goromorg_attack",
filename = "assets/samples/monsters/wizard_ranged_attack_01.wav",
loop = false,
volume = 1.5,
minDistance = 2,
maxDistance = 10,
}
defineSound{
name = "goromorg_hit",
filename = {
"assets/samples/weapons/hit_bone_01.wav",
"assets/samples/weapons/hit_bone_02.wav",
},
loop = false,
volume = 1,
minDistance = 1,
maxDistance = 10,
}
defineSound{
name = "goromorg_die",
filename = "assets/samples/monsters/uggardian_die_01.wav",
loop = false,
volume = 1,
minDistance = 1,
maxDistance = 10,
}
name = "goromorg_walk",
filename = {
"assets/samples/monsters/wizard_warp_01.wav",
"assets/samples/monsters/wizard_warp_02.wav",
"assets/samples/monsters/wizard_warp_03.wav",
},
loop = false,
volume = 0.2,
minDistance = 2,
maxDistance = 12,
}
defineSound{
name = "goromorg_footstep",
filename = {
"assets/samples/monsters/wizard_warp_01.wav",
"assets/samples/monsters/wizard_warp_02.wav",
"assets/samples/monsters/wizard_warp_03.wav",
},
loop = false,
volume = 0.1,
minDistance = 1,
maxDistance = 10,
}
defineSound{
name = "goromorg_attack",
filename = "assets/samples/monsters/wizard_ranged_attack_01.wav",
loop = false,
volume = 1.5,
minDistance = 2,
maxDistance = 10,
}
defineSound{
name = "goromorg_hit",
filename = {
"assets/samples/weapons/hit_bone_01.wav",
"assets/samples/weapons/hit_bone_02.wav",
},
loop = false,
volume = 1,
minDistance = 1,
maxDistance = 10,
}
defineSound{
name = "goromorg_die",
filename = "assets/samples/monsters/uggardian_die_01.wav",
loop = false,
volume = 1,
minDistance = 1,
maxDistance = 10,
}