summaryrefslogtreecommitdiff
path: root/lib/mods/theme/scpt/s_earth.lua
diff options
context:
space:
mode:
Diffstat (limited to 'lib/mods/theme/scpt/s_earth.lua')
-rw-r--r--lib/mods/theme/scpt/s_earth.lua184
1 files changed, 184 insertions, 0 deletions
diff --git a/lib/mods/theme/scpt/s_earth.lua b/lib/mods/theme/scpt/s_earth.lua
new file mode 100644
index 00000000..23aa001c
--- /dev/null
+++ b/lib/mods/theme/scpt/s_earth.lua
@@ -0,0 +1,184 @@
+-- The earth school
+
+STONESKIN = add_spell
+{
+ ["name"] = "Stone Skin",
+ ["school"] = SCHOOL_EARTH,
+ ["level"] = 1,
+ ["mana"] = 1,
+ ["mana_max"] = 50,
+ ["fail"] = 10,
+ ["inertia"] = { 2, 50 },
+ ["spell"] = function()
+ local type
+ if get_level(STONESKIN, 50) >= 25 then
+ type = SHIELD_COUNTER
+ else
+ type = 0
+ end
+ return set_shield(randint(10) + 10 + get_level(STONESKIN, 100), 10 + get_level(STONESKIN, 50), type, 2 + get_level(STONESKIN, 5), 3 + get_level(STONESKIN, 5))
+ end,
+ ["info"] = function()
+ if get_level(STONESKIN, 50) >= 25 then
+ return "dam "..(2 + get_level(STONESKIN, 5)).."d"..(3 + get_level(STONESKIN, 5)).." dur "..(10 + get_level(STONESKIN, 100)).."+d10 AC "..(10 + get_level(STONESKIN, 50))
+ else
+ return "dur "..(10 + get_level(STONESKIN, 100)).."+d10 AC "..(10 + get_level(STONESKIN, 50))
+ end
+ end,
+ ["desc"] = {
+ "Creates a shield of earth around you to protect you",
+ "At level 25 it starts dealing damage to attackers"
+ }
+}
+
+DIG = add_spell
+{
+ ["name"] = "Dig",
+ ["school"] = SCHOOL_EARTH,
+ ["level"] = 12,
+ ["mana"] = 14,
+ ["mana_max"] = 14,
+ ["fail"] = 20,
+ ["stick"] =
+ {
+ ["charge"] = { 15, 5 },
+ [TV_WAND] =
+ {
+ ["rarity"] = 25,
+ ["base_level"] = { 1, 1 },
+ ["max_level"] = { 1, 1 },
+ },
+ },
+ ["spell"] = function()
+ local ret, dir
+ ret, dir = get_aim_dir()
+ if ret == FALSE then return end
+ return wall_to_mud(dir)
+ end,
+ ["info"] = function()
+ return ""
+ end,
+ ["desc"] = {
+ "Digs a hole in a wall much faster than any shovels",
+ }
+}
+
+STONEPRISON = add_spell
+{
+ ["name"] = "Stone Prison",
+ ["school"] = SCHOOL_EARTH,
+ ["level"] = 25,
+ ["mana"] = 30,
+ ["mana_max"] = 50,
+ ["fail"] = 65,
+ ["stick"] =
+ {
+ ["charge"] = { 5, 3 },
+ [TV_WAND] =
+ {
+ ["rarity"] = 57,
+ ["base_level"] = { 1, 3 },
+ ["max_level"] = { 5, 20 },
+ },
+ },
+ ["spell"] = function()
+ local ret, x, y
+ if get_level(STONEPRISON, 50) >= 10 then
+ ret, x, y = tgt_pt()
+ else
+ y = player.py
+ x = player.px
+ end
+ wall_stone(y, x)
+ return TRUE
+ end,
+ ["info"] = function()
+ return ""
+ end,
+ ["desc"] = {
+ "Creates a prison of walls around you",
+ "At level 10 it allows you to target a monster"
+ }
+}
+
+STRIKE = add_spell
+{
+ ["name"] = "Strike",
+ ["school"] = {SCHOOL_EARTH},
+ ["level"] = 30,
+ ["mana"] = 30,
+ ["mana_max"] = 50,
+ ["fail"] = 60,
+ ["stick"] =
+ {
+ ["charge"] = { 2, 6 },
+ [TV_WAND] =
+ {
+ ["rarity"] = 635,
+ ["base_level"] = { 1, 5 },
+ ["max_level"] = { 10, 50 },
+ },
+ },
+ ["spell"] = function()
+ local ret, dir, rad
+ ret, dir = get_aim_dir()
+ if ret == FALSE then return end
+ if get_level(STRIKE, 50) >= 12 then
+ return fire_ball(GF_FORCE, dir, 50 + get_level(STRIKE, 50), 1)
+ else
+ return fire_ball(GF_FORCE, dir, 50 + get_level(STRIKE, 50), 0)
+ end
+ end,
+ ["info"] = function()
+ if get_level(STRIKE, 50) >= 12 then
+ return "dam "..(50 + get_level(STRIKE, 50)).." rad 1"
+ else
+ return "dam "..(50 + get_level(STRIKE, 50))
+ end
+ end,
+ ["desc"] = {
+ "Creates a micro-ball of force that will push monsters backwards",
+ "If the monster is caught near a wall, it'll be crushed against it",
+ "At level 12 it turns into a ball of radius 1"
+ }
+}
+
+SHAKE = add_spell
+{
+ ["name"] = "Shake",
+ ["school"] = {SCHOOL_EARTH},
+ ["level"] = 27,
+ ["mana"] = 25,
+ ["mana_max"] = 30,
+ ["fail"] = 60,
+ ["stick"] =
+ {
+ ["charge"] = { 5, 10 },
+ [TV_STAFF] =
+ {
+ ["rarity"] = 75,
+ ["base_level"] = { 1, 3 },
+ ["max_level"] = { 9, 20 },
+ },
+ },
+ ["inertia"] = { 2, 50 },
+ ["spell"] = function()
+ local ret, x, y
+ if get_level(SHAKE, 50) >= 10 then
+ ret, x, y = tgt_pt()
+ if ret == FALSE then return end
+ else
+ x = player.px
+ y = player.py
+ end
+ earthquake(y, x, 4 + get_level(SHAKE, 10));
+ return TRUE
+ end,
+ ["info"] = function()
+ return "rad "..(4 + get_level(SHAKE, 10))
+ end,
+ ["desc"] = {
+ "Creates a localised earthquake",
+ "At level 10 it can be targeted at any location"
+ }
+}