summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBardur Arantsson <bardur@scientician.net>2012-05-10 03:28:52 +0200
committerBardur Arantsson <bardur@scientician.net>2012-05-10 18:44:07 +0200
commit882afb262b6c01719b3c26c6b49d5ead50af84db (patch)
tree8cf82553fc2c3e728d7d01b816e032383e8c253c /src
parent656d66ee0e61c74f2730e2fffbea0304129d319b (diff)
Lua: Move "Mind" spell functions to C
Diffstat (limited to 'src')
-rw-r--r--src/externs.h14
-rw-r--r--src/spells.pkg14
-rw-r--r--src/spells3.c165
3 files changed, 193 insertions, 0 deletions
diff --git a/src/externs.h b/src/externs.h
index fa50cac8..fdcc1562 100644
--- a/src/externs.h
+++ b/src/externs.h
@@ -1627,6 +1627,20 @@ void meta_inertia_control_timer_callback();
void meta_inertia_control_calc_mana(int *msp);
void meta_inertia_control_hook_birth_objects();
+extern s32b CHARM;
+extern s32b CONFUSE;
+extern s32b ARMOROFFEAR;
+extern s32b STUN;
+
+bool_ *mind_charm();
+char *mind_charm_info();
+bool_ *mind_confuse();
+char *mind_confuse_info();
+bool_ *mind_armor_of_fear();
+char *mind_armor_of_fear_info();
+bool_ *mind_stun();
+char *mind_stun_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 63e27f73..ca88202e 100644
--- a/src/spells.pkg
+++ b/src/spells.pkg
@@ -2632,3 +2632,17 @@ bool_ *meta_tracker();
char *meta_tracker_info();
bool_ *meta_inertia_control();
char *meta_inertia_control_info();
+
+extern s32b CHARM;
+extern s32b CONFUSE;
+extern s32b ARMOROFFEAR;
+extern s32b STUN;
+
+bool_ *mind_charm();
+char *mind_charm_info();
+bool_ *mind_confuse();
+char *mind_confuse_info();
+bool_ *mind_armor_of_fear();
+char *mind_armor_of_fear_info();
+bool_ *mind_stun();
+char *mind_stun_info();
diff --git a/src/spells3.c b/src/spells3.c
index 47abba72..a84f56bd 100644
--- a/src/spells3.c
+++ b/src/spells3.c
@@ -80,6 +80,12 @@ s32b TRACKER;
s32b INERTIA_CONTROL;
timer_type *TIMER_INERTIA_CONTROL = 0;
+s32b CHARM;
+s32b CONFUSE;
+s32b ARMOROFFEAR;
+s32b STUN;
+
+
/* 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). */
@@ -2459,3 +2465,162 @@ void meta_inertia_control_calc_mana(int *msp)
}
}
}
+
+static int mind_charm_power()
+{
+ return 10 + get_level_s(CHARM, 150);
+}
+
+bool_ *mind_charm()
+{
+ int pwr = mind_charm_power();
+ int level = get_level_s(CHARM, 50);
+
+ if (level >= 35)
+ {
+ project_hack(GF_CHARM, pwr);
+ }
+ else
+ {
+ int dir;
+ if (!get_aim_dir(&dir))
+ {
+ return NO_CAST;
+ }
+
+ if (level >= 15)
+ {
+ fire_ball(GF_CHARM, dir, pwr, 3);
+ }
+ else
+ {
+ fire_bolt(GF_CHARM, dir, pwr);
+ }
+ }
+
+ return CAST;
+}
+
+char *mind_charm_info()
+{
+ static char buf[128];
+ sprintf(buf,
+ "power %d",
+ mind_charm_power());
+ return buf;
+}
+
+static int mind_confuse_power()
+{
+ return 10 + get_level_s(CONFUSE, 150);
+}
+
+bool_ *mind_confuse()
+{
+ int pwr = mind_confuse_power();
+ int level = get_level_s(CONFUSE, 50);
+
+ if (level >= 35)
+ {
+ project_hack(GF_OLD_CONF, pwr);
+ }
+ else
+ {
+ int dir;
+ if (!get_aim_dir(&dir))
+ {
+ return NO_CAST;
+ }
+
+ if (level >= 15)
+ {
+ fire_ball(GF_OLD_CONF, dir, pwr, 3);
+ }
+ else
+ {
+ fire_bolt(GF_OLD_CONF, dir, pwr);
+ }
+ }
+
+ return CAST;
+}
+
+char *mind_confuse_info()
+{
+ static char buf[128];
+ sprintf(buf,
+ "power %d",
+ mind_confuse_power());
+ return buf;
+}
+
+static int mind_armor_of_fear_base_duration()
+{
+ return 10 + get_level_s(ARMOROFFEAR, 100);
+}
+
+static int mind_armor_of_fear_power_sides()
+{
+ return 1 + get_level_s(ARMOROFFEAR, 7);
+}
+
+static int mind_armor_of_fear_power_dice()
+{
+ return 5 + get_level_s(ARMOROFFEAR, 20);
+}
+
+bool_ *mind_armor_of_fear()
+{
+ set_shield(randint(10) + mind_armor_of_fear_base_duration(),
+ 10,
+ SHIELD_FEAR,
+ mind_armor_of_fear_power_sides(),
+ mind_armor_of_fear_power_dice());
+ return CAST;
+}
+
+char *mind_armor_of_fear_info()
+{
+ static char buf[128];
+ sprintf(buf,
+ "dur %d+d10 power %dd%d",
+ mind_armor_of_fear_base_duration(),
+ mind_armor_of_fear_power_sides(),
+ mind_armor_of_fear_power_dice());
+ return buf;
+}
+
+static int mind_stun_power()
+{
+ return 10 + get_level_s(STUN, 150);
+}
+
+bool_ *mind_stun()
+{
+ int dir;
+
+ if (!get_aim_dir(&dir))
+ {
+ return NO_CAST;
+ }
+
+ if (get_level_s(STUN, 50) >= 20)
+ {
+ fire_ball(GF_STUN, dir, mind_stun_power(), 3);
+ }
+ else
+ {
+ fire_bolt(GF_STUN, dir, mind_stun_power());
+ }
+
+ return CAST;
+}
+
+char *mind_stun_info()
+{
+ static char buf[128];
+ sprintf(buf,
+ "power %d",
+ mind_stun_power());
+ return buf;
+}