Difference between revisions of "Module:Infobox Enemy"

From ALttP Speedrunning Wiki
Jump to: navigation, search
Line 4: Line 4:
  
 
local sprdmg = require('Module:Sprite Damage')
 
local sprdmg = require('Module:Sprite Damage')
 +
local hearts = require('Module:Damage display')._main
  
 
local weapon_names = {
 
local weapon_names = {
Line 61: Line 62:
 
spr_dmg['hammer'] = spr_dmg['sword 3']
 
spr_dmg['hammer'] = spr_dmg['sword 3']
 
end
 
end
 +
 +
local bump = {
 +
green = hearts(sprdmg._getBumpForId(spr_id, 'green')),
 +
blue = hearts(sprdmg._getBumpForId(spr_id, 'blue')),
 +
red = hearts(sprdmg._getBumpForId(spr_id, 'red'))
 +
}
  
 
local ret = mw.html.create('table')
 
local ret = mw.html.create('table')
Line 235: Line 242:
 
:tag('td')
 
:tag('td')
 
:css('text-align', 'right')
 
:css('text-align', 'right')
:wikitext(args.mail1)
+
:wikitext(bump.green)
 
:done()
 
:done()
 
:tag('td')
 
:tag('td')
Line 242: Line 249:
 
:tag('td')
 
:tag('td')
 
:css('text-align', 'right')
 
:css('text-align', 'right')
:wikitext(args.mail2)
+
:wikitext(bump.blue)
 
:done()
 
:done()
 
:tag('td')
 
:tag('td')
Line 249: Line 256:
 
:tag('td')
 
:tag('td')
 
:css('text-align', 'right')
 
:css('text-align', 'right')
:wikitext(args.mail3)
+
:wikitext(bump.red)
 
:done()
 
:done()
 
:done()
 
:done()

Revision as of 11:57, 6 June 2019

Documentation for this module may be created at Enemy/doc&action=edit&redlink=1 Module:Infobox Enemy/doc

-- <nowiki>

local p = {}

local sprdmg = require('Module:Sprite Damage')
local hearts = require('Module:Damage display')._main

local weapon_names = {
	'boomerang', 'sword 1', 'sword 2', 'sword 3', 'sword 4', 'sword 5',
	'arrow', 'hookshot', 'bomb', 'silver', 'powder', 'fire rod', 'ice rod', 'bombos', 'ether', 'quake' }

local unique_damage = {
	[0xF9] = 'Fairy',
	[0xFA] = 'Slime',
	[0xFB] = 'Short stun',
	[0xFC] = 'Stun',
	[0xFD] = 'Burn',
	[0xFE] = 'Freeze',
	[0xFF] = 'Long stun'
}

function p.main(frame)
	local args = frame:getParent().args

	local spr_id = tonumber(args.id:gsub('0x', ''), 16)
	local hp =  sprdmg._getHPForId(spr_id) or tonumber(args.hp or 0, 10)

	local spr_dmg = {
		['boomerang'] = sprdmg._getDamageForId(spr_id, 'boomerang'),
		['sword 1'] = sprdmg._getDamageForId(spr_id, 'sword 1'),
		['sword 2'] = sprdmg._getDamageForId(spr_id, 'sword 2'),
		['sword 3'] = sprdmg._getDamageForId(spr_id, 'sword 3'),
		['sword 4'] = sprdmg._getDamageForId(spr_id, 'sword 4'),
		['sword 5'] = sprdmg._getDamageForId(spr_id, 'sword 5'),
		['arrow'] = sprdmg._getDamageForId(spr_id, 'arrow'),
		['hookshot'] = sprdmg._getDamageForId(spr_id, 'hookshot'),
		['bomb'] = sprdmg._getDamageForId(spr_id, 'bomb'),
		['silver'] = sprdmg._getDamageForId(spr_id, 'silver'),
		['powder'] = sprdmg._getDamageForId(spr_id, 'powder'),
		['fire rod'] = sprdmg._getDamageForId(spr_id, 'fire rod'),
		['ice rod'] = sprdmg._getDamageForId(spr_id, 'ice rod'),
		['bombos'] = sprdmg._getDamageForId(spr_id, 'bombos'),
		['ether'] = sprdmg._getDamageForId(spr_id, 'ether'),
		['quake'] = sprdmg._getDamageForId(spr_id, 'quake')
	}

	if (args.byrna or ''):lower() == 'no' then
		spr_dmg['byrna'] = 0
	else
		spr_dmg['byrna'] = spr_dmg['sword 1']
	end

	if (args.somaria or ''):lower() == 'no' then
		spr_dmg['somaria'] = 0
	else
		spr_dmg['somaria'] = spr_dmg['sword 1']
	end

	if (args.hammer or ''):lower() == 'no' then
		spr_dmg['hammer'] = 0
	else
		spr_dmg['hammer'] = spr_dmg['sword 3']
	end

	local bump = {
		green = hearts(sprdmg._getBumpForId(spr_id, 'green')),
		blue = hearts(sprdmg._getBumpForId(spr_id, 'blue')),
		red = hearts(sprdmg._getBumpForId(spr_id, 'red'))
	}

	local ret = mw.html.create('table')
					:addClass('wikitable infobox')

	ret	:tag('caption')
			:wikitext(args.name)
			:done()
			:tag('tr')
				:tag('td')
					:attr('colspan', '6')
					:wikitext(string.format('[[File:%s|center]]', args.image))
					:done()
				:done()
			:tag('tr')
				:tag('th')
					:attr('colspan', '2')
					:wikitext('HP')
					:done()
				:tag('td')
					:attr('colspan', '4')
					:css('font-weight', 'bold')
					:css('text-align', 'right')
					:wikitext(hp)
					:done()
				:done()
			:tag('tr')
				:tag('td')
					:wikitext('[[File:Icon Bow.png|link=]]')
					:done()
				:tag('td')
					:addClass('damage')
					:wikitext(fmtdmg(spr_dmg['arrow'], hp))
					:done()
				:tag('td')
					:wikitext('[[File:Icon Silver Bow.png|link=]]')
					:done()
				:tag('td')
					:addClass('damage')
					:wikitext(fmtdmg(spr_dmg['silver'], hp))
					:done()
				:tag('td')
					:wikitext('[[File:Icon Powder.png|link=]]')
					:done()
				:tag('td')
					:addClass('damage')
					:wikitext(fmtdmg(spr_dmg['powder'], hp))
					:done()
				:done()
			:tag('tr')
				:tag('td')
					:wikitext('[[File:Icon L1 Sword.png|link=]]')
					:done()
				:tag('td')
					:addClass('damage')
					:wikitext(fmtdmg(spr_dmg['sword 1'], hp))
					:done()
				:tag('td')
					:wikitext('[[File:Icon Cane of Somaria.png|link=]]')
					:done()
				:tag('td')
					:addClass('damage')
					:wikitext(fmtdmg(spr_dmg['somaria'], hp))
					:done()
				:tag('td')
					:wikitext('[[File:Icon Cane of Byrna.png|link=]]')
					:done()
				:tag('td')
					:addClass('damage')
					:wikitext(fmtdmg(spr_dmg['byrna'], hp))
					:done()
				:done()

			:tag('tr')
				:tag('td')
					:wikitext('[[File:Icon L2 Sword.png|link=]]')
					:done()
				:tag('td')
					:addClass('damage')
					:wikitext(fmtdmg(spr_dmg['sword 2'], hp))
					:done()
				:tag('td')
					:wikitext('[[File:Icon Fire Rod.png|link=]]')
					:done()
				:tag('td')
					:addClass('damage')
					:wikitext(fmtdmg(spr_dmg['fire rod'], hp))
					:done()
				:tag('td')
					:wikitext('[[File:Icon Ice Rod.png|link=]]')
					:done()
				:tag('td')
					:addClass('damage')
					:wikitext(fmtdmg(spr_dmg['ice rod'], hp))
					:done()
				:done()

			:tag('tr')
				:tag('td')
					:wikitext('[[File:Icon L3 Sword.png|link=]]')
					:done()
				:tag('td')
					:addClass('damage')
					:wikitext(fmtdmg(spr_dmg['sword 3'], hp))
					:done()
				:tag('td')
					:wikitext('[[File:Icon Hammer.png|link=]]')
					:done()
				:tag('td')
					:addClass('damage')
					:wikitext(fmtdmg(spr_dmg['hammer'], hp))
					:done()
				:tag('td')
					:wikitext('[[File:Icon Bombs.png|link=]]')
					:done()
				:tag('td')
					:addClass('damage')
					:wikitext(fmtdmg(spr_dmg['bomb'], hp))
					:done()
				:done()

			:tag('tr')
				:tag('td')
					:wikitext('[[File:Icon L4 Sword.png|link=]]')
					:done()
				:tag('td')
					:addClass('damage')
					:wikitext(fmtdmg(spr_dmg['sword 4'], hp))
					:done()
				:tag('td')
					:wikitext('[[File:Icon Boomerang.png|link=]]')
					:done()
				:tag('td')
					:addClass('damage')
					:wikitext(fmtdmg(spr_dmg['boomerang'], hp))
					:done()
				:tag('td')
					:wikitext('[[File:Icon Hookshot.png|link=]]')
					:done()
				:tag('td')
					:addClass('damage')
					:wikitext(fmtdmg(spr_dmg['hookshot'], hp))
					:done()
				:done()

			:tag('tr')
				:tag('td')
					:wikitext('[[File:Icon Bombos.png|link=]]')
					:done()
				:tag('td')
					:addClass('damage')
					:wikitext(fmtdmg(spr_dmg['bombos'], hp))
					:done()
				:tag('td')
					:wikitext('[[File:Icon Ether.png|link=]]')
					:done()
				:tag('td')
					:addClass('damage')
					:wikitext(fmtdmg(spr_dmg['ether'], hp))
					:done()
				:tag('td')
					:wikitext('[[File:Icon Quake.png|link=]]')
					:done()
				:tag('td')
					:addClass('damage')
					:wikitext(fmtdmg(spr_dmg['quake'], hp))
					:done()
				:done()

			:tag('tr')
				:tag('td')
					:wikitext('[[File:Icon Green Mail.png|link=]]')
					:done()
				:tag('td')
					:css('text-align', 'right')
					:wikitext(bump.green)
					:done()
				:tag('td')
					:wikitext('[[File:Icon Blue Mail.png|link=]]')
					:done()
				:tag('td')
					:css('text-align', 'right')
					:wikitext(bump.blue)
					:done()
				:tag('td')
					:wikitext('[[File:Icon Red Mail.png|link=]]')
					:done()
				:tag('td')
					:css('text-align', 'right')
					:wikitext(bump.red)
					:done()
				:done()
			:done()
		:done()

	return ret
end

function fmtdmg(damage, hp)
	if unique_damage[damage] then
		return unique_damage[damage]
	elseif damage >= hp and damage ~= 0 then
		return string.format('<span class="spr-ohko">%s</span>', damage)
	else
		if damage == 0 then
			damage = '-'
		end
		return damage
	end
end

return p