Have the Goromorg Returned? [LOG1 monsters]

Ask for help about creating mods and scripts for Grimrock 2 or share your tips, scripts, tools and assets with other modders here. Warning: forum contains spoilers!
Post Reply
User avatar
Eightball
Posts: 48
Joined: Thu Jan 09, 2014 8:21 am

Have the Goromorg Returned? [LOG1 monsters]

Post by Eightball »

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.
User avatar
Isaac
Posts: 3188
Joined: Fri Mar 02, 2012 10:02 pm

Re: Have the Goromorg Returned? [LOG1 monsters]

Post by Isaac »

The Goromorg assets exist in the LoG2 asset Pack, except for their sound effects.
SpoilerShow
Image
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. 8-)
User avatar
Eightball
Posts: 48
Joined: Thu Jan 09, 2014 8:21 am

Re: Have the Goromorg Returned? [LOG1 monsters]

Post by Eightball »

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.
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,
}
}
}
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:
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,
}
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.
Post Reply