summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBardur Arantsson <bardur@scientician.net>2012-04-13 07:44:18 +0200
committerBardur Arantsson <bardur@scientician.net>2012-04-13 18:12:17 +0200
commit98c69abb1f65c27d586b9af0574a9b8bfb8265a7 (patch)
treec0ceb250f8c98a439cb2c315b93f1c30c474d78e /src
parent976ca14dbe8d44b0653927a656d352a1c7de4897 (diff)
Lua: Move "Earth" spell functions to C
Diffstat (limited to 'src')
-rw-r--r--src/externs.h17
-rw-r--r--src/spells.pkg20
-rw-r--r--src/spells3.c158
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;
+}
+