I'd be very surprised if you managed to get enough into a <100 MB dat file to make the game run out of address space, unless you included an outright zip bomb, or deliberately made savegames huge with millions of objects. Even if you import all standard materials, you have a pretty big margin. But yes I'm not sure why anyone would feel a need to use most of the monsters.
I'm not aware of any issues with the goromorg shield. It's been tested pretty thoroughly since it's on one of the main game's bosses! This is what my goromorg definition looks like:
Code: Select all
-- for the "retro" inquisitor room, define goromorgs. goromorg sounds aren't in
-- grimrock2.dat so we have to replace them
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",
hitSound = "slime_hit", -- identical to goromorg_hit
dieSound = "goromorg_die",
hitEffect = "hit_dust",
capsuleHeight = 0.8,
capsuleRadius = 0.25,
collisionRadius = 0.8,
health = 400,
protection = 0,
exp = 1000,
immunities = { "sleep", "blinded" },
},
{
class = "GoromorgBrain",
name = "brain",
sight = 5,
seeInvisible = true,
allAroundSight = true,
morale = 100,
},
{
class = "MonsterMove",
name = "move",
sound = "dark_acolyte_walk",
cooldown = 1,
animationSpeed = 1.3,
},
{
class = "MonsterTurn",
name = "turn",
sound = "dark_acolyte_walk",
animationSpeed = 1.5,
},
{
class = "MonsterAttack",
name = "rangedAttack",
attackPower = 40,
cooldown = 6,
animation = "attack",
sound = "wizard_ranged_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,
},
},
}
defineMaterial{
name = "goromorog1",
diffuseMap = "assets/textures/monsters/goromorg_dif.tga",
specularMap = "assets/textures/monsters/goromorg_spec.tga",
normalMap = "assets/textures/monsters/goromorg_normal.tga",
doubleSided = false,
lighting = true,
alphaTest = true,
blendMode = "Opaque",
textureAddressMode = "Wrap",
glossiness = 20,
depthBias = 0,
}
defineSound{
name = "goromorg_die",
filename = "assets/samples/monsters/tentacles_die_01.wav",
loop = false,
volume = 1,
minDistance = 1,
maxDistance = 10,
}
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,
}
}
}
Note that this is based off the LoG2 goromorg definition with missing sounds, not the LoG1 goromorgs, so the AI, animation speed, and nature of the attacks is different (in particular it includes melee damage, like the ice guardian and wizard).