New Spells >> show them off here
Re: New Spells >> show them off here
Thanks a lot!
I've been doing this when I should've been sleeping so I am aware that it is a mess, efficiency-wise. The benefits of a script entity are obvious, but it's just me hating to clutter my maps and forcing people to edit their maps, rather than just putting entries into their ini files. I'll improve all of this once I've gotten some sleep. Thanks again.
I've been doing this when I should've been sleeping so I am aware that it is a mess, efficiency-wise. The benefits of a script entity are obvious, but it's just me hating to clutter my maps and forcing people to edit their maps, rather than just putting entries into their ini files. I'll improve all of this once I've gotten some sleep. Thanks again.
Re: New Spells >> show them off here
Grimwold's Area of Effect Spell System
Have been working on this on and off for a few days since Akroma222 and, originally, cromcrom mentioned area effect spells... this is my somewhat generic system for creating such area effect spells.
First you will need a script_entity which I have called grimwold_spell_script. Here you paste in the following:
Then in your spells.lua file you need to paste in the following, which also includes 4 sample spells for you to keep/tweak/overwrite:
To define a new Area of Effect Spell you need to use the following patten, which I will explain.
The early entries should all be familiar to anyone who has defined a spell: name, uiName, skill, level, runes, manaCost. Following that is the meat of the spell definition, the function which takes a number of variables as follows:
#1 - caster:getOrdinal() - this transfers the ordinal of the spellcaster to the function and is necessary for granting XP. This entry should remain unchanged.
#2 - "fire" - this is the type of damage to deal. you can use "fire","cold","shock" or "poison"
#3 - "firestorm" - this is the particle system to use in each square of the spell's effect. you can use any defined particle system, but there are 3 special cases "poison_cloud", "ice_shards" and my new "one_ice_shard" where the name is used to spawn an object instead of an FX with a particle system.
#4 - "fireburst" - this is the sound to play in each square of the spell's effect. Can use any defined sound... preferably one that doesn't loop!
#5 - skill*3 - this is the damage done in each square of the spell's effect. You can use any numerical value.
#6 - "square" - this is the target pattern to use for the spell. supported patterns are "square", "bigsquare", "cone", "smallcone" and "line". If you don't use one of these, then only the square infront of the party will be affected.
The sample spells I have included are:
Firestorm - fire damage to the 8 spaces around the party in a "square". Using my new "firestorm" particle system.
Ice Cone - cold damage to a triangle of 9 squares in front of the party.. in the shape 1,3,5. this uses my new "one_ice_shard" object which creates a single space ice_shard instead of a chain of 4
Lightning Storm - shock damage to 24 spaces around the party like the "square" but 2 spaces wide
Poison Burst - poison damage to a row of 3 squares in front of the party (e.g. one side of the "square")
Have been working on this on and off for a few days since Akroma222 and, originally, cromcrom mentioned area effect spells... this is my somewhat generic system for creating such area effect spells.
First you will need a script_entity which I have called grimwold_spell_script. Here you paste in the following:
Code: Select all
function stormSpell(ordinal,effect,particle,sound,damage,area)
local dx,dy = getForward(party.facing) -- forward
local ldx,ldy = getForward((party.facing+3)%4) -- left
local rdx,rdy = getForward((party.facing+1)%4) -- right
local originator = 2 ^ (ordinal+1)
local effect_translation_table = {fire = 1 , cold = 1, shock = 1, poison = 1 }
local coords = {}
if area == "square" then
coords = {xcoord = {-1,-1,-1,0,0,1,1,1},ycoord = {-1,0,1,-1,1,-1,0,1}}
elseif area == "bigsquare" then
coords = {xcoord = {-2,-2,-2,-2,-2,-1,-1,-1,-1,-1,0,0,0,0,1,1,1,1,1,2,2,2,2,2},ycoord = {-2,-1,0,1,2,-2,-1,0,1,2,-2,-1,1,2,-2,-1,0,1,2,-2,-1,0,1,2}}
elseif area == "cone" then
coords = {xcoord = {dx,2*dx,2*dx+ldx,2*dx+rdx,3*dx,3*dx+2*ldx,3*dx+ldx,3*dx+rdx,3*dx+2*rdx},ycoord = {dy,2*dy,2*dy+ldy,2*dy+rdy,3*dy,3*dy+2*ldy,3*dy+ldy,3*dy+rdy,3*dy+2*rdy}}
elseif area == "smallcone" then
coords = {xcoord = {dx+ldx,dx,dx+rdx},ycoord = {dy+ldy,dy,dy+rdy}}
elseif area == "line" then
coords = {xcoord = {dx,2*dx,3*dx},ycoord = {dy,2*dy,3*dy}}
else
coords = {xcoord = {dx},ycoord = {dy}}
end
local coord_pairs = math.min(#coords["xcoord"],#coords["ycoord"])
for i = 1,coord_pairs do
if particle == "poison_cloud" or particle == "ice_shards" or particle == "one_ice_shard" then
spawn(particle,party.level, party.x + coords["xcoord"][i], party.y + coords["ycoord"][i], party.facing)
else
spawn("fx", party.level, party.x + coords["xcoord"][i], party.y + coords["ycoord"][i], party.facing)
:setParticleSystem(particle)
:translate(0, effect_translation_table[effect], 0)
playSoundAt(sound, party.level, party.x + coords["xcoord"][i], party.y + coords["ycoord"][i])
end
damageTile(party.level, party.x + coords["xcoord"][i], party.y + coords["ycoord"][i], party.facing, originator , effect, damage)
end
end
Code: Select all
-- STORM SPELL PACK --
-- SAMPLE SPELL DEFINITIONS --
defineSpell{
name = "fire_storm",
uiName = "Fire Storm",
skill = "fire_magic",
level = 16,
runes = "AFH",
manaCost = 35,
onCast = function(caster,x,y,direction,skill)
return grimwold_spell_script.stormSpell(caster:getOrdinal(),"fire","firestorm","fireburst",skill*3,"square")
end,
}
defineSpell{
name = "ice_cone",
uiName = "Ice Cone",
skill = "ice_magic",
level = 19,
runes = "FHI",
manaCost = 35,
onCast = function(caster,x,y,direction,skill)
return grimwold_spell_script.stormSpell(caster:getOrdinal(),"cold","one_ice_shard","ice_shard",skill*3,"cone")
end,
}
defineSpell{
name = "lightning_storm",
uiName = "Lightning Storm",
skill = "air_magic",
level = 19,
runes = "CFH",
manaCost = 35,
onCast = function(caster,x,y,direction,skill)
return grimwold_spell_script.stormSpell(caster:getOrdinal(),"shock","shockburst","shockburst",skill*3,"bigsquare")
end,
}
defineSpell{
name = "poison_burst",
uiName = "Poision Burst",
skill = "earth_magic",
level = 13,
runes = "FGH",
manaCost = 35,
onCast = function(caster,x,y,direction,skill)
return grimwold_spell_script.stormSpell(caster:getOrdinal(),"poison","poison_cloud","poison_cloud",skill*3,"square")
end,
}
-- STORM SPELL PACK --
-- SAMPLE SPELL SCROLL ITEM DEFINITIONS --
defineObject{
name = "scroll_fire_storm",
class = "Item",
uiName = "Scroll of Fire Storm",
model = "assets/models/items/scroll_spell.fbx",
gfxIndex = 113,
scroll = true,
spell = "fire_storm",
weight = 0.3,
}
defineObject{
name = "scroll_ice_cone",
class = "Item",
uiName = "Scroll of Ice Storm",
model = "assets/models/items/scroll_spell.fbx",
gfxIndex = 113,
scroll = true,
spell = "ice_cone",
weight = 0.3,
}
defineObject{
name = "scroll_lightning_storm",
class = "Item",
uiName = "Scroll of Lightning Storm",
model = "assets/models/items/scroll_spell.fbx",
gfxIndex = 113,
scroll = true,
spell = "lightning_storm",
weight = 0.3,
}
defineObject{
name = "scroll_poison_burst",
class = "Item",
uiName = "Scroll of Poison Storm",
model = "assets/models/items/scroll_spell.fbx",
gfxIndex = 113,
scroll = true,
spell = "poison_burst",
weight = 0.3,
}
-- STORM SPELL PACK --
-- OBJECT DEFINITIONS --
defineObject{
name = "one_ice_shard",
class = "IceShards",
attackPower = 20,
chainCounter = 1,
--cameraShake = true,
tags = { "spell" },
}
-- STORM SPELL PACK --
-- PARTICLE DEFINITIONS --
defineParticleSystem{
name = "firestorm",
emitters = {
-- flames
{
spawnBurst = true,
maxParticles = 30,
sprayAngle = {0,360},
velocity = {3,5},
objectSpace = true,
texture = "assets/textures/particles/torch_flame.tga",
frameRate = 35,
frameSize = 64,
frameCount = 16,
lifetime = {0.4,0.6},
color0 = {1, 0.5, 0.25},
opacity = 1,
fadeIn = 0.1,
fadeOut = 0.3,
size = {0.5, 1.5},
gravity = {0,-15,0},
airResistance = 0.5,
rotationSpeed = 0,
blendMode = "Additive",
},
-- glow
{
spawnBurst = true,
emissionRate = 1,
emissionTime = 0,
maxParticles = 1,
boxMin = {0,0,-0.1},
boxMax = {0,0,-0.1},
sprayAngle = {0,30},
velocity = {0,0},
texture = "assets/textures/particles/glow.tga",
lifetime = {0.5, 0.5},
colorAnimation = false,
color0 = {1.500000, 0.495000, 0.090000},
opacity = 1,
fadeIn = 0.01,
fadeOut = 0.5,
size = {4, 4},
gravity = {0,0,0},
airResistance = 1,
rotationSpeed = 2,
blendMode = "Additive",
}
}
}
Code: Select all
defineSpell{
name = "fire_storm",
uiName = "Fire Storm",
skill = "fire_magic",
level = 16,
runes = "AFH",
manaCost = 35,
onCast = function(caster,x,y,direction,skill)
return grimwold_spell_script.stormSpell(caster:getOrdinal(),"fire","firestorm","fireburst",skill*3,"square")
end,
}
#1 - caster:getOrdinal() - this transfers the ordinal of the spellcaster to the function and is necessary for granting XP. This entry should remain unchanged.
#2 - "fire" - this is the type of damage to deal. you can use "fire","cold","shock" or "poison"
#3 - "firestorm" - this is the particle system to use in each square of the spell's effect. you can use any defined particle system, but there are 3 special cases "poison_cloud", "ice_shards" and my new "one_ice_shard" where the name is used to spawn an object instead of an FX with a particle system.
#4 - "fireburst" - this is the sound to play in each square of the spell's effect. Can use any defined sound... preferably one that doesn't loop!
#5 - skill*3 - this is the damage done in each square of the spell's effect. You can use any numerical value.
#6 - "square" - this is the target pattern to use for the spell. supported patterns are "square", "bigsquare", "cone", "smallcone" and "line". If you don't use one of these, then only the square infront of the party will be affected.
The sample spells I have included are:
Firestorm - fire damage to the 8 spaces around the party in a "square". Using my new "firestorm" particle system.
Ice Cone - cold damage to a triangle of 9 squares in front of the party.. in the shape 1,3,5. this uses my new "one_ice_shard" object which creates a single space ice_shard instead of a chain of 4
Lightning Storm - shock damage to 24 spaces around the party like the "square" but 2 spaces wide
Poison Burst - poison damage to a row of 3 squares in front of the party (e.g. one side of the "square")
Puzzle Frameworks - http://www.grimrock.net/forum/viewtopic.php?f=14&t=4564
Magic Pack - https://www.nexusmods.com/grimrock/mods/70
Area of Effect Spell System - http://www.grimrock.net/forum/viewtopic ... 150#p44382
Magic Pack - https://www.nexusmods.com/grimrock/mods/70
Area of Effect Spell System - http://www.grimrock.net/forum/viewtopic ... 150#p44382
Re: New Spells >> show them off here
Flatline-
Thank you sir!! However.. the spell is being cast successfully but I am still getting hit by arrows
may it be because 'arrowstest' and 'randomscript' appear to be the same script?? Curious...
Grimwold-
Very impressive indeed, you have just made a "make your own AOE spell toolkit" !! Fantastic... definitely will be using this for AOE business.
I have tried each example spell with each type of 'square' (I think) and all works very well
.... although I am now running out of logical rune combinations lol...
Thank you sir!! However.. the spell is being cast successfully but I am still getting hit by arrows
may it be because 'arrowstest' and 'randomscript' appear to be the same script?? Curious...
Grimwold-
Very impressive indeed, you have just made a "make your own AOE spell toolkit" !! Fantastic... definitely will be using this for AOE business.
I have tried each example spell with each type of 'square' (I think) and all works very well
.... although I am now running out of logical rune combinations lol...
Labyrinth of Lies (viewtopic.php?f=14&t=4400)
Legacy of Lies (viewtopic.php?f=22&t=12983&hilit=+legacy)
Legacy of Lies (viewtopic.php?f=22&t=12983&hilit=+legacy)
Re: New Spells >> show them off here
Post deleted - freezing blast and other variations posted but damage tile forgotten, will re-post once it is fixed.
EDIT - Thanks Grimwold, got Freeze Monster online now Very cool indeed
EDIT - Thanks Grimwold, got Freeze Monster online now Very cool indeed
Last edited by akroma222 on Fri Nov 23, 2012 8:36 am, edited 1 time in total.
Labyrinth of Lies (viewtopic.php?f=14&t=4400)
Legacy of Lies (viewtopic.php?f=22&t=12983&hilit=+legacy)
Legacy of Lies (viewtopic.php?f=22&t=12983&hilit=+legacy)
Re: New Spells >> show them off here
I just gotta say, this spell thread is incredible, so much goodness here! Maybe the juiciest stuff could be condensed and put on the wiki
Finished Dungeons - complete mods to play
Re: New Spells >> show them off here
I must admit I have neglected the wiki. I will certainly try to put some of my stuff up there.Komag wrote:I just gotta say, this spell thread is incredible, so much goodness here! Maybe the juiciest stuff could be condensed and put on the wiki
Puzzle Frameworks - http://www.grimrock.net/forum/viewtopic.php?f=14&t=4564
Magic Pack - https://www.nexusmods.com/grimrock/mods/70
Area of Effect Spell System - http://www.grimrock.net/forum/viewtopic ... 150#p44382
Magic Pack - https://www.nexusmods.com/grimrock/mods/70
Area of Effect Spell System - http://www.grimrock.net/forum/viewtopic ... 150#p44382
Re: New Spells >> show them off here
*Edit* Updated my Spell pack with Infravision spell 26 nov.
Updated my magic pack in line with Grimwolds excellent ideas and Akromas thoughts. Still learning, but this update makes it somewhat more coherent:
Some of the fixes:
Corrected bugs pointed out by Grimwold
Added Arrowshield (works against all forms of ranged attacks)
Streamlined in-game script
Some balance changes.
Added notes for the spells
Get it from this post:
viewtopic.php?f=14&t=3475&p=44161#p44161
Updated my magic pack in line with Grimwolds excellent ideas and Akromas thoughts. Still learning, but this update makes it somewhat more coherent:
Some of the fixes:
Corrected bugs pointed out by Grimwold
Added Arrowshield (works against all forms of ranged attacks)
Streamlined in-game script
Some balance changes.
Added notes for the spells
Get it from this post:
viewtopic.php?f=14&t=3475&p=44161#p44161
Last edited by flatline on Wed Nov 28, 2012 8:46 am, edited 1 time in total.
- Soaponarope
- Posts: 180
- Joined: Thu Oct 04, 2012 3:21 am
Re: New Spells >> show them off here
A see through walls spell, could it be done?
I'm thinking of the spell from Dungeon Master which opens a window through the wall allowing you to look through. I have an idea of how the script would look(using self.facing and swapping props for a few seconds then back), but is it possible to swap out sections of actual wall, or would the entire dungeon have to be made of placeable walls like secret doors? Just brainstorming, could make for some cool puzzles.
I'm thinking of the spell from Dungeon Master which opens a window through the wall allowing you to look through. I have an idea of how the script would look(using self.facing and swapping props for a few seconds then back), but is it possible to swap out sections of actual wall, or would the entire dungeon have to be made of placeable walls like secret doors? Just brainstorming, could make for some cool puzzles.
Re: New Spells >> show them off here
Secret Door Walls (ie the thin walls) could be done easily by replacing it with a transparent obstacle for a moment, but the solid walls would be a lot harder.Converting my Infravision spell could convey a lot of info through different particles, for example letting keys shine golden, monsters red and doors green. You get the point.Soaponarope wrote:A see through walls spell, could it be done?
I'm thinking of the spell from Dungeon Master which opens a window through the wall allowing you to look through. I have an idea of how the script would look(using self.facing and swapping props for a few seconds then back), but is it possible to swap out sections of actual wall, or would the entire dungeon have to be made of placeable walls like secret doors? Just brainstorming, could make for some cool puzzles.
Come to think of it, it could be done for solid walls too but would require cloning every item you want to be visible through a wall, adding a negative depthBias to it, and then spawning the cloned version on top of the real version, say within 3 squares of the party. You would then see everything within 3 of your party through walls.
Theoretical example:
1.Clone the regular door
2. Give it a negative depthBias
3. Make a spell that spawns the cloned door on top of any regular door within 3 of the party.
4. Repeat for every item you want visible with the spell.
4. Cast spell
5. Profit
6. Remember to delete the spawned items after a set time.
Re: New Spells >> show them off here
Just fixed a bug in my Burn Monster spell that didn't materialise till a dungeon containing the mod was exported and the game saved after casting it. Many thanks to Akroma222 for pointing it out.
I've updated the original script and have updated my magic pack on nexus (link in my sig). I've also included the "sample" Area Effect spells in the magic pack.
I've updated the original script and have updated my magic pack on nexus (link in my sig). I've also included the "sample" Area Effect spells in the magic pack.
Puzzle Frameworks - http://www.grimrock.net/forum/viewtopic.php?f=14&t=4564
Magic Pack - https://www.nexusmods.com/grimrock/mods/70
Area of Effect Spell System - http://www.grimrock.net/forum/viewtopic ... 150#p44382
Magic Pack - https://www.nexusmods.com/grimrock/mods/70
Area of Effect Spell System - http://www.grimrock.net/forum/viewtopic ... 150#p44382