Module:Species
Documentation for this module may be created at Module:Species/doc
local p = {} local data = mw.loadData('Module:Table of species') local function name_arg(frame) local name = frame.args[1] if not name or name == "" then name = mw.title.getCurrentTitle().text end return name end local function species_plural(species) if species == "Mummy" then return "Mummies" elseif species == "Deep Elf" or species == "High Elf" or species == "Deep Dwarf" then return species:sub(1, -2) .. "ves" elseif species == "Naga" or species == "Demonspawn" or species == "Tengu" or species == "Merfolk" then return species end return species .. "s" end function p.preferred_backgrounds(frame) local name = name_arg(frame) local species = data[name] local categories = {{}, {}, {}, {}, {}} local cat_names = {"Warriors", "Adventurers", "Zealots", "Warrior-mages", "Mages"} for _, bg in pairs(species.Backgrounds) do local cat = categories[5] if bg == "Fighter" or bg == "Gladiator" or bg == "Monk" or bg == "Hunter" or bg == "Assassin" then cat = categories[1] elseif bg == "Artificer" or bg == "Wanderer" then cat = categories[2] elseif bg == "Berserker" or bg == "Abyssal Knight" or bg == "Chaos Knight" then cat = categories[3] elseif bg == "Skald" or bg == "Transmuter" or bg == "Warper" or bg == "Arcane Marksman" or bg == "Enchanter" then cat = categories[4] end table.insert(cat, "[[" .. bg .. "]]") end local result = "==Preferred Backgrounds==\n" for i, cat in pairs(categories) do if #cat > 0 then result = result .. "*'''" .. cat_names[i] .. ":''' " .. table.concat(cat, ", ") .. "\n" end end return result end function p.base_stats(frame) local name = name_arg(frame) local species = data[name] local result = ("%s have a base [[Strength]] of %d, [[Intelligence]] of %d, and [[Dexterity]] of %d (before Background modifiers)."):format(species_plural(name), species.Strength, species.Intelligence, species.Dexterity) local mp = species.Aptitudes["Magic Points"] if mp ~= 0 then result = result .. (" They have %+d to base [[magic points]]."):format(mp) end return result end local function mr_gain(species) if name == "Draconian" then return ("+%d [[magic resistance]] per level (+%d for purple Draconians)."):format(species.MR, data["Purple Draconian"].MR) else return ("+%d [[magic resistance]] per level."):format(species.MR) end end local function hp_apt(species) local hp = species.Aptitudes["Hit Points"] if hp < 0 then return ("%d%% less HP than average."):format(-hp*10) elseif hp == 0 then return "Average [[hit points]]." else return ("%d%% more HP than average."):format(hp*10) end end function p.level_bonuses(frame) local name = name_arg(frame) local species = data[name] return ([[* %s * %s ]]):format(mr_gain(species), hp_apt(species)) end return p