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 /src | |
parent | 976ca14dbe8d44b0653927a656d352a1c7de4897 (diff) |
Lua: Move "Earth" spell functions to C
Diffstat (limited to 'src')
-rw-r--r-- | src/externs.h | 17 | ||||
-rw-r--r-- | src/spells.pkg | 20 | ||||
-rw-r--r-- | src/spells3.c | 158 |
3 files changed, 195 insertions, 0 deletions
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; +} + |