<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.dragonminez.com/index.php?action=history&amp;feed=atom&amp;title=Module%3ARecipes</id>
	<title>Module:Recipes - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.dragonminez.com/index.php?action=history&amp;feed=atom&amp;title=Module%3ARecipes"/>
	<link rel="alternate" type="text/html" href="https://wiki.dragonminez.com/index.php?title=Module:Recipes&amp;action=history"/>
	<updated>2026-10-26T19:10:00Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.11</generator>
	<entry>
		<id>https://wiki.dragonminez.com/index.php?title=Module:Recipes&amp;diff=37688&amp;oldid=prev</id>
		<title>Shokkoh: Sync from dragonminez-wiki repository</title>
		<link rel="alternate" type="text/html" href="https://wiki.dragonminez.com/index.php?title=Module:Recipes&amp;diff=37688&amp;oldid=prev"/>
		<updated>2026-10-22T00:46:05Z</updated>

		<summary type="html">&lt;p&gt;Sync from dragonminez-wiki repository&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 00:46, 22 October 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l169&quot;&gt;Line 169:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 169:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	return &amp;#039;&amp;lt;div class=&amp;quot;dmz-recipe-card&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;dmz-recipe-card__title&amp;quot;&amp;gt;&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	return &amp;#039;&amp;lt;div class=&amp;quot;dmz-recipe-card&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;dmz-recipe-card__title&amp;quot;&amp;gt;&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		.. mw.text.nowiki( nameOf( recipe.result[ 1 ], lang ) ) .. &amp;#039;&amp;lt;/div&amp;gt;&amp;#039; .. render( recipe, lang ) .. &amp;#039;&amp;lt;/div&amp;gt;&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		.. mw.text.nowiki( nameOf( recipe.result[ 1 ], lang ) ) .. &amp;#039;&amp;lt;/div&amp;gt;&amp;#039; .. render( recipe, lang ) .. &amp;#039;&amp;lt;/div&amp;gt;&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;end&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;local function armorRecipe( id )&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	local info = data.armor[ id ]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	if not info then&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;		return nil&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	end&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	local group = data.recipes[ &#039;kikono/&#039; .. info.piece ]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	local slots = {}&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	for name, items in pairs( group.slots ) do&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;		slots[ name ] = items&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	end&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	slots.pattern = { info.pattern }&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	return { kind = &#039;kikono&#039;, slots = slots, result = { id }, time = group.time, energy = group.energy }&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;end&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;end&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l183&quot;&gt;Line 183:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 197:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;			table.insert( list, recipe )&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;			table.insert( list, recipe )&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		end&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		end&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	end&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	local armor = #list == 0 and ( not kind or kind == &#039;kikono&#039; ) and armorRecipe( id )&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	if armor then&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;		table.insert( list, armor )&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	end&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	end&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	return list, id&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	return list, id&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l241&quot;&gt;Line 241:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 259:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	unknown = { en = &amp;#039;Unknown item: %s&amp;#039;, es = &amp;#039;Ítem desconocido: %s&amp;#039;, pt = &amp;#039;Item desconhecido: %s&amp;#039; },&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;	unknown = { en = &amp;#039;Unknown item: %s&amp;#039;, es = &amp;#039;Ítem desconocido: %s&amp;#039;, pt = &amp;#039;Item desconhecido: %s&amp;#039; },&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;local function armorRecipe( id )&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	local info = data.armor[ id ]&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	if not info then&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;		return nil&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	end&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	local group = data.recipes[ &#039;kikono/&#039; .. info.piece ]&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	local slots = {}&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	for name, items in pairs( group.slots ) do&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;		slots[ name ] = items&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	end&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	slots.pattern = { info.pattern }&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;	return { kind = &#039;kikono&#039;, slots = slots, result = { id }, time = group.time, energy = group.energy }&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;end&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;local function recipesOf( id )&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;local function recipesOf( id )&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key dmzwiki:diff:1.41:old-375:rev-37688:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>Shokkoh</name></author>
	</entry>
	<entry>
		<id>https://wiki.dragonminez.com/index.php?title=Module:Recipes&amp;diff=375&amp;oldid=prev</id>
		<title>Neb: Sync from dragonminez-wiki repository</title>
		<link rel="alternate" type="text/html" href="https://wiki.dragonminez.com/index.php?title=Module:Recipes&amp;diff=375&amp;oldid=prev"/>
		<updated>2026-10-13T04:20:21Z</updated>

		<summary type="html">&lt;p&gt;Sync from dragonminez-wiki repository&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 = mw.loadData( &amp;#039;Module:Recipes/data&amp;#039; )&lt;br /&gt;
local LANGUAGES = { en = true, es = true, pt = true }&lt;br /&gt;
local CYCLE_SECONDS = 1.5&lt;br /&gt;
local MAX_CYCLE = 8&lt;br /&gt;
&lt;br /&gt;
local TEXT = {&lt;br /&gt;
	shapeless = {&lt;br /&gt;
		en = &amp;#039;Shapeless: the ingredients can go in any slot&amp;#039;,&lt;br /&gt;
		es = &amp;#039;Sin forma: los ingredientes pueden ir en cualquier casilla&amp;#039;,&lt;br /&gt;
		pt = &amp;#039;Sem forma: os ingredientes podem ir em qualquer espaço&amp;#039;,&lt;br /&gt;
	},&lt;br /&gt;
	missing = { en = &amp;#039;No recipe for %s&amp;#039;, es = &amp;#039;No hay receta para %s&amp;#039;, pt = &amp;#039;Nenhuma receita para %s&amp;#039; },&lt;br /&gt;
	missingScreen = { en = &amp;#039;No screen called %s&amp;#039;, es = &amp;#039;No hay pantalla llamada %s&amp;#039;, pt = &amp;#039;Nenhuma tela chamada %s&amp;#039; },&lt;br /&gt;
	energy = { en = &amp;#039;%s Star Energy&amp;#039;, es = &amp;#039;%s de Energía Estelar&amp;#039;, pt = &amp;#039;%s de Energia Estelar&amp;#039; },&lt;br /&gt;
	energyName = { en = &amp;#039;Star Energy&amp;#039;, es = &amp;#039;Energía Estelar&amp;#039;, pt = &amp;#039;Energia Estelar&amp;#039; },&lt;br /&gt;
	seconds = { en = &amp;#039;%s s&amp;#039;, es = &amp;#039;%s s&amp;#039;, pt = &amp;#039;%s s&amp;#039; },&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local function language( frame )&lt;br /&gt;
	local lang = frame:preprocess( &amp;#039;{{PAGELANGUAGE}}&amp;#039; )&lt;br /&gt;
	if LANGUAGES[ lang ] then&lt;br /&gt;
		return lang&lt;br /&gt;
	end&lt;br /&gt;
	return &amp;#039;en&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function itemId( value )&lt;br /&gt;
	value = mw.text.trim( value or &amp;#039;&amp;#039; )&lt;br /&gt;
	if value == &amp;#039;&amp;#039; then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	if not value:find( &amp;#039;:&amp;#039;, 1, true ) then&lt;br /&gt;
		value = &amp;#039;dragonminez:&amp;#039; .. value&lt;br /&gt;
	end&lt;br /&gt;
	return value&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function count( list )&lt;br /&gt;
	local n = 0&lt;br /&gt;
	for _ in ipairs( list ) do&lt;br /&gt;
		n = n + 1&lt;br /&gt;
	end&lt;br /&gt;
	return n&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function number( value, lang )&lt;br /&gt;
	local out = tostring( math.floor( value + 0.5 ) )&lt;br /&gt;
	local sep = lang == &amp;#039;en&amp;#039; and &amp;#039;,&amp;#039; or &amp;#039;\194\160&amp;#039;&lt;br /&gt;
	local changed&lt;br /&gt;
	repeat&lt;br /&gt;
		out, changed = out:gsub( &amp;#039;^(%d+)(%d%d%d)&amp;#039;, &amp;#039;%1&amp;#039; .. sep .. &amp;#039;%2&amp;#039; )&lt;br /&gt;
	until changed == 0&lt;br /&gt;
	return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function seconds( ticks, lang )&lt;br /&gt;
	local value = ticks / 20&lt;br /&gt;
	local text&lt;br /&gt;
	if value == math.floor( value ) then&lt;br /&gt;
		text = tostring( math.floor( value ) )&lt;br /&gt;
	else&lt;br /&gt;
		text = string.format( &amp;#039;%.1f&amp;#039;, value )&lt;br /&gt;
		if lang ~= &amp;#039;en&amp;#039; then&lt;br /&gt;
			text = text:gsub( &amp;#039;%.&amp;#039;, &amp;#039;,&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return string.format( TEXT.seconds[ lang ], text )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function nameOf( id, lang )&lt;br /&gt;
	local item = data.items[ id ]&lt;br /&gt;
	if not item then&lt;br /&gt;
		return id&lt;br /&gt;
	end&lt;br /&gt;
	return item.name[ lang ] or item.name.en&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function tip( text )&lt;br /&gt;
	return &amp;#039;&amp;lt;span class=&amp;quot;dmz-recipe__tip&amp;quot;&amp;gt;&amp;#039; .. mw.text.nowiki( text ) .. &amp;#039;&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function icon( id, lang )&lt;br /&gt;
	local item = data.items[ id ]&lt;br /&gt;
	if not item then&lt;br /&gt;
		return &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	local name = nameOf( id, lang )&lt;br /&gt;
	local link = &amp;#039;&amp;#039;&lt;br /&gt;
	if item.page then&lt;br /&gt;
		link = &amp;#039;Special:MyLanguage/&amp;#039; .. item.page&lt;br /&gt;
	elseif item.url then&lt;br /&gt;
		link = item.url&lt;br /&gt;
	end&lt;br /&gt;
	local alt = name:gsub( &amp;#039;[|%[%]]&amp;#039;, &amp;#039;&amp;#039; )&lt;br /&gt;
	return &amp;#039;[[File:&amp;#039; .. item.icon .. &amp;#039;|link=&amp;#039; .. link .. &amp;#039;|alt=&amp;#039; .. alt .. &amp;#039;]]&amp;#039; .. tip( name )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function slot( position, items, lang, class, extra )&lt;br /&gt;
	local n = math.min( count( items ), MAX_CYCLE )&lt;br /&gt;
	local inner = {}&lt;br /&gt;
	if n == 1 then&lt;br /&gt;
		table.insert( inner, icon( items[ 1 ], lang ) )&lt;br /&gt;
	else&lt;br /&gt;
		for i = 1, n do&lt;br /&gt;
			local delay = ( i - 1 - n ) * CYCLE_SECONDS&lt;br /&gt;
			table.insert( inner, &amp;#039;&amp;lt;span class=&amp;quot;dmz-recipe__cycle dmz-recipe__cycle--&amp;#039; .. n&lt;br /&gt;
				.. &amp;#039;&amp;quot; style=&amp;quot;animation-delay:&amp;#039; .. delay .. &amp;#039;s&amp;quot;&amp;gt;&amp;#039; .. icon( items[ i ], lang ) .. &amp;#039;&amp;lt;/span&amp;gt;&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return &amp;#039;&amp;lt;span class=&amp;quot;dmz-recipe__slot&amp;#039; .. ( class or &amp;#039;&amp;#039; ) .. &amp;#039;&amp;quot; style=&amp;quot;left:&amp;#039; .. position[ 1 ]&lt;br /&gt;
		.. &amp;#039;px;top:&amp;#039; .. position[ 2 ] .. &amp;#039;px&amp;quot;&amp;gt;&amp;#039; .. table.concat( inner ) .. ( extra or &amp;#039;&amp;#039; ) .. &amp;#039;&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function fixed( layout, lang, html )&lt;br /&gt;
	for _, entry in ipairs( layout.fixed or {} ) do&lt;br /&gt;
		table.insert( html, slot( entry.pos, entry.items, lang, entry.plain and &amp;#039; dmz-recipe__slot--plain&amp;#039; or nil ) )&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function energy( layout, amount, lang )&lt;br /&gt;
	if not layout.energy then&lt;br /&gt;
		return &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	local box = layout.energy&lt;br /&gt;
	local label = amount and string.format( TEXT.energy[ lang ], number( amount, lang ) ) or TEXT.energyName[ lang ]&lt;br /&gt;
	return &amp;#039;&amp;lt;span class=&amp;quot;dmz-recipe__energy&amp;quot; style=&amp;quot;left:&amp;#039; .. box[ 1 ] .. &amp;#039;px;top:&amp;#039; .. box[ 2 ] .. &amp;#039;px;width:&amp;#039;&lt;br /&gt;
		.. box[ 3 ] .. &amp;#039;px;height:&amp;#039; .. box[ 4 ] .. &amp;#039;px&amp;quot;&amp;gt;&amp;#039; .. tip( label ) .. &amp;#039;&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function render( recipe, lang )&lt;br /&gt;
	local layout = data.layouts[ recipe.kind ]&lt;br /&gt;
	local station = nameOf( layout.station, lang ):gsub( &amp;#039;[|%[%]]&amp;#039;, &amp;#039;&amp;#039; )&lt;br /&gt;
	local html = {&lt;br /&gt;
		&amp;#039;&amp;lt;div class=&amp;quot;dmz-recipe dmz-recipe--&amp;#039; .. recipe.kind .. &amp;#039;&amp;quot; style=&amp;quot;width:&amp;#039; .. layout.width&lt;br /&gt;
			.. &amp;#039;px;height:&amp;#039; .. layout.height .. &amp;#039;px&amp;quot;&amp;gt;&amp;#039;,&lt;br /&gt;
		&amp;#039;[[File:&amp;#039; .. layout.file .. &amp;#039;|link=|alt=&amp;#039; .. station .. &amp;#039;]]&amp;#039;,&lt;br /&gt;
	}&lt;br /&gt;
	fixed( layout, lang, html )&lt;br /&gt;
	for name, items in pairs( recipe.slots ) do&lt;br /&gt;
		local position = layout.slots[ name ]&lt;br /&gt;
		if position then&lt;br /&gt;
			table.insert( html, slot( position, items, lang ) )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local amount = &amp;#039;&amp;#039;&lt;br /&gt;
	if recipe.count then&lt;br /&gt;
		amount = &amp;#039;&amp;lt;span class=&amp;quot;dmz-recipe__count&amp;quot;&amp;gt;&amp;#039; .. recipe.count .. &amp;#039;&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	table.insert( html, slot( layout.slots.result, recipe.result, lang, &amp;#039; dmz-recipe__slot--result&amp;#039;, amount ) )&lt;br /&gt;
	if recipe.shapeless and layout.shapeless then&lt;br /&gt;
		table.insert( html, &amp;#039;&amp;lt;span class=&amp;quot;dmz-recipe__shapeless material-symbols-rounded&amp;quot; style=&amp;quot;left:&amp;#039;&lt;br /&gt;
			.. layout.shapeless[ 1 ] .. &amp;#039;px;top:&amp;#039; .. layout.shapeless[ 2 ] .. &amp;#039;px&amp;quot; title=&amp;quot;&amp;#039;&lt;br /&gt;
			.. TEXT.shapeless[ lang ] .. &amp;#039;&amp;quot;&amp;gt;shuffle&amp;lt;/span&amp;gt;&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	if recipe.time and layout.time then&lt;br /&gt;
		table.insert( html, &amp;#039;&amp;lt;span class=&amp;quot;dmz-recipe__time&amp;quot; style=&amp;quot;left:&amp;#039; .. layout.time[ 1 ] .. &amp;#039;px;top:&amp;#039;&lt;br /&gt;
			.. layout.time[ 2 ] .. &amp;#039;px&amp;quot;&amp;gt;&amp;#039; .. seconds( recipe.time, lang ) .. &amp;#039;&amp;lt;/span&amp;gt;&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	if recipe.energy then&lt;br /&gt;
		table.insert( html, energy( layout, recipe.energy, lang ) )&lt;br /&gt;
	end&lt;br /&gt;
	table.insert( html, &amp;#039;&amp;lt;/div&amp;gt;&amp;#039; )&lt;br /&gt;
	return table.concat( html )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function card( recipe, lang )&lt;br /&gt;
	return &amp;#039;&amp;lt;div class=&amp;quot;dmz-recipe-card&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;dmz-recipe-card__title&amp;quot;&amp;gt;&amp;#039;&lt;br /&gt;
		.. mw.text.nowiki( nameOf( recipe.result[ 1 ], lang ) ) .. &amp;#039;&amp;lt;/div&amp;gt;&amp;#039; .. render( recipe, lang ) .. &amp;#039;&amp;lt;/div&amp;gt;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function recipesFor( arg, kind )&lt;br /&gt;
	local value = mw.text.trim( arg or &amp;#039;&amp;#039; )&lt;br /&gt;
	if data.recipes[ value ] then&lt;br /&gt;
		return { data.recipes[ value ] }&lt;br /&gt;
	end&lt;br /&gt;
	local id = itemId( value )&lt;br /&gt;
	local list = {}&lt;br /&gt;
	for _, recipeId in ipairs( data.byResult[ id ] or {} ) do&lt;br /&gt;
		local recipe = data.recipes[ recipeId ]&lt;br /&gt;
		if not kind or recipe.kind == kind then&lt;br /&gt;
			table.insert( list, recipe )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return list, id&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function wrap( out, small )&lt;br /&gt;
	local class = &amp;#039;dmz-recipes&amp;#039;&lt;br /&gt;
	if small then&lt;br /&gt;
		class = class .. &amp;#039; dmz-recipes--small&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	return &amp;#039;&amp;lt;div class=&amp;quot;&amp;#039; .. class .. &amp;#039;&amp;quot;&amp;gt;&amp;#039; .. table.concat( out ) .. &amp;#039;&amp;lt;/div&amp;gt;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.show( frame )&lt;br /&gt;
	local args = frame:getParent().args&lt;br /&gt;
	local lang = language( frame )&lt;br /&gt;
	local captions = args.caption == &amp;#039;yes&amp;#039;&lt;br /&gt;
	local kind = args.kind and mw.text.trim( args.kind ) ~= &amp;#039;&amp;#039; and mw.text.trim( args.kind ) or nil&lt;br /&gt;
	local out = {}&lt;br /&gt;
	for _, arg in ipairs( args ) do&lt;br /&gt;
		local list, id = recipesFor( arg, kind )&lt;br /&gt;
		if #list == 0 then&lt;br /&gt;
			table.insert( out, &amp;#039;&amp;lt;strong class=&amp;quot;error&amp;quot;&amp;gt;&amp;#039; .. string.format( TEXT.missing[ lang ], mw.text.nowiki( id or arg ) ) .. &amp;#039;&amp;lt;/strong&amp;gt;&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
		for _, recipe in ipairs( list ) do&lt;br /&gt;
			table.insert( out, captions and card( recipe, lang ) or render( recipe, lang ) )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return wrap( out, args.size == &amp;#039;small&amp;#039; )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.patterns( frame )&lt;br /&gt;
	local set = mw.text.trim( frame.args[ 1 ] or &amp;#039;&amp;#039; )&lt;br /&gt;
	local lang = language( frame )&lt;br /&gt;
	local list = {}&lt;br /&gt;
	for _, recipe in pairs( data.recipes ) do&lt;br /&gt;
		if recipe.kind == &amp;#039;pattern&amp;#039; and recipe.set == set then&lt;br /&gt;
			table.insert( list, recipe )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	table.sort( list, function ( a, b )&lt;br /&gt;
		return nameOf( a.result[ 1 ], lang ) &amp;lt; nameOf( b.result[ 1 ], lang )&lt;br /&gt;
	end )&lt;br /&gt;
	local out = {}&lt;br /&gt;
	for _, recipe in ipairs( list ) do&lt;br /&gt;
		table.insert( out, card( recipe, lang ) )&lt;br /&gt;
	end&lt;br /&gt;
	return wrap( out, true )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local PRIORITY = { crafting = 1, pattern = 2, kikono = 3, brewing = 4, smelting = 5, blasting = 6, smoking = 7, campfire = 8 }&lt;br /&gt;
local MAX_DEPTH = 8&lt;br /&gt;
&lt;br /&gt;
local TREE = {&lt;br /&gt;
	materials = { en = &amp;#039;Base materials for one craft&amp;#039;, es = &amp;#039;Materiales base para un crafteo&amp;#039;, pt = &amp;#039;Materiais básicos para uma fabricação&amp;#039; },&lt;br /&gt;
	steps = { en = &amp;#039;Crafting tree&amp;#039;, es = &amp;#039;Árbol de crafteo&amp;#039;, pt = &amp;#039;Árvore de fabricação&amp;#039; },&lt;br /&gt;
	energy = { en = &amp;#039;Total: %s Star Energy&amp;#039;, es = &amp;#039;Total: %s de Energía Estelar&amp;#039;, pt = &amp;#039;Total: %s de Energia Estelar&amp;#039; },&lt;br /&gt;
	unknown = { en = &amp;#039;Unknown item: %s&amp;#039;, es = &amp;#039;Ítem desconocido: %s&amp;#039;, pt = &amp;#039;Item desconhecido: %s&amp;#039; },&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local function armorRecipe( id )&lt;br /&gt;
	local info = data.armor[ id ]&lt;br /&gt;
	if not info then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local group = data.recipes[ &amp;#039;kikono/&amp;#039; .. info.piece ]&lt;br /&gt;
	local slots = {}&lt;br /&gt;
	for name, items in pairs( group.slots ) do&lt;br /&gt;
		slots[ name ] = items&lt;br /&gt;
	end&lt;br /&gt;
	slots.pattern = { info.pattern }&lt;br /&gt;
	return { kind = &amp;#039;kikono&amp;#039;, slots = slots, result = { id }, time = group.time, energy = group.energy }&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function recipesOf( id )&lt;br /&gt;
	local armor = armorRecipe( id )&lt;br /&gt;
	if armor then&lt;br /&gt;
		return { armor }&lt;br /&gt;
	end&lt;br /&gt;
	local list = {}&lt;br /&gt;
	for _, recipeId in ipairs( data.byResult[ id ] or {} ) do&lt;br /&gt;
		table.insert( list, data.recipes[ recipeId ] )&lt;br /&gt;
	end&lt;br /&gt;
	table.sort( list, function ( a, b )&lt;br /&gt;
		local sa, sb = ( a.unpack or a.alternate ) and 1 or 0, ( b.unpack or b.alternate ) and 1 or 0&lt;br /&gt;
		if sa ~= sb then&lt;br /&gt;
			return sa &amp;lt; sb&lt;br /&gt;
		end&lt;br /&gt;
		return ( PRIORITY[ a.kind ] or 9 ) &amp;lt; ( PRIORITY[ b.kind ] or 9 )&lt;br /&gt;
	end )&lt;br /&gt;
	return list&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function main( id )&lt;br /&gt;
	if id:find( &amp;#039;^minecraft:&amp;#039; ) and not id:find( &amp;#039;^minecraft:potion%.&amp;#039; ) then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	for _, recipe in ipairs( recipesOf( id ) ) do&lt;br /&gt;
		if not recipe.unpack and not recipe.alternate then&lt;br /&gt;
			return recipe&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function isTool( id )&lt;br /&gt;
	for _, tool in ipairs( data.tools or {} ) do&lt;br /&gt;
		if tool == id then&lt;br /&gt;
			return true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function itemLink( id, lang )&lt;br /&gt;
	local item = data.items[ id ]&lt;br /&gt;
	local name = mw.text.nowiki( nameOf( id, lang ) )&lt;br /&gt;
	if item and item.page then&lt;br /&gt;
		return &amp;#039;[[Special:MyLanguage/&amp;#039; .. item.page .. &amp;#039;|&amp;#039; .. name .. &amp;#039;]]&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	return name&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function smallIcon( id )&lt;br /&gt;
	local item = data.items[ id ]&lt;br /&gt;
	if not item then&lt;br /&gt;
		return &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	return &amp;#039;[[File:&amp;#039; .. item.icon .. &amp;#039;|link=|alt=]]&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function gather( id, qty, acc, order, path, totals, force )&lt;br /&gt;
	local recipe = force and recipesOf( id )[ 1 ] or main( id )&lt;br /&gt;
	if isTool( id ) then&lt;br /&gt;
		if totals.tools[ id ] then&lt;br /&gt;
			return&lt;br /&gt;
		end&lt;br /&gt;
		totals.tools[ id ] = true&lt;br /&gt;
		qty = 1&lt;br /&gt;
	end&lt;br /&gt;
	if not recipe or path[ id ] then&lt;br /&gt;
		if not acc[ id ] then&lt;br /&gt;
			acc[ id ] = { items = { id }, qty = 0 }&lt;br /&gt;
			table.insert( order, id )&lt;br /&gt;
		end&lt;br /&gt;
		acc[ id ].qty = acc[ id ].qty + qty&lt;br /&gt;
		return&lt;br /&gt;
	end&lt;br /&gt;
	local yield = recipe.count or 1&lt;br /&gt;
	local crafts = math.ceil( qty / yield )&lt;br /&gt;
	if recipe.energy then&lt;br /&gt;
		totals.energy = totals.energy + crafts * recipe.energy&lt;br /&gt;
	end&lt;br /&gt;
	path[ id ] = true&lt;br /&gt;
	local names = {}&lt;br /&gt;
	for name in pairs( recipe.slots ) do&lt;br /&gt;
		table.insert( names, name )&lt;br /&gt;
	end&lt;br /&gt;
	table.sort( names )&lt;br /&gt;
	for _, name in ipairs( names ) do&lt;br /&gt;
		local items = recipe.slots[ name ]&lt;br /&gt;
		if count( items ) == 1 then&lt;br /&gt;
			gather( items[ 1 ], crafts, acc, order, path, totals )&lt;br /&gt;
		else&lt;br /&gt;
			local key = &amp;#039;&amp;#039;&lt;br /&gt;
			for _, item in ipairs( items ) do&lt;br /&gt;
				key = key .. item .. &amp;#039;|&amp;#039;&lt;br /&gt;
			end&lt;br /&gt;
			if not acc[ key ] then&lt;br /&gt;
				local copy = {}&lt;br /&gt;
				for _, item in ipairs( items ) do&lt;br /&gt;
					table.insert( copy, item )&lt;br /&gt;
				end&lt;br /&gt;
				acc[ key ] = { items = copy, qty = 0 }&lt;br /&gt;
				table.insert( order, key )&lt;br /&gt;
			end&lt;br /&gt;
			acc[ key ].qty = acc[ key ].qty + crafts&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	path[ id ] = nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function materials( id, lang )&lt;br /&gt;
	local recipe = recipesOf( id )[ 1 ]&lt;br /&gt;
	if not recipe or recipe.unpack or recipe.alternate then&lt;br /&gt;
		return &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	local acc, order = {}, {}&lt;br /&gt;
	local totals = { energy = 0, tools = {} }&lt;br /&gt;
	gather( id, recipe.count or 1, acc, order, {}, totals, true )&lt;br /&gt;
	local html = { &amp;#039;&amp;lt;div class=&amp;quot;dmz-materials&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;dmz-materials__title&amp;quot;&amp;gt;&amp;#039; .. TREE.materials[ lang ] .. &amp;#039;&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;dmz-materials__row&amp;quot;&amp;gt;&amp;#039; }&lt;br /&gt;
	for _, key in ipairs( order ) do&lt;br /&gt;
		local entry = acc[ key ]&lt;br /&gt;
		local amount = entry.qty &amp;gt; 1 and ( &amp;#039;&amp;lt;span class=&amp;quot;dmz-recipe__count&amp;quot;&amp;gt;&amp;#039; .. entry.qty .. &amp;#039;&amp;lt;/span&amp;gt;&amp;#039; ) or &amp;#039;&amp;#039;&lt;br /&gt;
		table.insert( html, &amp;#039;&amp;lt;span class=&amp;quot;dmz-materials__slot&amp;quot;&amp;gt;&amp;#039; .. slot( { 2, 2 }, entry.items, lang, nil, amount ) .. &amp;#039;&amp;lt;/span&amp;gt;&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	table.insert( html, &amp;#039;&amp;lt;/div&amp;gt;&amp;#039; )&lt;br /&gt;
	if totals.energy &amp;gt; 0 then&lt;br /&gt;
		table.insert( html, &amp;#039;&amp;lt;div class=&amp;quot;dmz-materials__energy&amp;quot;&amp;gt;&amp;#039; .. string.format( TREE.energy[ lang ], number( totals.energy, lang ) ) .. &amp;#039;&amp;lt;/div&amp;gt;&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	table.insert( html, &amp;#039;&amp;lt;/div&amp;gt;&amp;#039; )&lt;br /&gt;
	return table.concat( html )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function node( id, lang, depth, path, root )&lt;br /&gt;
	local list = recipesOf( id )&lt;br /&gt;
	if #list == 0 then&lt;br /&gt;
		return &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	path[ id ] = true&lt;br /&gt;
	if not root then&lt;br /&gt;
		list = { main( id ) or list[ 1 ] }&lt;br /&gt;
	end&lt;br /&gt;
	local html = { &amp;#039;&amp;lt;div class=&amp;quot;dmz-tree__node&amp;quot;&amp;gt;&amp;#039;, &amp;#039;&amp;lt;div class=&amp;quot;dmz-tree__head&amp;quot;&amp;gt;&amp;#039; .. smallIcon( id ) .. &amp;#039;&amp;lt;span&amp;gt;&amp;#039; .. itemLink( id, lang ) .. &amp;#039;&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;, &amp;#039;&amp;lt;div class=&amp;quot;dmz-recipes&amp;quot;&amp;gt;&amp;#039; }&lt;br /&gt;
	for _, recipe in ipairs( list ) do&lt;br /&gt;
		table.insert( html, render( recipe, lang ) )&lt;br /&gt;
	end&lt;br /&gt;
	table.insert( html, &amp;#039;&amp;lt;/div&amp;gt;&amp;#039; )&lt;br /&gt;
	local base = main( id ) or ( not list[ 1 ].unpack and not list[ 1 ].alternate and list[ 1 ] ) or nil&lt;br /&gt;
	if base and depth &amp;lt; MAX_DEPTH then&lt;br /&gt;
		local children = {}&lt;br /&gt;
		local names = {}&lt;br /&gt;
		for name in pairs( base.slots ) do&lt;br /&gt;
			table.insert( names, name )&lt;br /&gt;
		end&lt;br /&gt;
		table.sort( names, function ( a, b )&lt;br /&gt;
			local na, nb = tonumber( a ), tonumber( b )&lt;br /&gt;
			if na and nb then&lt;br /&gt;
				return na &amp;lt; nb&lt;br /&gt;
			end&lt;br /&gt;
			return tostring( a ) &amp;lt; tostring( b )&lt;br /&gt;
		end )&lt;br /&gt;
		for _, name in ipairs( names ) do&lt;br /&gt;
			local items = base.slots[ name ]&lt;br /&gt;
			local child = items[ 1 ]&lt;br /&gt;
			if count( items ) == 1 and not path[ child ] and main( child ) then&lt;br /&gt;
				table.insert( children, node( child, lang, depth + 1, path, false ) )&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if #children &amp;gt; 0 then&lt;br /&gt;
			table.insert( html, &amp;#039;&amp;lt;div class=&amp;quot;dmz-tree__children&amp;quot;&amp;gt;&amp;#039; .. table.concat( children ) .. &amp;#039;&amp;lt;/div&amp;gt;&amp;#039; )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	table.insert( html, &amp;#039;&amp;lt;/div&amp;gt;&amp;#039; )&lt;br /&gt;
	return table.concat( html )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.tree( frame )&lt;br /&gt;
	local lang = language( frame )&lt;br /&gt;
	local id = itemId( frame.args[ 1 ] or frame:getParent().args[ 1 ] )&lt;br /&gt;
	if not id or not data.items[ id ] or #recipesOf( id ) == 0 then&lt;br /&gt;
		return &amp;#039;&amp;lt;strong class=&amp;quot;error&amp;quot;&amp;gt;&amp;#039; .. string.format( TREE.unknown[ lang ], mw.text.nowiki( id or &amp;#039;&amp;#039; ) ) .. &amp;#039;&amp;lt;/strong&amp;gt;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	return &amp;#039;&amp;lt;div class=&amp;quot;dmz-tree&amp;quot;&amp;gt;&amp;#039; .. materials( id, lang )&lt;br /&gt;
		.. &amp;#039;&amp;lt;div class=&amp;quot;dmz-tree__title&amp;quot;&amp;gt;&amp;#039; .. TREE.steps[ lang ] .. &amp;#039;&amp;lt;/div&amp;gt;&amp;#039;&lt;br /&gt;
		.. node( id, lang, 0, {}, true ) .. &amp;#039;&amp;lt;/div&amp;gt;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.finder( frame )&lt;br /&gt;
	local lang = language( frame )&lt;br /&gt;
	local list = {}&lt;br /&gt;
	local seen = {}&lt;br /&gt;
	local function add( id )&lt;br /&gt;
		if seen[ id ] or not data.items[ id ] then&lt;br /&gt;
			return&lt;br /&gt;
		end&lt;br /&gt;
		seen[ id ] = true&lt;br /&gt;
		local item = data.items[ id ]&lt;br /&gt;
		table.insert( list, { id = id, name = nameOf( id, lang ), en = item.name.en, icon = item.icon } )&lt;br /&gt;
	end&lt;br /&gt;
	for id in pairs( data.byResult ) do&lt;br /&gt;
		add( id )&lt;br /&gt;
	end&lt;br /&gt;
	for id in pairs( data.armor ) do&lt;br /&gt;
		add( id )&lt;br /&gt;
	end&lt;br /&gt;
	table.sort( list, function ( a, b )&lt;br /&gt;
		return a.name &amp;lt; b.name&lt;br /&gt;
	end )&lt;br /&gt;
	local json = mw.text.jsonEncode( list ):gsub( &amp;#039;&amp;amp;&amp;#039;, &amp;#039;&amp;amp;amp;&amp;#039; ):gsub( &amp;#039;&amp;quot;&amp;#039;, &amp;#039;&amp;amp;quot;&amp;#039; ):gsub( &amp;#039;&amp;lt;&amp;#039;, &amp;#039;&amp;amp;lt;&amp;#039; ):gsub( &amp;#039;&amp;gt;&amp;#039;, &amp;#039;&amp;amp;gt;&amp;#039; )&lt;br /&gt;
	return &amp;#039;&amp;lt;div class=&amp;quot;dmz-finder&amp;quot; data-lang=&amp;quot;&amp;#039; .. lang .. &amp;#039;&amp;quot; data-items=&amp;quot;&amp;#039; .. json .. &amp;#039;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.screen( frame )&lt;br /&gt;
	local key = mw.text.trim( frame.args[ 1 ] or frame:getParent().args[ 1 ] or &amp;#039;&amp;#039; )&lt;br /&gt;
	local lang = language( frame )&lt;br /&gt;
	local screen = data.screens[ key ]&lt;br /&gt;
	if not screen then&lt;br /&gt;
		return &amp;#039;&amp;lt;strong class=&amp;quot;error&amp;quot;&amp;gt;&amp;#039; .. string.format( TEXT.missingScreen[ lang ], mw.text.nowiki( key ) ) .. &amp;#039;&amp;lt;/strong&amp;gt;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	local html = {&lt;br /&gt;
		&amp;#039;&amp;lt;div class=&amp;quot;dmz-recipes&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;dmz-recipe dmz-recipe--screen&amp;quot; style=&amp;quot;width:&amp;#039; .. screen.width&lt;br /&gt;
			.. &amp;#039;px;height:&amp;#039; .. screen.height .. &amp;#039;px&amp;quot;&amp;gt;&amp;#039;,&lt;br /&gt;
		&amp;#039;[[File:&amp;#039; .. screen.file .. &amp;#039;|link=|alt=]]&amp;#039;,&lt;br /&gt;
	}&lt;br /&gt;
	fixed( screen, lang, html )&lt;br /&gt;
	for _, entry in ipairs( screen.texts or {} ) do&lt;br /&gt;
		local class = &amp;#039;dmz-recipe__text dmz-recipe__text--&amp;#039; .. entry.align&lt;br /&gt;
		if entry.outline then&lt;br /&gt;
			class = class .. &amp;#039; dmz-recipe__text--outline&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
		table.insert( html, &amp;#039;&amp;lt;span class=&amp;quot;&amp;#039; .. class .. &amp;#039;&amp;quot; style=&amp;quot;left:&amp;#039; .. entry.x .. &amp;#039;px;top:&amp;#039; .. entry.y&lt;br /&gt;
			.. &amp;#039;px;color:&amp;#039; .. entry.color .. &amp;#039;&amp;quot;&amp;gt;&amp;#039; .. mw.text.nowiki( entry.text[ lang ] or entry.text.en ) .. &amp;#039;&amp;lt;/span&amp;gt;&amp;#039; )&lt;br /&gt;
	end&lt;br /&gt;
	table.insert( html, energy( screen, nil, lang ) )&lt;br /&gt;
	table.insert( html, &amp;#039;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;#039; )&lt;br /&gt;
	return table.concat( html )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Neb</name></author>
	</entry>
</feed>