diff options
author | Bardur Arantsson <bardur@scientician.net> | 2012-04-20 06:20:01 +0200 |
---|---|---|
committer | Bardur Arantsson <bardur@scientician.net> | 2012-04-20 06:21:28 +0200 |
commit | 4275c9d3e7a44080997fce9974d442ba4f9f4a54 (patch) | |
tree | 02d838a9cc49661f9f06acf6036703d2fcb28198 /src | |
parent | c242c2266a98b95e044834128052bad187186ef0 (diff) |
Lua: Move "do_melkor_curse" to C
Diffstat (limited to 'src')
-rw-r--r-- | src/spells3.c | 87 |
1 files changed, 86 insertions, 1 deletions
diff --git a/src/spells3.c b/src/spells3.c index 5fa198fb..7fff9935 100644 --- a/src/spells3.c +++ b/src/spells3.c @@ -1968,7 +1968,92 @@ char *manwe_call_info() void do_melkor_curse(int m_idx) { - exec_lua(format("do_melkor_curse(%d)", m_idx)); + monster_type *m_ptr = NULL; + assert(m_idx >= 0); + + m_ptr = &m_list[m_idx]; + + if (get_level_s(MELKOR_CURSE, 50) >= 35) + { + monster_race *r_ptr = race_info_idx(m_ptr->r_idx, m_ptr->ego); + + m_ptr->maxhp = m_ptr->maxhp - r_ptr->hside; + if (m_ptr->maxhp < 1) + { + m_ptr->maxhp = 1; + } + if (m_ptr->hp > m_ptr->maxhp) + { + m_ptr->hp = m_ptr->maxhp; + } + + p_ptr->redraw |= PR_HEALTH; + } + + if (get_level_s(MELKOR_CURSE, 50) >= 25) + { + m_ptr->speed = m_ptr->speed - get_level_s(MELKOR_CURSE, 7); + m_ptr->mspeed = m_ptr->mspeed - get_level_s(MELKOR_CURSE, 7); + + if (m_ptr->speed < 70) + { + m_ptr->speed = 70; + } + + if (m_ptr->mspeed < 70) + { + m_ptr->mspeed = 70; + } + } + + if (get_level_s(MELKOR_CURSE, 50) >= 15) + { + m_ptr->ac = m_ptr->ac - get_level_s(MELKOR_CURSE, 50); + + if (m_ptr->ac < -70) + { + m_ptr->ac = -70; + } + } + + /* Reduce melee too */ + { + int i; + int pow = get_level_s(MELKOR_CURSE, 2); + + for (i = 0; i < 4; i++) + { + if (m_ptr->blow[i].d_dice <= 0) + { + break; + } + + if (m_ptr->blow[i].d_dice < pow) + { + pow = m_ptr->blow[i].d_dice; + } + if (m_ptr->blow[i].d_side < pow) + { + pow = m_ptr->blow[i].d_side; + } + + m_ptr->blow[i].d_dice = m_ptr->blow[i].d_dice - pow; + } + } + + /* Describe what happened */ + { + char buf[128]; + + monster_desc(buf, m_ptr, 0); + buf[0] = toupper(buf[0]); + + strcat(buf, " looks weaker."); + msg_print(buf); + } + + /* wake it */ + m_ptr->csleep = 0; } bool_ *melkor_curse() |