Castable Magic Ladder! Cast it with the rune symbols 7 8 5 6 3. It makes a stair step pattern. Requires concentration 2 and air magic 2
Only valid locations will summon a ladder. You can only cast it against a wall and the elevation above you must be accessible to drop down from by one level to be considered a valid location.
Name a script entity "ladder_remover_script" in your dungeon somewhere and paste the following script into it.
Code: Select all
function removeladder()
if magic_spell_ladder ~= nil then
magic_spell_ladder:destroyDelayed(.01)
playSound("spell_expires")
end
if magic_spell_ladder_trigger ~= nil then
magic_spell_ladder_trigger:destroyDelayed(.01)
end
end
function checkladder(caster)
if magic_spell_ladder ~= nil then
if party.party:getChampion(caster):getEnergy() >= 5 then
if magic_spell_ladder_trigger.floortrigger:isActivated() then
delayedCall("ladder_remover_script",0.1,"checkladder", caster)
else
delayedCall("ladder_remover_script",0.1,"checkladder", caster)
party.party:getChampion(caster):regainEnergy(-1)
end
else
removeladder()
end
end
end
Paste the following code into spells.lua
Code: Select all
defineSpell{
name = "magic_ladder_spell",
uiName = "Magic Ladder",
skill = "air_magic",
requirements = {"air_magic", 2, "concentration", 2},
gesture = 78563,
manaCost = 10,
icon = 14,
spellIcon = 13,
description = "Conjure a magical ladder in front of the party.",
onCast = function(champion, x, y, direction, elevation, skillLevel)
local myx = x
local myy = y
if direction == 0 then
myy = y - 1
end
if direction == 1 then
myx = x + 1
end
if direction == 2 then
myy = y + 1
end
if direction == 3 then
myx = x - 1
end
if findEntity("magic_spell_ladder") == nil then
local ladderelevation = party.map:getElevation(myx,myy)
local ladderceiling = party.map:getCeilingElevation(myx,myy)
local partyceiling = party.map:getCeilingElevation(x,y)
local hasladder = false
local wall = false
for i in party.map:entitiesAt(x,y) do
if i.elevation == elevation then
if i.name == "ladder" or i.name == "ladder_magic" or i.name == "ladder_metal" or i.name == "ladder_metal_4m" then
if i.facing == direction then
hasladder = true
end
end
end
end
if party.map:checkLineOfSight(x,y,myx,myy,elevation) then
else
wall = true
end
if ladderelevation == elevation + 1 and ladderceiling > ladderelevation and ladderceiling > elevation + 1 and hasladder == false and partyceiling >= elevation + 2 and wall == true and party.map:checkLineOfSight(x,y,myx,myy,elevation+1) then
spawn("ladder_magic",party.level,x,y,direction,elevation,"magic_spell_ladder")
local ele2 = elevation + 1
spawn("floor_trigger",party.level,x,y,direction,ele2, "magic_spell_ladder_trigger")
magic_spell_ladder_trigger.floortrigger:setTriggeredByDigging(false)
magic_spell_ladder_trigger.floortrigger:setTriggeredByItem(false)
magic_spell_ladder_trigger.floortrigger:setTriggeredByMonster(false)
magic_spell_ladder_trigger.floortrigger:setTriggeredByParty(true)
magic_spell_ladder_trigger.floortrigger:addConnector("onDeactivate", "ladder_remover_script", "removeladder")
delayedCall("ladder_remover_script",0.1,"checkladder", champion:getOrdinal())
playSound("generic_spell")
else
hudPrint("You can not create a magic ladder here.")
playSound("spell_fizzle")
end
else
delayedCall("ladder_remover_script",0.1,"removeladder")
playSound("spell_fizzle")
end
end,
}
Paste the following into materials.lua
Code: Select all
defineParticleSystem{
name = "magic_ladder",
emitters = {
{
velocity = {
0.1,
0.4
},
lifetime = {
3,
3
},
maxParticles = 100,
rotationSpeed = 0.3,
blendMode = "Additive",
emitterShape = "MeshShape",
airResistance = 0.1,
emissionRate = 10,
size = {
1,
2
},
fadeIn = 2,
gravity = {
0,
0,
0
},
color0 = {
0.15,
0.1,
0.125
},
objectSpace = true,
fadeOut = 2,
sprayAngle = {
0,
360
},
texture = "assets/textures/particles/fog.tga",
emissionTime = 0,
opacity = 0.2
},
{
velocity = {
0,
0.1
},
lifetime = {
1,
1.7
},
maxParticles = 200,
rotationSpeed = 2,
blendMode = "Additive",
emitterShape = "MeshShape",
airResistance = 0.1,
emissionRate = 100,
size = {
0.05,
0.15
},
fadeIn = 0.1,
gravity = {
0,
-0.5,
0
},
color0 = {
1.5,
1,
1.25
},
objectSpace = true,
fadeOut = 0.5,
sprayAngle = {
0,
30
},
texture = "assets/textures/particles/glitter_silver.tga",
emissionTime = 0,
opacity = 1
},
{
velocity = {
0,
0.1
},
lifetime = {
1,
1
},
maxParticles = 400,
rotationSpeed = 2,
blendMode = "Additive",
emitterShape = "MeshShape",
airResistance = 0.1,
emissionRate = 400,
size = {
0.05,
0.25
},
fadeIn = 0.1,
gravity = {
0,
-0.2,
0
},
color0 = {
2.25,
1.5,
1.875
},
objectSpace = true,
fadeOut = 0.5,
sprayAngle = {
0,
30
},
texture = "assets/textures/particles/glitter_silver.tga",
emissionTime = 0,
opacity = 1
}
}
}
Paste the following into objects.lua
Code: Select all
defineObject{
components =
{
{
name = "model",
model = "assets/models/env/ladder_metal.fbx",
enabled = false,
storeSourceData = true,
class = "Model",
offset = vec(0,0,-0.4),
},
{
name = "ladder",
class = "Ladder"
},
{
name = "particle",
class = "Particle",
emitterMesh = "assets/models/env/ladder_metal.fbx",
particleSystem = "magic_ladder",
offset = vec(0,0,-0.4),
},
},
baseObject = "base_wall_decoration",
editorIcon = 248,
name = "ladder_magic",
automapIcon = 140
}