summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBardur Arantsson <bardur@scientician.net>2012-04-20 06:20:01 +0200
committerBardur Arantsson <bardur@scientician.net>2012-04-20 06:21:28 +0200
commit4275c9d3e7a44080997fce9974d442ba4f9f4a54 (patch)
tree02d838a9cc49661f9f06acf6036703d2fcb28198
parentc242c2266a98b95e044834128052bad187186ef0 (diff)
Lua: Move "do_melkor_curse" to C
-rw-r--r--lib/mods/theme/scpt/s_melkor.lua48
-rw-r--r--lib/scpt/s_melkor.lua48
-rw-r--r--src/spells3.c87
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()