Module:Enemies

---	Enemies contains details of Risk of Rain 2's monsters. --	--	@module		enemies --	@alias		p --	@author		User:Cephalon Scientia --	@attribution	All who helped to update enemy infoboxes --	@require	Module:Enemies/Data --	@release	stable --

local MonsterData = mw.loadData('Module:Enemies/Data').Monsters

local p = {} table.unpack = unpack	-- pre-Lua 5.3 table library does not have unpack function

local tooltip_template = ' ' .. ' ' ..                             ' %s ' .. '%s%s (%s)' .. ' ' ..                           ' ' ..                              '%s' .. ' ' ..                         ' '

local monster_display = " HP: %s (+%s per level) Damage: %s (+%s per level) Class: %s Speed: %s Armor: %s "

---	Creates a monster link. --	@function		p.MonsterLink --	@param			{table} frame Frame object --	@return			{string} Preprocessed wikitext of resultant link function p.Tooltip(frame) local data = MonsterData[frame.args[1]] if data == nil then return frame:preprocess("Invalid monster! ") end local str = string.format(		tooltip_template,		data.Image and "" or "",		data.Expansion and "" or "",		data.Name or "Unknown",		(data.Type == "Boss" or data.Type == "Special Boss") and "boss" or "white",		data.Type or "Unknown",		string.format(monster_display, data.BaseHealth and tostring(data.BaseHealth) or "Unknown", data.ScalingHealth and tostring(data.ScalingHealth) or "Unknown", data.BaseDamage and tostring(data.BaseDamage) or "Unknown", data.ScalingDamage and tostring(data.ScalingDamage) or "Unknown", data.Class or "Unknown", data.BaseSpeed and tostring(data.BaseSpeed) or "Unknown", data.BaseArmor and tostring(data.BaseArmor) or "Unknown" )	)	return frame:preprocess(str) end

---	Builds a wikitable of all monsters. --	@function		p.BuildAllMonstersTable --	@param			{table} frame Frame object --	@return			{string} Preprocessed wikitext of resultant wikitable --	@usage			p.BuildAllMonstersTable(mw.getCurrentFrame) or function p.BuildAllMonstersTable(frame) local wikitable = { [=[ {| class="wikitable sortable" ! Image ! Name ! Base Health ! Health Scaling ! Base Damage ! Damage Scaling ! Base Health Regen ! Scaling Health Regen ! Armor ! Movement Speed (m/s) ! Class ! Type }	-- Corresponding to key names in /Data -- Order will determine which where data will appear in below format string local keyNames = { "Image", "Link", "Name", "Expansion", "BaseHealth", "ScalingHealth", "BaseDamage", "ScalingDamage", "BaseHealthRegen", "ScalingHealthRegen", "BaseArmor", "BaseSpeed", "Class", "Type" }	-- Table row looks like format string: "| [[File:%s]] || %s%s || %s || ... || %s" -- Would eventually become something like: -- | [[File:Gup.png]] || Gup || 1000 || 300 || 12 || 2.4 || N/A || N/A || N/A || 12 local tableRow = (function		local temp = { "| %s || %s%s" }		-- For function chaining syntax		temp.remove = function(self, elem)			table.remove(self, #self)			return self		end		for _, key in ipairs(keyNames) do			table.insert(temp, " || %s")		end		-- Removing extra columns since first two columns have custom formatting		temp:remove:remove:remove:remove		table.insert(temp, "\n|-")		return table.concat(temp, "")	end) for _, monsterEntry in pairs(MonsterData) do		local keyValues = {} for _, key in pairs(keyNames) do			-- Adding expansion icon after monster name if (key == "Expansion") then table.insert(keyValues, monsterEntry[key] == "SotV" and "" or "") else table.insert(keyValues, monsterEntry[key] or "N/A") end end table.insert(wikitable, tableRow:format(table.unpack(keyValues))) end table.insert(wikitable, "|}") return frame:preprocess(table.concat(wikitable, "\n")) end
 * -]=]

return p