diff options
author | Bardur Arantsson <bardur@scientician.net> | 2012-05-10 03:28:52 +0200 |
---|---|---|
committer | Bardur Arantsson <bardur@scientician.net> | 2012-05-10 18:44:07 +0200 |
commit | 882afb262b6c01719b3c26c6b49d5ead50af84db (patch) | |
tree | 8cf82553fc2c3e728d7d01b816e032383e8c253c /src | |
parent | 656d66ee0e61c74f2730e2fffbea0304129d319b (diff) |
Lua: Move "Mind" spell functions to C
Diffstat (limited to 'src')
-rw-r--r-- | src/externs.h | 14 | ||||
-rw-r--r-- | src/spells.pkg | 14 | ||||
-rw-r--r-- | src/spells3.c | 165 |
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; +} |