diff options
author | Bardur Arantsson <bardur@scientician.net> | 2012-04-13 07:44:18 +0200 |
---|---|---|
committer | Bardur Arantsson <bardur@scientician.net> | 2012-04-13 18:12:17 +0200 |
commit | 98c69abb1f65c27d586b9af0574a9b8bfb8265a7 (patch) | |
tree | c0ceb250f8c98a439cb2c315b93f1c30c474d78e | |
parent | 976ca14dbe8d44b0653927a656d352a1c7de4897 (diff) |
Lua: Move "Earth" spell functions to C
-rw-r--r-- | lib/mods/theme/scpt/s_earth.lua | 81 | ||||
-rw-r--r-- | lib/scpt/s_earth.lua | 81 | ||||
-rw-r--r-- | src/externs.h | 17 | ||||
-rw-r--r-- | src/spells.pkg | 20 | ||||
-rw-r--r-- | src/spells3.c | 158 |
5 files changed, 215 insertions, 142 deletions
diff --git a/lib/mods/theme/scpt/s_earth.lua b/lib/mods/theme/scpt/s_earth.lua index 23aa001c..9825fc84 100644 --- a/lib/mods/theme/scpt/s_earth.lua +++ b/lib/mods/theme/scpt/s_earth.lua @@ -9,22 +9,8 @@ STONESKIN = add_spell ["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, + ["spell"] = function() return earth_stone_skin() end, + ["info"] = function() return earth_stone_skin_info() end, ["desc"] = { "Creates a shield of earth around you to protect you", "At level 25 it starts dealing damage to attackers" @@ -49,15 +35,8 @@ DIG = add_spell ["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, + ["spell"] = function() return earth_dig() end, + ["info"] = function() return earth_dig_info() end, ["desc"] = { "Digs a hole in a wall much faster than any shovels", } @@ -81,20 +60,8 @@ STONEPRISON = add_spell ["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, + ["spell"] = function() return earth_stone_prison() end, + ["info"] = function() return earth_stone_prison_info() end, ["desc"] = { "Creates a prison of walls around you", "At level 10 it allows you to target a monster" @@ -119,23 +86,8 @@ STRIKE = add_spell ["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, + ["spell"] = function() return earth_strike() end, + ["info"] = function() return earth_strike_info() 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", @@ -162,21 +114,8 @@ SHAKE = add_spell }, }, ["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, + ["spell"] = function() return earth_shake() end, + ["info"] = function() return earth_shake_info() end, ["desc"] = { "Creates a localised earthquake", "At level 10 it can be targeted at any location" diff --git a/lib/scpt/s_earth.lua b/lib/scpt/s_earth.lua index 23aa001c..9825fc84 100644 --- a/lib/scpt/s_earth.lua +++ b/lib/scpt/s_earth.lua @@ -9,22 +9,8 @@ STONESKIN = add_spell ["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, + ["spell"] = function() return earth_stone_skin() end, + ["info"] = function() return earth_stone_skin_info() end, ["desc"] = { "Creates a shield of earth around you to protect you", "At level 25 it starts dealing damage to attackers" @@ -49,15 +35,8 @@ DIG = add_spell ["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, + ["spell"] = function() return earth_dig() end, + ["info"] = function() return earth_dig_info() end, ["desc"] = { "Digs a hole in a wall much faster than any shovels", } @@ -81,20 +60,8 @@ STONEPRISON = add_spell ["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, + ["spell"] = function() return earth_stone_prison() end, + ["info"] = function() return earth_stone_prison_info() end, ["desc"] = { "Creates a prison of walls around you", "At level 10 it allows you to target a monster" @@ -119,23 +86,8 @@ STRIKE = add_spell ["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, + ["spell"] = function() return earth_strike() end, + ["info"] = function() return earth_strike_info() 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", @@ -162,21 +114,8 @@ SHAKE = add_spell }, }, ["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, + ["spell"] = function() return earth_shake() end, + ["info"] = function() return earth_shake_info() end, ["desc"] = { "Creates a localised earthquake", "At level 10 it can be targeted at any location" diff --git a/src/externs.h b/src/externs.h index 168fd2ab..408a7046 100644 --- a/src/externs.h +++ b/src/externs.h @@ -1490,6 +1490,23 @@ char *divination_reveal_ways_info(); bool_ *divination_sense_monsters(); char *divination_sense_monsters_info(); +extern s32b STONESKIN; +extern s32b DIG; +extern s32b STONEPRISON; +extern s32b STRIKE; +extern s32b SHAKE; + +bool_ *earth_stone_skin(); +char *earth_stone_skin_info(); +bool_ *earth_dig(); +char *earth_dig_info(); +bool_ *earth_stone_prison(); +char *earth_stone_prison_info(); +bool_ *earth_strike(); +char *earth_strike_info(); +bool_ *earth_shake(); +char *earth_shake_info(); + /* randart.c */ extern int get_activation_power(void); extern void build_prob(cptr learn); diff --git a/src/spells.pkg b/src/spells.pkg index 5cf18354..e9e7c29d 100644 --- a/src/spells.pkg +++ b/src/spells.pkg @@ -2522,3 +2522,23 @@ bool_ *divination_reveal_ways(); char *divination_reveal_ways_info(); bool_ *divination_sense_monsters(); char *divination_sense_monsters_info(); + +/* + * Earth + */ +extern s32b STONESKIN; +extern s32b DIG; +extern s32b STONEPRISON; +extern s32b STRIKE; +extern s32b SHAKE; + +bool_ *earth_stone_skin(); +char *earth_stone_skin_info(); +bool_ *earth_dig(); +char *earth_dig_info(); +bool_ *earth_stone_prison(); +char *earth_stone_prison_info(); +bool_ *earth_strike(); +char *earth_strike_info(); +bool_ *earth_shake(); +char *earth_shake_info(); diff --git a/src/spells3.c b/src/spells3.c index 086c6940..fc29ec00 100644 --- a/src/spells3.c +++ b/src/spells3.c @@ -31,6 +31,12 @@ s32b SENSEHIDDEN; s32b REVEALWAYS; s32b SENSEMONSTERS; +s32b STONESKIN; +s32b DIG; +s32b STONEPRISON; +s32b STRIKE; +s32b SHAKE; + /* FIXME: Hackish workaround while we're still tied to Lua. This lets us return Lua's "nil" and a non-nil value (which is all the s_aux.lua cares about). */ @@ -849,3 +855,155 @@ char *divination_sense_monsters_info() return buf; } + +bool_ *earth_stone_skin() +{ + int type; + + type = 0; + if (get_level_s(STONESKIN, 50) >= 25) + { + type = SHIELD_COUNTER; + } + + set_shield(randint(10) + 10 + get_level_s(STONESKIN, 100), + 10 + get_level_s(STONESKIN, 50), + type, + 2 + get_level_s(STONESKIN, 5), + 3 + get_level_s(STONESKIN, 5)); + return CAST; +} + +char *earth_stone_skin_info() +{ + static char buf[128]; + + if (get_level_s(STONESKIN, 50) >= 25) + { + sprintf(buf, + "dam %dd%d dur %d+d10 AC %d", + (2 + get_level_s(STONESKIN, 5)), + (3 + get_level_s(STONESKIN, 5)), + (10 + get_level_s(STONESKIN, 100)), + (10 + get_level_s(STONESKIN, 50))); + } + else + { + sprintf(buf, + "dur %d+d10 AC %d", + (10 + get_level_s(STONESKIN, 100)), + (10 + get_level_s(STONESKIN, 50))); + } + + return buf; +} + +bool_ *earth_dig() +{ + int dir; + if (!get_aim_dir(&dir)) + { + return NO_CAST; + } + + wall_to_mud(dir); + return CAST; +} + +char *earth_dig_info() +{ + return ""; +} + +bool_ *earth_stone_prison() +{ + int x,y; + + if (get_level_s(STONEPRISON, 50) >= 10) + { + if (!tgt_pt(&x, &y)) + { + return NO_CAST; + } + } + else + { + y = p_ptr->py; + x = p_ptr->px; + } + + wall_stone(y, x); + return CAST; +} + +char *earth_stone_prison_info() +{ + return ""; +} + +bool_ *earth_strike() +{ + int dir, dmg; + + if (!get_aim_dir(&dir)) + { + return NO_CAST; + } + + dmg = 50 + get_level_s(STRIKE, 50); + if (get_level_s(STRIKE, 50) >= 12) + { + fire_ball(GF_FORCE, dir, dmg, 1); + } + else + { + fire_ball(GF_FORCE, dir, dmg, 0); + } + + return CAST; +} + +char *earth_strike_info() +{ + static char buf[128]; + int dmg = 50 + get_level_s(STRIKE, 50); + + if (get_level_s(STRIKE, 50) >= 12) + { + sprintf(buf, "dam %d rad 1", dmg); + } + else + { + sprintf(buf, "dam %d", dmg); + } + + return buf; +} + +bool_ *earth_shake() +{ + int x,y; + + if (get_level_s(SHAKE, 50) >= 10) + { + if (!tgt_pt(&x, &y)) + { + return NO_CAST; + } + } + else + { + x = p_ptr->px; + y = p_ptr->py; + } + earthquake(y, x, 4 + get_level_s(SHAKE, 10)); + return CAST; +} + +char *earth_shake_info() +{ + static char buf[128]; + sprintf(buf, "rad %d", (4 + get_level_s(SHAKE, 10))); + return buf; +} + |