I'm Daveyx0 and I'm quite new to the Grimrock modding scene. Besides this, I mainly mod for Minecraft which is quite something else. I decided to check this out for level design and lua experience.
So the last couple of days I came to know the community and the amazing content that everyone provides here. I also did some tinkering in the editor and got to know lua to a decent extent. After some fooling around I got some things done that I want to share with you. It might not be as amazing as some of the things around here, but I hope people will take the time to check it out.
Thanks for reading and thanks for all the amazing content on this site! Enjoy!
Most of these are made possible by the community.
Simple Fogs
Description:
A very simple way to add a bit of "brrrr" atmosphere to your frozen area.
Code:
Code: Select all
defineObject{
name = "frozen_sky",
baseObject = "forest_day_sky",
components = {
{
class = "Sky",
--farClip = 1000,
sunColor1 = vec(0.0,0.0,0.0,0),
sunColor2 = vec(0.0,0.0,0.0,0),
sunColor3 = vec(0.0,0.0,0.0,0),
fogMode = "dense",
fogColor1 = vec(0.05,0.2,0.2,0),
fogColor2 = vec(0.05,0.2,0.2,0),
fogColor3 = vec(0.05,0.2,0.2,0),
fogRange = {4,40},
ambientIntensity = 0.3,
tonemapSaturation = 0.5,
},
{
class = "FogParticles",
texture = "assets/textures/particles/ice_guardian_smoke.tga",
--texture = "assets/textures/particles/bubble.tga",
--texture = "assets/textures/particles/fog_particle_cemetery.tga",
color1 = vec(0.5,1.0,1.0,0),
color2 = vec(0.5,1.0,1.0,0),
color3 = vec(0.5,1.0,1.0,0),
particleSize = 4.0,
opacity = 0.4,
},
{
class = "LensFlare",
enabled = false,
},
{
class = "Light",
color = vec(0.5,1.0,1.0,0),
type = "directional",
castShadow = true,
enabled = false,
},
{
class = "Light",
name = "ambient",
type = "ambient",
enabled = false,
},
{
class = "LensFlare",
enabled = false,
},
},
}
Description:
Get the feeling of being inside a volcano with this fog.
Code:
Code: Select all
defineObject{
name = "fire_sky",
baseObject = "forest_day_sky",
components = {
{
class = "Sky",
--farClip = 1000,
sunColor1 = vec(0.0,0.0,0.0,0),
sunColor2 = vec(0.0,0.0,0.0,0),
sunColor3 = vec(0.0,0.0,0.0,0),
fogMode = "dense",
fogColor1 = vec(0.05,0.0,0.0,0),
fogColor2 = vec(0.05,0.0,0.0,0),
fogColor3 = vec(0.05,0.0,0.0,0),
fogRange = {16,40},
ambientIntensity = 0.3,
tonemapSaturation = 0.5,
},
{
class = "FogParticles",
texture = "assets/textures/particles/smoke_01.tga",
--texture = "assets/textures/particles/ground_fog_dif.tga",
--texture = "assets/textures/particles/firefly_dif.tga",
--texture = "assets/textures/particles/bubble.tga",
--texture = "assets/textures/particles/fog_particle_cemetery.tga",
color1 = vec(1.0,0.2,0.1,0),
color2 = vec(1.0,0.2,0.1,0),
color3 = vec(1.0,0.2,0.1,0),
particleSize = 4.0,
opacity = 0.1,
},
{
class = "Light",
color = vec(0.2,0.0,0.0,0),
type = "directional",
castShadow = true,
enabled = false,
},
{
class = "Light",
name = "ambient",
type = "ambient",
enabled = false,
},
{
class = "LensFlare",
enabled = false,
},
},
}
Fancy Materials
Description:
After tinkering around with materials thanks to Prozail's slime thread, I found out some neat ways to make it look like monsters are made from gold, ice and steel/silver. It's kind of experimental as it could possible be made to look better and my laptop is decent so I'm not sure about how much it affects fps. I chose wardens because it made the most sense to me. If you want to apply it to a different monster it could be that you have to adjust some of the values. No custom assets needed.
Code:
Code: Select all
defineObject{
name = "golden_warden",
baseObject = "warden",
components = {
{
class = "Model",
model = "assets/models/monsters/guardian.fbx",
material = "golden_warden",
storeSourceData = true,
},
},
}
defineObject{
name = "ice_warden",
baseObject = "warden",
components = {
{
class = "Model",
model = "assets/models/monsters/guardian.fbx",
material = "ice_warden",
storeSourceData = true,
},
},
}
defineObject{
name = "steel_warden",
baseObject = "warden",
components = {
{
class = "Model",
model = "assets/models/monsters/guardian.fbx",
material = "steel_warden",
storeSourceData = true,
},
},
}
defineMaterial{
name = "golden_warden",
diffuseMap = "assets/textures/monsters/guardian_dif.tga",
specularMap = "assets/textures/monsters/guardian_spec.tga",
normalMap = "assets/textures/monsters/guardian_normal.tga",
shadeTex = "assets/textures/monsters/xeloroid_emissive.tga",
shadeTexAngle = 1.0,
crystalIntensity = 300,
shader = "crystal",
doubleSided = false,
lighting = true,
alphaTest = true,
blendMode = "Opaque",
textureAddressMode = "Wrap",
glossiness = 100,
depthBias = 0,
}
defineMaterial{
name = "ice_warden",
diffuseMap = "assets/textures/monsters/guardian_dif.tga",
specularMap = "assets/textures/monsters/guardian_spec.tga",
normalMap = "assets/textures/monsters/guardian_normal.tga",
shadeTex = "assets/textures/monsters/goromorg_shield_shadetex.dds",
shadeTexAngle = 1.0,
crystalIntensity = 300,
shader = "crystal",
doubleSided = false,
lighting = true,
alphaTest = true,
blendMode = "Opaque",
textureAddressMode = "Wrap",
glossiness = 100,
depthBias = 0,
}
defineMaterial{
name = "steel_warden",
diffuseMap = "assets/textures/monsters/guardian_dif.tga",
specularMap = "assets/textures/monsters/guardian_spec.tga",
normalMap = "assets/textures/monsters/guardian_normal.tga",
shadeTex = "assets/textures/monsters/skeleton_warrior_spec.tga",
shadeTexAngle = 0.5,
crystalIntensity = 100,
shader = "crystal",
doubleSided = false,
lighting = true,
alphaTest = true,
blendMode = "Opaque",
textureAddressMode = "Wrap",
glossiness = 100,
depthBias = 0,
}
Code: Select all
import "assets/scripts/monsters/warden.lua"
import "assets/scripts/grimrock1/grimrock1_materials.lua"
More Slimes!
Description:
5 Different types of slimes (also thanks to Prozail for inspiration): Fire, Ice, Plasma (Shock), Dark and Poison. They all have appropriate materials and particles. Some have been changed to use the Melee Brain AI, because they use spells when up close to simulate elemental attacks. It also makes them quite powerful For now, you can simply balance the spells they cast. However I might add custom attacks later. Additionally, I still need to make new hit particles for each kind.
Download: http://www.mediafire.com/download/inbax ... aveyx0.zip
Add to init.lua:
Code: Select all
import "mod_assets/scripts/monsters/slimes.lua"
Description:
5 new coloured torches. This pack includes 1 torch holder that holds all these kinds of torches (including the normal ones) and 10 new torch items (normal and everburning). This was quite the thing to make for me. I had many issues getting this one to work properly and now I'm still not sure if it works 100%. I had to make multiple atlas files as the torches seem to be forced to take index 130 on the gfxAtlas. It requires a bit of setup for you as well.
Instructions:
When put into a level, its ID will be coloured_torch_holder_1 or something. This will spawn the regular torch in the holder. Rename the holder to: blue_torch_holder_X to make a blue one spawn etc. There are: blue_torch_holder, red_torch_holder, yellow_torch_holder, green_torch_holder, purple_torch_holder and just torch_holder. Just name it for example: empty_holder to remove the torch at the start.
Also to make it work in the players hands:
The code below should be put in a script entity. The updateTorch() function should be called as often as possible, for example: I use a timer with an interval of 0.025 to call it constantly. If called to infrequently it appears to reset the torch light color rapidly. This needs to be set up every floor the torches can be used on, unless a party hook of some kind is used. You could choose to stop the function when no torch is hold, but I did not implement this. This one might get optimized with some suggestions from you guys.
Download: http://www.mediafire.com/download/78bqo ... aveyx0.zip
In a script entity:
Code: Select all
function updateTorch()
for k = 1,2 do
for i = 1,4 do
local j = party.party:getChampionByOrdinal(i):getItem(k)
if j ~= nil then
if not(j.go:getComponent("torchitem") == nil) then
if string.find(j:getFormattedName(), "Coloured") then
party.torch:setColor(vec(1.3, 0.68, 0.35))
elseif string.find(j:getFormattedName(), "Blue") then
party.torch:setColor(vec(0.1, 0.4, 1.0))
elseif string.find(j:getFormattedName(), "Red") then
party.torch:setColor(vec(1.0, 0.1, 0.4))
elseif string.find(j:getFormattedName(), "Green") then
party.torch:setColor(vec(0.4, 1.0, 0.1))
elseif string.find(j:getFormattedName(), "Yellow") then
party.torch:setColor(vec(1.0, 0.8, 0.1))
elseif string.find(j:getFormattedName(), "Purple") then
party.torch:setColor(vec(0.5, 0.1, 1.0))
elseif string.find(j:getFormattedName(), "Torch") then
party.torch:setColor(vec(1.3, 0.68, 0.35))
end
end
end
end
end
end
Death Bomb
Description:
A new kind of bomb Based on the "Death" element in the game. New particles and icon. Does quite large amount of damage.
Download: http://www.mediafire.com/download/2i0v5 ... yx0_v3.zip
Tearable Castle Cloth and Dungeon Gobelin
Description:
Simple tearable cloth/goblin like in the first game. It seems that this was planned as most assets are in the game. I'm not sure if somehow has already done this; this is simply my version. It works but requires a bit of setup. Castle cloth and dungeon gobelin version.
Download: http://www.mediafire.com/download/5xhfj ... aveyx0.zip
Note: The download includes a possible gobelin normal map; however it looks pretty odd with it being applied. It did the same thing with the original normal map. I personally prefer the gobelin without it.
Setup:
(Cannot be placed over wall tiles, only over manually placed walls/alcoves)
Please use this order:
- Place an alcove wall (any theme). Disable its surface + clickable components.
- Put the "cloth_alcove_whole" or "gobelin_alcove_whole" behind the alcove. (see image) If it's the castle cloth, make it face the alcove, else (gobelin) make it face the other way.
- Put a invisible wall behind the alcove. (see image) (putting the invisible wall first will make it so you cannot hit the cloth, so add it after the cloth)
- Put the items you want to receive in the surface component of cloth/gobelin. Leaving it empty will result into the surface being disabled, so it can also be placed in front of normal walls.
- Done
Other fun (and obvious)tips:
- Add the aquatic trait to the monster component to allow a monster to walk underwater (like the crab)
Enjoy and all suggestions for improvement are welcome!