diff options
author | Bardur Arantsson <bardur@scientician.net> | 2012-04-20 05:13:20 +0200 |
---|---|---|
committer | Bardur Arantsson <bardur@scientician.net> | 2012-04-20 06:18:29 +0200 |
commit | c242c2266a98b95e044834128052bad187186ef0 (patch) | |
tree | 7163a841e4577bbff7fa0a122f6082deed7f9e3d /src | |
parent | 58c866837fda7ba06e465f45fbf68eafe921db86 (diff) |
Lua: Move "Melkor" spell functions to C
Diffstat (limited to 'src')
-rw-r--r-- | src/cmd1.c | 2 | ||||
-rw-r--r-- | src/externs.h | 13 | ||||
-rw-r--r-- | src/spells.pkg | 11 | ||||
-rw-r--r-- | src/spells3.c | 103 |
4 files changed, 128 insertions, 1 deletions
@@ -2475,7 +2475,7 @@ void py_attack(int y, int x, int max_blow) if (chance < 1) chance = 1; if ((p_ptr->grace > 5000) && magik(chance)) { - exec_lua(format("do_melkor_curse(%d)", c_ptr->m_idx)); + do_melkor_curse(c_ptr->m_idx); } } } diff --git a/src/externs.h b/src/externs.h index e46e864f..ac2aef20 100644 --- a/src/externs.h +++ b/src/externs.h @@ -1592,6 +1592,19 @@ char *manwe_blessing_info(); bool_ *manwe_call(); char *manwe_call_info(); +extern s32b MELKOR_CURSE; +extern s32b MELKOR_CORPSE_EXPLOSION; +extern s32b MELKOR_MIND_STEAL; + +void do_melkor_curse(int m_idx); + +bool_ *melkor_curse(); +char *melkor_curse_info(); +bool_ *melkor_corpse_explosion(); +char *melkor_corpse_explosion_info(); +bool_ *melkor_mind_steal(); +char *melkor_mind_steal_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 0d9d5613..5df1ef10 100644 --- a/src/spells.pkg +++ b/src/spells.pkg @@ -2636,3 +2636,14 @@ bool_ *manwe_blessing(); char *manwe_blessing_info(); bool_ *manwe_call(); char *manwe_call_info(); + +extern s32b MELKOR_CURSE; +extern s32b MELKOR_CORPSE_EXPLOSION; +extern s32b MELKOR_MIND_STEAL; + +bool_ *melkor_curse(); +char *melkor_curse_info(); +bool_ *melkor_corpse_explosion(); +char *melkor_corpse_explosion_info(); +bool_ *melkor_mind_steal(); +char *melkor_mind_steal_info(); diff --git a/src/spells3.c b/src/spells3.c index db183ee0..5fa198fb 100644 --- a/src/spells3.c +++ b/src/spells3.c @@ -69,6 +69,10 @@ s32b MANWE_AVATAR; s32b MANWE_BLESS; s32b MANWE_CALL; +s32b MELKOR_CURSE; +s32b MELKOR_CORPSE_EXPLOSION; +s32b MELKOR_MIND_STEAL; + /* 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). */ @@ -1961,3 +1965,102 @@ char *manwe_call_info() get_level_s(MANWE_CALL, 70) + 20); return buf; } + +void do_melkor_curse(int m_idx) +{ + exec_lua(format("do_melkor_curse(%d)", m_idx)); +} + +bool_ *melkor_curse() +{ + int dir = 0; + + if (!get_aim_dir(&dir)) + { + return NO_CAST; + } + + if (target_who < 0) + { + msg_print("You must target a monster."); + return NO_CAST; + } + else + { + do_melkor_curse(target_who); + return CAST; + } +} + +char *melkor_curse_info() +{ + return ""; +} + +bool_ *melkor_corpse_explosion() +{ + fire_ball(GF_CORPSE_EXPL, + 0, + 20 + get_level_s(MELKOR_CORPSE_EXPLOSION, 70), + 2 + get_level_s(MELKOR_CORPSE_EXPLOSION, 5)); + return CAST; +} + +char *melkor_corpse_explosion_info() +{ + static char buf[128]; + sprintf(buf, + "dam %d%%", + 20 + get_level_s(MELKOR_CORPSE_EXPLOSION, 70)); + return buf; +} + +bool_ *melkor_mind_steal() +{ + int dir = 0; + + if (!get_aim_dir(&dir)) + { + return FALSE; + } + + if (target_who < 0) + { + msg_print("You must target a monster."); + return NO_CAST; + } + else + { + monster_type *m_ptr = &m_list[target_who]; + int chance = get_level_s(MELKOR_MIND_STEAL, 50); + monster_race *r_ptr = race_info_idx(m_ptr->r_idx, m_ptr->ego); + char buf[128]; + + monster_desc(buf, m_ptr, 0); + buf[0] = toupper(buf[0]); + + if ((randint(m_ptr->level) < chance) && + ((r_ptr->flags1 & RF1_UNIQUE) == 0)) + { + p_ptr->control = target_who; + m_ptr->mflag |= MFLAG_CONTROL; + strcat(buf, " falls under your control."); + } + else + { + strcat(buf, " resists."); + } + + msg_print(buf); + return CAST; + } +} + +char *melkor_mind_steal_info() +{ + static char buf[128]; + sprintf(buf, + "chance 1d(mlvl)<%d", + get_level_s(MELKOR_MIND_STEAL, 50)); + return buf; +} |