Difference between revisions of "Module:Monster"
(More title as name fixes) |
(Corpseless monsters don't leave chunks) |
||
| Line 52: | Line 52: | ||
end | end | ||
| − | args.max_chunks = max_corpse_chunks[monster.Size] or 0 | + | if monster.Corpse ~= "No" then |
| + | args.max_chunks = max_corpse_chunks[monster.Size] or 0 | ||
| + | else | ||
| + | args.max_chunks = 0 | ||
| + | end | ||
args.meat = frame:expandTemplate{title = monster.Corpse .. " corpse"} | args.meat = frame:expandTemplate{title = monster.Corpse .. " corpse"} | ||
args.xp = monster.XP | args.xp = monster.XP | ||
Revision as of 04:45, 8 December 2015
Documentation for this module may be created at Module:Monster/doc
local p = {}
local data = mw.loadData('Module: Table of monsters')
-- Taken from max_corpse_chunks in mon-util.cc
local max_corpse_chunks = {
Tiny = 1,
Little = 2,
Small = 3,
Medium = 4,
Large = 9,
Big = 10,
Giant = 12,
}
function p.monster_info(frame)
local name = frame.args[1]
if not name or name == "" then
name = mw.title.getCurrentTitle().text
end
local monster = data[name] or data[name:lower()]
if not monster then
return name
end
local args = {}
args.name = monster.Name
args.glyph = frame:expandTemplate{title = monster.Colour, args = {monster.Glyph}}
local flags = {}
for i, v in ipairs(monster.Flags) do
flags[i] = frame:expandTemplate{title = v}
end
args.flags = table.concat(flags, "<br>")
local resistances = {}
for i, v in ipairs(monster.Resistances) do
resistances[i] = frame:expandTemplate{title = v}
end
if #resistances == 0 then
args.resistances = "None"
else
args.resistances = table.concat(resistances, "<br>")
end
local vulnerabilities = {}
for i, v in ipairs(monster.Vulnerabilities) do
vulnerabilities[i] = frame:expandTemplate{title = v}
end
if #vulnerabilities == 0 then
args.vulnerabilities = "None"
else
args.vulnerabilities = table.concat(vulnerabilities, "<br>")
end
if monster.Corpse ~= "No" then
args.max_chunks = max_corpse_chunks[monster.Size] or 0
else
args.max_chunks = 0
end
args.meat = frame:expandTemplate{title = monster.Corpse .. " corpse"}
args.xp = monster.XP
args.holiness = frame:expandTemplate{title = monster.Holiness}
args.magic_resistance = monster.MR
local hp_min = monster.HD*monster["Base HP"] + monster["Fixed HP"]
local hp_max = monster.HD*(monster["Base HP"]+monster["Rand HP"])+monster["Fixed HP"]
args.hp_range = ("%d-%d").format(hp_min, hp_max)
args.avg_hp = (hp_min + hp_max)/2
args.armour_class = monster.AC
args.evasion = monster.EV
args.habitat = monster.Habitat
args.speed = monster.Speed
args.size = frame:expandTemplate{title = monster.Size}
local item_use = {}
for i, v in ipairs(monster["Item Use"]) do
item_use[i] = frame:expandTemplate{title = v}
end
args.item_use = table.concat(item_use, "<br>")
for i = 1, 4 do
local attack = monster.Attacks[i]
if attack then
local type = frame:expandTemplate{title = attack.Type .. " type"}
local flavour = frame:expandTemplate{title = attack.Flavour .. " flavour"}
args["attack" .. i] = ("%d %s: %s").format(attack.Damage, type, flavour)
else
args["attack" .. i] = ""
end
end
args.hit_dice = monster.HD
args.base_hp = monster["Base HP"]
args.extra_hp = monster["Rand HP"]
args.fixed_hp = monster["Fixed HP"]
args.intelligence = frame:expandTemplate{title = monster.Intelligence .. " intelligence"}
args.genus = monster.Genus
args.species = monster.Species
return frame:expandTemplate{title = "monster", args = args}
end
return p