diff options
author | Bardur Arantsson <bardur@scientician.net> | 2012-05-15 06:19:37 +0200 |
---|---|---|
committer | Bardur Arantsson <bardur@scientician.net> | 2012-05-15 06:34:29 +0200 |
commit | 6bd3fd4881765ec278b9c3896cd4cff15fe33265 (patch) | |
tree | 30ca5443aca9bc2190c04adf40c2bed201693cb5 | |
parent | f2163c387bfb5c8746e832a1f7e72355d19b40f0 (diff) |
Lua: Move "Varda" spell functions to C
-rw-r--r-- | lib/mods/theme/scpt/s_varda.lua | 75 | ||||
-rw-r--r-- | src/externs.h | 14 | ||||
-rw-r--r-- | src/spells.pkg | 14 | ||||
-rw-r--r-- | src/spells3.c | 130 |
4 files changed, 167 insertions, 66 deletions
diff --git a/lib/mods/theme/scpt/s_varda.lua b/lib/mods/theme/scpt/s_varda.lua index f4f46a83..e20ea5e9 100644 --- a/lib/mods/theme/scpt/s_varda.lua +++ b/lib/mods/theme/scpt/s_varda.lua @@ -14,26 +14,8 @@ VARDA_LIGHT_VALINOR = add_spell ["piety"] = TRUE, ["stat"] = A_WIS, ["random"] = SKILL_SPIRITUALITY, - ["spell"] = function() - local obvious - if get_level(VARDA_LIGHT_VALINOR, 50) >= 3 then - obvious = lite_area(10, 4) - else - lite_room(player.py, player.px) - obvious = TRUE - end - if get_level(VARDA_LIGHT_VALINOR, 50) >= 15 then - obvious = is_obvious(fire_ball(GF_LITE, 0, 10 + get_level(VARDA_LIGHT_VALINOR, 100), 5 + get_level(GLOBELIGHT, 6)), obvious) - end - return obvious - end, - ["info"] = function() - if get_level(VARDA_LIGHT_VALINOR, 50) >= 15 then - return "dam "..(10 + get_level(VARDA_LIGHT_VALINOR, 100)).." rad "..(5 + get_level(VARDA_LIGHT_VALINOR, 6)) - else - return "" - end - end, + ["spell"] = function() return varda_light_of_valinor_spell() end, + ["info"] = function() return varda_light_of_valinor_info() end, ["desc"] = { "Lights a room", "At level 3 it starts damaging monsters", @@ -52,18 +34,8 @@ VARDA_CALL_ALMAREN = add_spell ["piety"] = TRUE, ["stat"] = A_WIS, ["random"] = SKILL_SPIRITUALITY, - ["spell"] = function() - local power = 5 * player.lev - if (get_level(VARDA_CALL_ALMAREN) >= 20) then - dispel_evil(power) - else - banish_evil(power) - end - return FALSE - end, - ["info"] = function() - return "" - end, + ["spell"] = function() return varda_call_of_almaren_spell() end, + ["info"] = function() return varda_call_of_almaren_info() end, ["desc"] = { "Banishes evil beings", "At level 20 it dispels evil beings", @@ -81,22 +53,8 @@ VARDA_EVENSTAR = add_spell ["piety"] = TRUE, ["stat"] = A_WIS, ["random"] = SKILL_SPIRITUALITY, - ["spell"] = function() - if (get_level(VARDA_EVENSTAR) >= 40) then - -- Enlightenment - wiz_lite_extra() - -- Identify - identify_pack() - -- Self knowledge - self_knowledge() - else - wiz_lite_extra() - end - return FALSE - end, - ["info"] = function() - return "" - end, + ["spell"] = function() return varda_evenstar_spell() end, + ["info"] = function() return varda_evenstar_info() end, ["desc"] = { "Maps and lights the whole level.", "At level 40 it maps and lights the whole level,", @@ -116,25 +74,10 @@ VARDA_STARKINDLER = add_spell ["piety"] = TRUE, ["stat"] = A_WIS, ["random"] = SKILL_SPIRITUALITY, - ["spell"] = function() - local power = player.lev / 5 - local ret, dir - - ret, dir = get_aim_dir() - - if ret == FALSE then return end - for i = 1, power do - fire_ball(GF_LITE, dir, 20 + get_level(VARDA_STARKINDLER, 100), 10) - end - - return FALSE - end, - ["info"] = function() - local power = player.lev / 5 - return "dam "..(20 + get_level(VARDA_STARKINDLER, 100)).." rad 10" - end, + ["spell"] = function() return varda_star_kindler_spell() end, + ["info"] = function() return varda_star_kindler_info() end, ["desc"] = { "Does multiple bursts of light damage.", "The damage increases with level.", } -}
\ No newline at end of file +} diff --git a/src/externs.h b/src/externs.h index ac9bd360..b6c8ea88 100644 --- a/src/externs.h +++ b/src/externs.h @@ -1882,6 +1882,20 @@ char *ulmo_call_of_the_ulumuri_info(); bool_ *ulmo_wrath_of_ulmo_spell(); char *ulmo_wrath_of_ulmo_info(); +extern s32b VARDA_LIGHT_VALINOR; +extern s32b VARDA_CALL_ALMAREN; +extern s32b VARDA_EVENSTAR; +extern s32b VARDA_STARKINDLER; + +bool_ *varda_light_of_valinor_spell(); +char *varda_light_of_valinor_info(); +bool_ *varda_call_of_almaren_spell(); +char *varda_call_of_almaren_info(); +bool_ *varda_evenstar_spell(); +char *varda_evenstar_info(); +bool_ *varda_star_kindler_spell(); +char *varda_star_kindler_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 7ec49906..6f284a9d 100644 --- a/src/spells.pkg +++ b/src/spells.pkg @@ -2886,3 +2886,17 @@ bool_ *ulmo_call_of_the_ulumuri_spell(); char *ulmo_call_of_the_ulumuri_info(); bool_ *ulmo_wrath_of_ulmo_spell(); char *ulmo_wrath_of_ulmo_info(); + +extern s32b VARDA_LIGHT_VALINOR; +extern s32b VARDA_CALL_ALMAREN; +extern s32b VARDA_EVENSTAR; +extern s32b VARDA_STARKINDLER; + +bool_ *varda_light_of_valinor_spell(); +char *varda_light_of_valinor_info(); +bool_ *varda_call_of_almaren_spell(); +char *varda_call_of_almaren_info(); +bool_ *varda_evenstar_spell(); +char *varda_evenstar_info(); +bool_ *varda_star_kindler_spell(); +char *varda_star_kindler_info(); diff --git a/src/spells3.c b/src/spells3.c index cf9632b7..119e128f 100644 --- a/src/spells3.c +++ b/src/spells3.c @@ -162,6 +162,10 @@ s32b ULMO_DRAUGHT_ULMONAN; s32b ULMO_CALL_ULUMURI; s32b ULMO_WRATH; +s32b VARDA_LIGHT_VALINOR; +s32b VARDA_CALL_ALMAREN; +s32b VARDA_EVENSTAR; +s32b VARDA_STARKINDLER; /* 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 @@ -4707,3 +4711,129 @@ char *ulmo_wrath_of_ulmo_info() wrath_of_ulmo_duration()); return buf; } + +static int light_of_valinor_damage() +{ + return 10 + get_level_s(VARDA_LIGHT_VALINOR, 100); +} + +static int light_of_valinor_radius() +{ + return 5 + get_level_s(VARDA_LIGHT_VALINOR, 6); +} + +bool_ *varda_light_of_valinor_spell() +{ + if (get_level_s(VARDA_LIGHT_VALINOR, 50) >= 3) + { + lite_area(10, 4); + } + else + { + lite_room(p_ptr->py, p_ptr->px); + } + + if (get_level_s(VARDA_LIGHT_VALINOR, 50) >= 15) + { + fire_ball(GF_LITE, + 0, + light_of_valinor_damage(), + light_of_valinor_radius()); + } + + return CAST; +} + +char *varda_light_of_valinor_info() +{ + static char buf[128]; + if (get_level_s(VARDA_LIGHT_VALINOR, 50) >= 15) + { + sprintf(buf, + "dam %d rad " FMTs32b, + light_of_valinor_damage(), + light_of_valinor_radius()); + return buf; + } + else + { + return ""; + } +} + +bool_ *varda_call_of_almaren_spell() +{ + int power = 5 * p_ptr->lev; + if (get_level_s(VARDA_CALL_ALMAREN, 50) >= 20) + { + dispel_evil(power); + } + else + { + banish_evil(power); + } + return CAST; +} + +char *varda_call_of_almaren_info() +{ + return ""; +} + +bool_ *varda_evenstar_spell() +{ + wiz_lite_extra(); + if (get_level_s(VARDA_EVENSTAR, 50) >= 40) + { + identify_pack(); + self_knowledge(NULL); + } + + return CAST; +} + +char *varda_evenstar_info() +{ + return ""; +} + +static int star_kindler_bursts() +{ + return p_ptr->lev / 5; +} + +static int star_kindler_damage() +{ + return 20 + get_level_s(VARDA_STARKINDLER, 100); +} + +bool_ *varda_star_kindler_spell() +{ + int dir, i, n = star_kindler_bursts(); + + if (!get_aim_dir(&dir)) + { + return NO_CAST; + } + + for (i = 0; i < n; i++) + { + fire_ball(GF_LITE, + dir, + star_kindler_damage(), + 10); + } + + return CAST; +} + +char *varda_star_kindler_info() +{ + static char buf[128]; + sprintf(buf, + "dam %d bursts %d rad 10", + star_kindler_damage(), + star_kindler_bursts()); + return buf; +} + |