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 | |
parent | c242c2266a98b95e044834128052bad187186ef0 (diff) |
Lua: Move "do_melkor_curse" to C
-rw-r--r-- | lib/mods/theme/scpt/s_melkor.lua | 48 | ||||
-rw-r--r-- | lib/scpt/s_melkor.lua | 48 | ||||
-rw-r--r-- | src/spells3.c | 87 |
3 files changed, 86 insertions, 97 deletions
diff --git a/lib/mods/theme/scpt/s_melkor.lua b/lib/mods/theme/scpt/s_melkor.lua index 888a5066..701dca7a 100644 --- a/lib/mods/theme/scpt/s_melkor.lua +++ b/lib/mods/theme/scpt/s_melkor.lua @@ -1,53 +1,5 @@ -- handle the melkor school --- Not included in the spell code directly because I need to call it from somewhere else too -function do_melkor_curse(who) - local m_ptr = monster(who) - - if get_level(MELKOR_CURSE) >= 35 then - local 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 then m_ptr.maxhp = 1 end - if m_ptr.hp > m_ptr.maxhp then m_ptr.hp = m_ptr.maxhp end - player.redraw = bor(player.redraw, PR_HEALTH) - end - if get_level(MELKOR_CURSE) >= 25 then - m_ptr.speed = m_ptr.speed - get_level(MELKOR_CURSE, 7) - m_ptr.mspeed = m_ptr.mspeed - get_level(MELKOR_CURSE, 7) - - if m_ptr.speed < 70 then m_ptr.speed = 70 end - if m_ptr.mspeed < 70 then m_ptr.mspeed = 70 end - end - if get_level(MELKOR_CURSE) >= 15 then - m_ptr.ac = m_ptr.ac - get_level(MELKOR_CURSE, 50) - - if m_ptr.ac < -70 then m_ptr.ac = -70 end - end - - local i, pow - i = 1 - pow = get_level(MELKOR_CURSE, 2) - while (i <= 4) do - if m_ptr.blow[i].d_dice > 0 then - if m_ptr.blow[i].d_dice < pow then - pow = m_ptr.blow[i].d_dice - end - if m_ptr.blow[i].d_side < pow then - pow = m_ptr.blow[i].d_side - end - m_ptr.blow[i].d_dice = m_ptr.blow[i].d_dice - pow - end - i = i + 1 - end - - local m_name = monster_desc(m_ptr, 0).." looks weaker." - msg_print(strupper(strsub(m_name, 0, 1))..strsub(m_name, 2)) - - -- wake it - m_ptr.csleep = 0; -end - MELKOR_CURSE = add_spell { ["name"] = "Curse", diff --git a/lib/scpt/s_melkor.lua b/lib/scpt/s_melkor.lua index 888a5066..701dca7a 100644 --- a/lib/scpt/s_melkor.lua +++ b/lib/scpt/s_melkor.lua @@ -1,53 +1,5 @@ -- handle the melkor school --- Not included in the spell code directly because I need to call it from somewhere else too -function do_melkor_curse(who) - local m_ptr = monster(who) - - if get_level(MELKOR_CURSE) >= 35 then - local 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 then m_ptr.maxhp = 1 end - if m_ptr.hp > m_ptr.maxhp then m_ptr.hp = m_ptr.maxhp end - player.redraw = bor(player.redraw, PR_HEALTH) - end - if get_level(MELKOR_CURSE) >= 25 then - m_ptr.speed = m_ptr.speed - get_level(MELKOR_CURSE, 7) - m_ptr.mspeed = m_ptr.mspeed - get_level(MELKOR_CURSE, 7) - - if m_ptr.speed < 70 then m_ptr.speed = 70 end - if m_ptr.mspeed < 70 then m_ptr.mspeed = 70 end - end - if get_level(MELKOR_CURSE) >= 15 then - m_ptr.ac = m_ptr.ac - get_level(MELKOR_CURSE, 50) - - if m_ptr.ac < -70 then m_ptr.ac = -70 end - end - - local i, pow - i = 1 - pow = get_level(MELKOR_CURSE, 2) - while (i <= 4) do - if m_ptr.blow[i].d_dice > 0 then - if m_ptr.blow[i].d_dice < pow then - pow = m_ptr.blow[i].d_dice - end - if m_ptr.blow[i].d_side < pow then - pow = m_ptr.blow[i].d_side - end - m_ptr.blow[i].d_dice = m_ptr.blow[i].d_dice - pow - end - i = i + 1 - end - - local m_name = monster_desc(m_ptr, 0).." looks weaker." - msg_print(strupper(strsub(m_name, 0, 1))..strsub(m_name, 2)) - - -- wake it - m_ptr.csleep = 0; -end - MELKOR_CURSE = add_spell { ["name"] = "Curse", 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() |