<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.pokemonrevolution.net/index.php?action=history&amp;feed=atom&amp;title=Module%3AMoveTutorTable</id>
	<title>Module:MoveTutorTable - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.pokemonrevolution.net/index.php?action=history&amp;feed=atom&amp;title=Module%3AMoveTutorTable"/>
	<link rel="alternate" type="text/html" href="https://wiki.pokemonrevolution.net/index.php?title=Module:MoveTutorTable&amp;action=history"/>
	<updated>2026-11-05T04:43:00Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.46.0</generator>
	<entry>
		<id>https://wiki.pokemonrevolution.net/index.php?title=Module:MoveTutorTable&amp;diff=40856&amp;oldid=prev</id>
		<title>Cae: created page</title>
		<link rel="alternate" type="text/html" href="https://wiki.pokemonrevolution.net/index.php?title=Module:MoveTutorTable&amp;diff=40856&amp;oldid=prev"/>
		<updated>2026-07-31T12:13:18Z</updated>

		<summary type="html">&lt;p&gt;created page&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
local DATA_FORMAT = &amp;#039;CSV with header&amp;#039;&lt;br /&gt;
&lt;br /&gt;
local function nonEmpty(s)&lt;br /&gt;
	if s == nil then return nil end&lt;br /&gt;
	s = mw.text.trim(tostring(s))&lt;br /&gt;
	if s == &amp;#039;&amp;#039; then return nil end&lt;br /&gt;
	return s&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local moveRowsCache = nil&lt;br /&gt;
local function moveRows()&lt;br /&gt;
	if moveRowsCache then return moveRowsCache end&lt;br /&gt;
	local csvData = mw.ext.externalData.getExternalData{&lt;br /&gt;
		url = &amp;#039;https://wiki.pokemonrevolution.net/index.php?title=Special:GetData/RawMovesList&amp;#039;,&lt;br /&gt;
		format = DATA_FORMAT,&lt;br /&gt;
		data = {&lt;br /&gt;
			name = &amp;#039;Name&amp;#039;, type = &amp;#039;Type&amp;#039;, category = &amp;#039;Category&amp;#039;, power = &amp;#039;Power&amp;#039;,&lt;br /&gt;
			accuracy = &amp;#039;Accuracy&amp;#039;, pp = &amp;#039;PP&amp;#039;, priority = &amp;#039;Priority&amp;#039;,&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
	moveRowsCache = {}&lt;br /&gt;
	if csvData then&lt;br /&gt;
		for _, row in ipairs(csvData) do&lt;br /&gt;
			if nonEmpty(row.name) then&lt;br /&gt;
				moveRowsCache[row.name] = row&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return moveRowsCache&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local typeColorCache = {}&lt;br /&gt;
local function typeColor(frame, pokeType)&lt;br /&gt;
	pokeType = nonEmpty(pokeType) or &amp;#039;Normal&amp;#039;&lt;br /&gt;
	if not typeColorCache[pokeType] then&lt;br /&gt;
		typeColorCache[pokeType] = {&lt;br /&gt;
			light = frame:expandTemplate{ title = pokeType .. &amp;#039; color light&amp;#039; },&lt;br /&gt;
			base = frame:expandTemplate{ title = pokeType .. &amp;#039; color&amp;#039; },&lt;br /&gt;
			dark = frame:expandTemplate{ title = pokeType .. &amp;#039; color dark&amp;#039; },&lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
	return typeColorCache[pokeType]&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local categoryColorCache = {}&lt;br /&gt;
local function categoryColor(frame, category)&lt;br /&gt;
	category = nonEmpty(category) or &amp;#039;Status&amp;#039;&lt;br /&gt;
	if not categoryColorCache[category] then&lt;br /&gt;
		categoryColorCache[category] = {&lt;br /&gt;
			base = frame:expandTemplate{ title = category .. &amp;#039; color&amp;#039; },&lt;br /&gt;
			dark = frame:expandTemplate{ title = category .. &amp;#039; color dark&amp;#039; },&lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
	return categoryColorCache[category]&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local parent = frame:getParent()&lt;br /&gt;
	local args = (parent and parent.args) or frame.args&lt;br /&gt;
&lt;br /&gt;
	local moveName = nonEmpty(args.Move)&lt;br /&gt;
	if not moveName then&lt;br /&gt;
		return &amp;quot;&amp;lt;span style=&amp;#039;color:red&amp;#039;&amp;gt;Usage: {{MoveTutorTable|Move=MoveName|Contents=...}}&amp;lt;/span&amp;gt;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local row = moveRows()[moveName]&lt;br /&gt;
	if not row then&lt;br /&gt;
		return &amp;quot;&amp;lt;span style=&amp;#039;color:red&amp;#039;&amp;gt;Data load error: No move data found for &amp;quot; .. moveName .. &amp;quot;&amp;lt;/span&amp;gt;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local moveType = nonEmpty(row.type) or &amp;#039;Normal&amp;#039;&lt;br /&gt;
	local category = nonEmpty(row.category) or &amp;#039;Status&amp;#039;&lt;br /&gt;
	local colors = typeColor(frame, moveType)&lt;br /&gt;
	local catColors = categoryColor(frame, category)&lt;br /&gt;
&lt;br /&gt;
	local power = nonEmpty(row.power) or &amp;#039;—&amp;#039;&lt;br /&gt;
	local accuracy = nonEmpty(row.accuracy) or &amp;#039;&amp;#039;&lt;br /&gt;
	local pp = nonEmpty(row.pp) or &amp;#039;&amp;#039;&lt;br /&gt;
	local priorityNum = tonumber(row.priority) or 0&lt;br /&gt;
	local priorityText = (priorityNum &amp;gt; 0 and &amp;#039;+&amp;#039; or &amp;#039;&amp;#039;) .. tostring(priorityNum)&lt;br /&gt;
&lt;br /&gt;
	local contents = mw.ustring.gsub(mw.text.trim(args.Contents or &amp;#039;&amp;#039;), &amp;#039;\n&amp;#039;, &amp;#039;&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
	local function valueBox(text)&lt;br /&gt;
		return &amp;#039;&amp;lt;div style=&amp;quot;background-color:#FFFFFF; border: 1px solid #&amp;#039; .. colors.dark ..&lt;br /&gt;
			&amp;#039;; border-radius: 25px; width: 30%; margin: auto auto; color:#000000; font-weight: normal;&amp;quot;&amp;gt;&amp;#039; ..&lt;br /&gt;
			text .. &amp;#039;&amp;lt;/div&amp;gt;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local buf = {}&lt;br /&gt;
	buf[#buf + 1] = &amp;#039;&amp;lt;table style=&amp;quot;width:73%; background-color:#&amp;#039; .. colors.base .. &amp;#039;; border: 5px solid #&amp;#039; ..&lt;br /&gt;
		colors.dark .. &amp;#039;; font-weight: bold; color: #&amp;#039; .. colors.dark .. &amp;#039;; border-radius: 25px; padding: 4px; &amp;#039; ..&lt;br /&gt;
		&amp;#039;text-align: center;&amp;quot;&amp;gt;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
	buf[#buf + 1] = &amp;#039;&amp;lt;tr style=&amp;quot;background-color:#&amp;#039; .. colors.light .. &amp;#039;;&amp;quot;&amp;gt;&amp;lt;td colspan=&amp;quot;4&amp;quot; style=&amp;quot;&amp;#039; ..&lt;br /&gt;
		&amp;#039;border-radius: 25px; border: 3px solid #&amp;#039; .. colors.dark .. &amp;#039;;&amp;quot;&amp;gt;[[&amp;#039; .. moveName ..&lt;br /&gt;
		&amp;#039;|&amp;lt;span style=&amp;quot;color:#&amp;#039; .. colors.dark .. &amp;#039;;&amp;quot;&amp;gt;&amp;#039; .. moveName .. &amp;#039;&amp;lt;/span&amp;gt;]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
	buf[#buf + 1] = &amp;#039;&amp;lt;tr style=&amp;quot;background-color:#&amp;#039; .. colors.light .. &amp;#039;;&amp;quot;&amp;gt;&amp;#039; ..&lt;br /&gt;
		&amp;#039;&amp;lt;td style=&amp;quot;border-radius: 25px 1px 1px 25px; border: 3px solid #&amp;#039; .. colors.dark ..&lt;br /&gt;
		&amp;#039;; padding: 4px;&amp;quot;&amp;gt;Type&amp;lt;/td&amp;gt;&amp;#039; ..&lt;br /&gt;
		&amp;#039;&amp;lt;td style=&amp;quot;border-radius: 1px 25px 25px 1px; border: 3px solid #&amp;#039; .. colors.dark ..&lt;br /&gt;
		&amp;#039;; padding: 4px; background-color:#&amp;#039; .. colors.dark .. &amp;#039;;&amp;quot;&amp;gt;[[&amp;#039; .. moveType ..&lt;br /&gt;
		&amp;#039;_(type)|&amp;lt;span style=&amp;quot;color:#FFFFFF; font-weight: normal;&amp;quot;&amp;gt;&amp;#039; .. moveType .. &amp;#039;&amp;lt;/span&amp;gt;]]&amp;lt;/td&amp;gt;&amp;#039; ..&lt;br /&gt;
		&amp;#039;&amp;lt;td style=&amp;quot;border-radius: 25px 1px 1px 25px; border: 3px solid #&amp;#039; .. colors.dark ..&lt;br /&gt;
		&amp;#039;; padding: 4px;&amp;quot;&amp;gt;Category&amp;lt;/td&amp;gt;&amp;#039; ..&lt;br /&gt;
		&amp;#039;&amp;lt;td style=&amp;quot;border-radius: 1px 25px 25px 1px; border: 3px solid #&amp;#039; .. catColors.dark ..&lt;br /&gt;
		&amp;#039;; padding: 4px; background-color:#&amp;#039; .. catColors.base .. &amp;#039;;&amp;quot;&amp;gt;[[&amp;#039; .. category ..&lt;br /&gt;
		&amp;#039;_Moves|&amp;lt;span style=&amp;quot;color:#FFFFFF; font-weight: normal;&amp;quot;&amp;gt;&amp;#039; .. category .. &amp;#039;&amp;lt;/span&amp;gt;]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
	buf[#buf + 1] = &amp;#039;&amp;lt;tr style=&amp;quot;background-color:#&amp;#039; .. colors.light .. &amp;#039;;&amp;quot;&amp;gt;&amp;#039; ..&lt;br /&gt;
		&amp;#039;&amp;lt;td style=&amp;quot;border-radius: 25px 1px 1px 25px; border: 3px solid #&amp;#039; .. colors.dark ..&lt;br /&gt;
		&amp;#039;; padding: 4px;&amp;quot;&amp;gt;Base power&amp;#039; .. valueBox(power) .. &amp;#039;&amp;lt;/td&amp;gt;&amp;#039; ..&lt;br /&gt;
		&amp;#039;&amp;lt;td style=&amp;quot;border: 3px solid #&amp;#039; .. colors.dark .. &amp;#039;; padding: 4px;&amp;quot;&amp;gt;Accuracy&amp;#039; .. valueBox(accuracy) ..&lt;br /&gt;
		&amp;#039;&amp;lt;/td&amp;gt;&amp;#039; ..&lt;br /&gt;
		&amp;#039;&amp;lt;td style=&amp;quot;border: 3px solid #&amp;#039; .. colors.dark .. &amp;#039;; padding: 4px;&amp;quot;&amp;gt;[[Priority Moves|&amp;lt;span style=&amp;quot;color:#&amp;#039; ..&lt;br /&gt;
		colors.dark .. &amp;#039;;&amp;quot;&amp;gt;Priority&amp;lt;/span&amp;gt;]]&amp;#039; .. valueBox(priorityText) .. &amp;#039;&amp;lt;/td&amp;gt;&amp;#039; ..&lt;br /&gt;
		&amp;#039;&amp;lt;td style=&amp;quot;border-radius: 1px 25px 25px 1px; border: 3px solid #&amp;#039; .. colors.dark ..&lt;br /&gt;
		&amp;#039;; padding: 4px;&amp;quot;&amp;gt;PP&amp;#039; .. valueBox(pp) .. &amp;#039;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
	buf[#buf + 1] = &amp;#039;&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;4&amp;quot;&amp;gt;&amp;#039; ..&lt;br /&gt;
		&amp;#039;&amp;lt;table style=&amp;quot;border-radius: 25px; border: 3px solid #&amp;#039; .. colors.dark .. &amp;#039;; background-color:#&amp;#039; ..&lt;br /&gt;
		colors.light .. &amp;#039;; padding: 6px; width: 100%;&amp;quot;&amp;gt;&amp;#039; ..&lt;br /&gt;
		&amp;#039;&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;Tutor locations&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;#039; ..&lt;br /&gt;
		&amp;#039;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;table cellpadding=&amp;quot;5&amp;quot; class=&amp;quot;collapsible collapsed&amp;quot; style=&amp;quot;width: 100%; padding: 3px;&amp;quot;&amp;gt;&amp;#039; ..&lt;br /&gt;
		&amp;#039;&amp;lt;tr style=&amp;quot;background-color: #&amp;#039; .. colors.dark .. &amp;#039;; color: #FFFFFF;&amp;quot;&amp;gt;&amp;#039; ..&lt;br /&gt;
		&amp;#039;&amp;lt;th style=&amp;quot;width: 28%; border: 1px solid #&amp;#039; .. colors.base .. &amp;#039;; position: relative;&amp;quot;&amp;gt;&amp;#039; ..&lt;br /&gt;
		&amp;#039;&amp;lt;div style=&amp;quot;position: absolute; left: 0; right: 0; top: 50%; transform: translateY(-50%); &amp;#039; ..&lt;br /&gt;
		&amp;#039;text-align: center; pointer-events: none;&amp;quot;&amp;gt;Location&amp;lt;/div&amp;gt;&amp;lt;/th&amp;gt;&amp;#039; ..&lt;br /&gt;
		&amp;#039;&amp;lt;th width=&amp;quot;9%&amp;quot; style=&amp;quot;border: 1px solid #&amp;#039; .. colors.base .. &amp;#039;;&amp;quot;&amp;gt;Price&amp;lt;/th&amp;gt;&amp;#039; ..&lt;br /&gt;
		&amp;#039;&amp;lt;th style=&amp;quot;width: 70%; border: 1px solid #&amp;#039; .. colors.base .. &amp;#039;;&amp;quot;&amp;gt;Prerequisites&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&amp;#039; ..&lt;br /&gt;
		contents ..&lt;br /&gt;
		&amp;#039;&amp;lt;/table&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
	buf[#buf + 1] = &amp;#039;&amp;lt;/table&amp;gt;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
	return table.concat(buf)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Cae</name></author>
	</entry>
</feed>