1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
|
-- Mkeys for skills & abilities
GF_INSTA_DEATH = add_spell_type
{
["color"] = { TERM_DARK, 0 },
["angry"] = function() return TRUE, TRUE end,
["monster"] = function(who, dam, rad, y, x, monst)
local race = race_info_idx(monst.r_idx, monst.ego)
if magik(5) == FALSE or band(race.flags1, RF1_UNIQUE) ~= FALSE or band(race.flags3, RF3_UNDEAD) ~= FALSE or band(race.flags3, RF3_NONLIVING) ~= FALSE then
return TRUE, FALSE
else
-- Reduce the exp gained this way
monst.level = monst.level / 3
return TRUE, FALSE, 32535, 0, 0, 0, 0, 0, 0, 0, " faints.", " is sucked out of life."
end
end,
}
-- Death touch ability
add_mkey
{
["mkey"] = 100,
["fct"] = function()
if player.csp > 40 then
increase_mana(-40)
set_project(randint(30) + 10, GF_INSTA_DEATH, 1, 0, bor(PROJECT_STOP, PROJECT_KILL))
energy_use = 100
else
msg_print("You need at least 40 mana.")
end
end,
}
-- Geomancy skill
add_mkey
{
["mkey"] = 101,
["fct"] = function()
local s
-- No magic
if (player.antimagic > 0) then
msg_print("Your anti-magic field disrupts any magic attempts.")
return
end
local obj = get_object(INVEN_WIELD)
if (obj.k_idx <= 0) or (obj.tval ~= TV_MSTAFF) then
msg_print('You must wield a magestaff to use Geomancy.')
return
end
s = get_school_spell("cast", "is_ok_spell", 62);
-- Actualy cast the choice
if (s ~= -1) then
cast_school_spell(s, spell(s))
end
end,
}
-- Far reaching attack of polearms
add_mkey
{
["mkey"] = 102,
["fct"] = function()
local weapon = get_object(INVEN_WIELD);
if weapon.tval == TV_POLEARM then
else
msg_print("You will need a long polearm for this!")
return
end
ret, dir = get_rep_dir()
if ret == FALSE then return end
local dy, dx = explode_dir(dir)
dy = dy * 2
dx = dx * 2
targety = player.py + dy
targetx = player.px + dx
local max_blows = get_skill_scale(SKILL_POLEARM, player.num_blow / 2)
if max_blows == 0 then max_blows = 1 end
if get_skill(SKILL_POLEARM) >= 40 then
energy_use = energy_use + 200
return project(0, 0, targety, targetx, max_blows, GF_ATTACK, bor(PROJECT_BEAM, PROJECT_KILL))
else
energy_use = energy_use + 200
return project(0, 0, targety, targetx, max_blows, GF_ATTACK, bor(PROJECT_BEAM, PROJECT_STOP, PROJECT_KILL))
end
end,
}
|