<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.terramonmod.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=JamzOJamz</id>
	<title>Terramon Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.terramonmod.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=JamzOJamz"/>
	<link rel="alternate" type="text/html" href="https://wiki.terramonmod.com/Special:Contributions/JamzOJamz"/>
	<updated>2026-07-13T04:15:53Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.44.2</generator>
	<entry>
		<id>https://wiki.terramonmod.com/index.php?title=MediaWiki:Gadgets-definition&amp;diff=58</id>
		<title>MediaWiki:Gadgets-definition</title>
		<link rel="alternate" type="text/html" href="https://wiki.terramonmod.com/index.php?title=MediaWiki:Gadgets-definition&amp;diff=58"/>
		<updated>2025-11-23T20:42:48Z</updated>

		<summary type="html">&lt;p&gt;JamzOJamz: Created page with &amp;quot;== default-gadgets == * tgcLinks[ResourceLoader|default|type=general|dependencies=mediawiki.api]|tgcLinks.js|tgcLinks.css&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== default-gadgets ==&lt;br /&gt;
* tgcLinks[ResourceLoader|default|type=general|dependencies=mediawiki.api]|tgcLinks.js|tgcLinks.css&lt;/div&gt;</summary>
		<author><name>JamzOJamz</name></author>
	</entry>
	<entry>
		<id>https://wiki.terramonmod.com/index.php?title=MediaWiki:Gadget-tgcLinks.css&amp;diff=57</id>
		<title>MediaWiki:Gadget-tgcLinks.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.terramonmod.com/index.php?title=MediaWiki:Gadget-tgcLinks.css&amp;diff=57"/>
		<updated>2025-11-23T20:42:28Z</updated>

		<summary type="html">&lt;p&gt;JamzOJamz: Created page with &amp;quot;.mw-parser-output a.extiw.tgclink:not(:hover) { 	color: #3e5ecf; }&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;.mw-parser-output a.extiw.tgclink:not(:hover) {&lt;br /&gt;
	color: #3e5ecf;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>JamzOJamz</name></author>
	</entry>
	<entry>
		<id>https://wiki.terramonmod.com/index.php?title=MediaWiki:Gadget-tgcLinks.js&amp;diff=56</id>
		<title>MediaWiki:Gadget-tgcLinks.js</title>
		<link rel="alternate" type="text/html" href="https://wiki.terramonmod.com/index.php?title=MediaWiki:Gadget-tgcLinks.js&amp;diff=56"/>
		<updated>2025-11-23T20:42:12Z</updated>

		<summary type="html">&lt;p&gt;JamzOJamz: Created page with &amp;quot;// Change the &amp;#039;href&amp;#039; attributes of links that are redirects to the Terraria Wiki // to make them go directly to their destination. Add a CSS class to those links // which applies a slightly different color to them.  var cssClass = &amp;#039;tgclink&amp;#039;;  $(document).ready(function() {     var allRedirectLinksOnPage = collectAllRedirectLinks();     // modify the title and href attributes of a link and add the class for coloring     handleDirectInterwikiLinks(allRedirectLinksOnPage.di...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;// Change the &#039;href&#039; attributes of links that are redirects to the Terraria Wiki&lt;br /&gt;
// to make them go directly to their destination. Add a CSS class to those links&lt;br /&gt;
// which applies a slightly different color to them.&lt;br /&gt;
&lt;br /&gt;
var cssClass = &#039;tgclink&#039;;&lt;br /&gt;
&lt;br /&gt;
$(document).ready(function() {&lt;br /&gt;
    var allRedirectLinksOnPage = collectAllRedirectLinks();&lt;br /&gt;
    // modify the title and href attributes of a link and add the class for coloring&lt;br /&gt;
    handleDirectInterwikiLinks(allRedirectLinksOnPage.direct);&lt;br /&gt;
    handleIndirectInterwikiLinks(allRedirectLinksOnPage.indirect);&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
function makeNewHovertext(title) {&lt;br /&gt;
    return &#039;Terraria Wiki: &#039; + title + &#039; (this link is a redirect to the main Terraria Wiki)&#039;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function collectAllRedirectLinks() {&lt;br /&gt;
	var directInterwikiLinks = [];&lt;br /&gt;
	var indirectInterwikiLinks = [];&lt;br /&gt;
	$(&#039;#mw-content-text a.mw-redirect, #mw-content-text a.extiw&#039;).each(function() {&lt;br /&gt;
	    var thislink = $(this);&lt;br /&gt;
	    if (thislink.attr(&#039;title&#039;).slice(0, 4) === &#039;tgc:&#039;) {&lt;br /&gt;
	    	directInterwikiLinks.push(thislink);&lt;br /&gt;
	    } else {&lt;br /&gt;
	        indirectInterwikiLinks.push(thislink);&lt;br /&gt;
	    }&lt;br /&gt;
	});&lt;br /&gt;
	return { direct: directInterwikiLinks, indirect: indirectInterwikiLinks };&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function handleDirectInterwikiLinks(links) {&lt;br /&gt;
	$.each(links, function() {&lt;br /&gt;
		var thislink = $(this);&lt;br /&gt;
	    var newHovertext = makeNewHovertext(thislink.attr(&#039;title&#039;).slice(4)); // strip the &#039;tgc:&#039; part&lt;br /&gt;
	    thislink&lt;br /&gt;
            .attr(&#039;title&#039;, newHovertext)&lt;br /&gt;
            .attr(&#039;target&#039;, &#039;_blank&#039;) // open in new tab&lt;br /&gt;
            .addClass(cssClass);&lt;br /&gt;
	});&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function handleIndirectInterwikiLinks(links) {&lt;br /&gt;
	var linkTargets = [];&lt;br /&gt;
	$.each(links, function() {&lt;br /&gt;
	    var linkTarget = getTargetOfLink($(this));&lt;br /&gt;
	    if ($.inArray(linkTarget, linkTargets) === -1) {&lt;br /&gt;
	        linkTargets.push(linkTarget);&lt;br /&gt;
	    }&lt;br /&gt;
	});&lt;br /&gt;
	&lt;br /&gt;
	if (linkTargets.length === 0) {&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
    getRedirectUrls(linkTargets).done(function(redirectUrls) {&lt;br /&gt;
        if (redirectUrls === undefined) {&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
        $.each(links, function() {&lt;br /&gt;
            var thislink = $(this);&lt;br /&gt;
            var linkTarget = getTargetOfLink(thislink);&lt;br /&gt;
            var tgcUrl = redirectUrls[linkTarget];&lt;br /&gt;
            if (tgcUrl === undefined) {&lt;br /&gt;
            	return;&lt;br /&gt;
            }&lt;br /&gt;
            var hashIndex = thislink.attr(&#039;href&#039;).indexOf(&#039;#&#039;);&lt;br /&gt;
            if (hashIndex &amp;gt; -1) {&lt;br /&gt;
            	tgcUrl += thislink.attr(&#039;href&#039;).slice(hashIndex);&lt;br /&gt;
            }&lt;br /&gt;
            thislink&lt;br /&gt;
                .attr(&#039;href&#039;, tgcUrl)&lt;br /&gt;
                .attr(&#039;title&#039;, makeNewHovertext(linkTarget))&lt;br /&gt;
                .attr(&#039;target&#039;, &#039;_blank&#039;) // open in new tab&lt;br /&gt;
                .addClass([&#039;extiw&#039;, cssClass]);&lt;br /&gt;
        });&lt;br /&gt;
    });&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function getTargetOfLink(linkElement) {&lt;br /&gt;
    return decodeURIComponent(linkElement.attr(&#039;href&#039;)&lt;br /&gt;
        .replace(/_/g, &#039; &#039;)&lt;br /&gt;
        .replace(/^\/(wiki\/|mediawiki\/index\.php\/)?/, &#039;&#039;)  // added index.php case&lt;br /&gt;
        .replace(/#.+$/, &#039;&#039;)&lt;br /&gt;
    );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function getRedirectUrls(linkTargets) {&lt;br /&gt;
    var deferred = new $.Deferred();&lt;br /&gt;
    new mw.Api().post({&lt;br /&gt;
        action: &#039;query&#039;,&lt;br /&gt;
        format: &#039;json&#039;,&lt;br /&gt;
        titles: linkTargets.join(&#039;|&#039;),&lt;br /&gt;
        redirects: true,&lt;br /&gt;
        iwurl: true&lt;br /&gt;
    }).done(function(data) {&lt;br /&gt;
        if (data.query.redirects === undefined || data.query.interwiki === undefined) {&lt;br /&gt;
            deferred.resolve();&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
        var redirectUrls = {};&lt;br /&gt;
        var redirectObjects = data.query.redirects.filter(function(r) { return r.tointerwiki === &#039;tgc&#039;; });&lt;br /&gt;
        redirectObjects.forEach(function(redirect) {&lt;br /&gt;
            var iwObject = data.query.interwiki.find(function (i) {&lt;br /&gt;
                return i.iw === &#039;tgc&#039; &amp;amp;&amp;amp; i.title === redirect.to;&lt;br /&gt;
            });&lt;br /&gt;
            if (iwObject !== undefined) {&lt;br /&gt;
                redirectUrls[redirect.from] = iwObject.url;&lt;br /&gt;
            }&lt;br /&gt;
        });&lt;br /&gt;
        deferred.resolve(redirectUrls);&lt;br /&gt;
    }).fail(function() {&lt;br /&gt;
        var error = arguments;&lt;br /&gt;
        if (error[0] === &#039;toomanyvalues&#039;) {&lt;br /&gt;
            var limit = error[1].error.limit;&lt;br /&gt;
            var deferreds = [];&lt;br /&gt;
            for (var index = 0; index &amp;lt; Math.ceil(linkTargets.length / limit); index++) {&lt;br /&gt;
                var linkTargetsSlice = linkTargets.slice(index * limit, (index + 1) * limit);&lt;br /&gt;
                deferreds.push(getRedirectUrls(linkTargetsSlice));&lt;br /&gt;
            }&lt;br /&gt;
            $.when.apply(null, deferreds).done(function() {&lt;br /&gt;
                var redirectUrls = Array.from(arguments).reduce(function(redirectUrlsCombined, redirectUrlsSlice) {&lt;br /&gt;
                    if (redirectUrlsSlice !== undefined) {&lt;br /&gt;
                        Object.keys(redirectUrlsSlice).forEach(function(key) {&lt;br /&gt;
                            redirectUrlsCombined[key] = redirectUrlsSlice[key];&lt;br /&gt;
                        });&lt;br /&gt;
                    }&lt;br /&gt;
                    return redirectUrlsCombined;&lt;br /&gt;
                }, {});&lt;br /&gt;
                deferred.resolve(redirectUrls);&lt;br /&gt;
            });&lt;br /&gt;
        } else {&lt;br /&gt;
            console.error(error);&lt;br /&gt;
            deferred.resolve();&lt;br /&gt;
        }&lt;br /&gt;
    });&lt;br /&gt;
    return deferred;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>JamzOJamz</name></author>
	</entry>
	<entry>
		<id>https://wiki.terramonmod.com/index.php?title=File:Pikachu.png&amp;diff=55</id>
		<title>File:Pikachu.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.terramonmod.com/index.php?title=File:Pikachu.png&amp;diff=55"/>
		<updated>2025-11-23T20:39:00Z</updated>

		<summary type="html">&lt;p&gt;JamzOJamz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>JamzOJamz</name></author>
	</entry>
	<entry>
		<id>https://wiki.terramonmod.com/index.php?title=File:PC_(Red).png&amp;diff=54</id>
		<title>File:PC (Red).png</title>
		<link rel="alternate" type="text/html" href="https://wiki.terramonmod.com/index.php?title=File:PC_(Red).png&amp;diff=54"/>
		<updated>2025-11-23T20:38:33Z</updated>

		<summary type="html">&lt;p&gt;JamzOJamz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>JamzOJamz</name></author>
	</entry>
	<entry>
		<id>https://wiki.terramonmod.com/index.php?title=File:Pok%C3%A9_Mart_Clerk_Head.png&amp;diff=53</id>
		<title>File:Poké Mart Clerk Head.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.terramonmod.com/index.php?title=File:Pok%C3%A9_Mart_Clerk_Head.png&amp;diff=53"/>
		<updated>2025-11-23T20:38:10Z</updated>

		<summary type="html">&lt;p&gt;JamzOJamz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>JamzOJamz</name></author>
	</entry>
	<entry>
		<id>https://wiki.terramonmod.com/index.php?title=File:Apricorns.gif&amp;diff=52</id>
		<title>File:Apricorns.gif</title>
		<link rel="alternate" type="text/html" href="https://wiki.terramonmod.com/index.php?title=File:Apricorns.gif&amp;diff=52"/>
		<updated>2025-11-23T20:31:33Z</updated>

		<summary type="html">&lt;p&gt;JamzOJamz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>JamzOJamz</name></author>
	</entry>
	<entry>
		<id>https://wiki.terramonmod.com/index.php?title=File:Shiny_Charm.png&amp;diff=51</id>
		<title>File:Shiny Charm.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.terramonmod.com/index.php?title=File:Shiny_Charm.png&amp;diff=51"/>
		<updated>2025-11-23T20:30:07Z</updated>

		<summary type="html">&lt;p&gt;JamzOJamz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>JamzOJamz</name></author>
	</entry>
	<entry>
		<id>https://wiki.terramonmod.com/index.php?title=File:Pokemon_Trainer_Cap.png&amp;diff=50</id>
		<title>File:Pokemon Trainer Cap.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.terramonmod.com/index.php?title=File:Pokemon_Trainer_Cap.png&amp;diff=50"/>
		<updated>2025-11-23T20:29:13Z</updated>

		<summary type="html">&lt;p&gt;JamzOJamz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>JamzOJamz</name></author>
	</entry>
	<entry>
		<id>https://wiki.terramonmod.com/index.php?title=File:Music_Box_(Pok%C3%A9mon_Center).png&amp;diff=49</id>
		<title>File:Music Box (Pokémon Center).png</title>
		<link rel="alternate" type="text/html" href="https://wiki.terramonmod.com/index.php?title=File:Music_Box_(Pok%C3%A9mon_Center).png&amp;diff=49"/>
		<updated>2025-11-23T20:28:49Z</updated>

		<summary type="html">&lt;p&gt;JamzOJamz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>JamzOJamz</name></author>
	</entry>
	<entry>
		<id>https://wiki.terramonmod.com/index.php?title=File:Master_Ball.png&amp;diff=48</id>
		<title>File:Master Ball.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.terramonmod.com/index.php?title=File:Master_Ball.png&amp;diff=48"/>
		<updated>2025-11-23T20:24:06Z</updated>

		<summary type="html">&lt;p&gt;JamzOJamz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>JamzOJamz</name></author>
	</entry>
	<entry>
		<id>https://wiki.terramonmod.com/index.php?title=File:Ultra_Ball.png&amp;diff=47</id>
		<title>File:Ultra Ball.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.terramonmod.com/index.php?title=File:Ultra_Ball.png&amp;diff=47"/>
		<updated>2025-11-23T20:23:54Z</updated>

		<summary type="html">&lt;p&gt;JamzOJamz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>JamzOJamz</name></author>
	</entry>
	<entry>
		<id>https://wiki.terramonmod.com/index.php?title=File:Great_Ball.png&amp;diff=46</id>
		<title>File:Great Ball.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.terramonmod.com/index.php?title=File:Great_Ball.png&amp;diff=46"/>
		<updated>2025-11-23T20:23:43Z</updated>

		<summary type="html">&lt;p&gt;JamzOJamz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>JamzOJamz</name></author>
	</entry>
	<entry>
		<id>https://wiki.terramonmod.com/index.php?title=File:Aether_Ball.png&amp;diff=45</id>
		<title>File:Aether Ball.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.terramonmod.com/index.php?title=File:Aether_Ball.png&amp;diff=45"/>
		<updated>2025-11-23T20:23:30Z</updated>

		<summary type="html">&lt;p&gt;JamzOJamz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>JamzOJamz</name></author>
	</entry>
	<entry>
		<id>https://wiki.terramonmod.com/index.php?title=File:Cherish_Ball.png&amp;diff=44</id>
		<title>File:Cherish Ball.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.terramonmod.com/index.php?title=File:Cherish_Ball.png&amp;diff=44"/>
		<updated>2025-11-23T20:23:21Z</updated>

		<summary type="html">&lt;p&gt;JamzOJamz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>JamzOJamz</name></author>
	</entry>
	<entry>
		<id>https://wiki.terramonmod.com/index.php?title=File:Premier_Ball.png&amp;diff=43</id>
		<title>File:Premier Ball.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.terramonmod.com/index.php?title=File:Premier_Ball.png&amp;diff=43"/>
		<updated>2025-11-23T20:23:07Z</updated>

		<summary type="html">&lt;p&gt;JamzOJamz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>JamzOJamz</name></author>
	</entry>
	<entry>
		<id>https://wiki.terramonmod.com/index.php?title=File:Pok%C3%A9_Ball.png&amp;diff=42</id>
		<title>File:Poké Ball.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.terramonmod.com/index.php?title=File:Pok%C3%A9_Ball.png&amp;diff=42"/>
		<updated>2025-11-23T20:22:55Z</updated>

		<summary type="html">&lt;p&gt;JamzOJamz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>JamzOJamz</name></author>
	</entry>
	<entry>
		<id>https://wiki.terramonmod.com/index.php?title=File:Rare_Candy.png&amp;diff=41</id>
		<title>File:Rare Candy.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.terramonmod.com/index.php?title=File:Rare_Candy.png&amp;diff=41"/>
		<updated>2025-11-23T20:21:15Z</updated>

		<summary type="html">&lt;p&gt;JamzOJamz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>JamzOJamz</name></author>
	</entry>
	<entry>
		<id>https://wiki.terramonmod.com/index.php?title=File:Fire_Stone.png&amp;diff=40</id>
		<title>File:Fire Stone.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.terramonmod.com/index.php?title=File:Fire_Stone.png&amp;diff=40"/>
		<updated>2025-11-23T20:20:54Z</updated>

		<summary type="html">&lt;p&gt;JamzOJamz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>JamzOJamz</name></author>
	</entry>
	<entry>
		<id>https://wiki.terramonmod.com/index.php?title=File:Water_Stone.png&amp;diff=39</id>
		<title>File:Water Stone.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.terramonmod.com/index.php?title=File:Water_Stone.png&amp;diff=39"/>
		<updated>2025-11-23T20:20:44Z</updated>

		<summary type="html">&lt;p&gt;JamzOJamz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>JamzOJamz</name></author>
	</entry>
	<entry>
		<id>https://wiki.terramonmod.com/index.php?title=File:Thunder_Stone.png&amp;diff=38</id>
		<title>File:Thunder Stone.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.terramonmod.com/index.php?title=File:Thunder_Stone.png&amp;diff=38"/>
		<updated>2025-11-23T20:20:31Z</updated>

		<summary type="html">&lt;p&gt;JamzOJamz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>JamzOJamz</name></author>
	</entry>
	<entry>
		<id>https://wiki.terramonmod.com/index.php?title=File:Leaf_Stone.png&amp;diff=37</id>
		<title>File:Leaf Stone.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.terramonmod.com/index.php?title=File:Leaf_Stone.png&amp;diff=37"/>
		<updated>2025-11-23T20:20:14Z</updated>

		<summary type="html">&lt;p&gt;JamzOJamz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>JamzOJamz</name></author>
	</entry>
	<entry>
		<id>https://wiki.terramonmod.com/index.php?title=File:Linking_Cord.png&amp;diff=36</id>
		<title>File:Linking Cord.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.terramonmod.com/index.php?title=File:Linking_Cord.png&amp;diff=36"/>
		<updated>2025-11-23T20:20:03Z</updated>

		<summary type="html">&lt;p&gt;JamzOJamz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>JamzOJamz</name></author>
	</entry>
	<entry>
		<id>https://wiki.terramonmod.com/index.php?title=File:Moon_Stone.png&amp;diff=35</id>
		<title>File:Moon Stone.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.terramonmod.com/index.php?title=File:Moon_Stone.png&amp;diff=35"/>
		<updated>2025-11-23T20:18:29Z</updated>

		<summary type="html">&lt;p&gt;JamzOJamz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>JamzOJamz</name></author>
	</entry>
	<entry>
		<id>https://wiki.terramonmod.com/index.php?title=Category:Pages_using_DynamicPageList3_dplvar_parser_function&amp;diff=34</id>
		<title>Category:Pages using DynamicPageList3 dplvar parser function</title>
		<link rel="alternate" type="text/html" href="https://wiki.terramonmod.com/index.php?title=Category:Pages_using_DynamicPageList3_dplvar_parser_function&amp;diff=34"/>
		<updated>2025-11-23T20:16:52Z</updated>

		<summary type="html">&lt;p&gt;JamzOJamz: Created page with &amp;quot;__HIDDENCAT__&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__HIDDENCAT__&lt;/div&gt;</summary>
		<author><name>JamzOJamz</name></author>
	</entry>
	<entry>
		<id>https://wiki.terramonmod.com/index.php?title=Main_Page&amp;diff=33</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.terramonmod.com/index.php?title=Main_Page&amp;diff=33"/>
		<updated>2025-11-23T20:14:24Z</updated>

		<summary type="html">&lt;p&gt;JamzOJamz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#seo:&lt;br /&gt;
|title=The Terramon Wiki&lt;br /&gt;
}}&lt;br /&gt;
{| style=&amp;quot;width:100%; text-align:center; border:1px solid var(--border-color-base); border-radius:5px; margin:0; background: var(--color-surface-2);&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding:13px;&amp;quot; |&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:170%; font-weight:600; color: var(--color-emphasized); font-weight: var(--font-weight-semi-bold);&amp;quot;&amp;gt;&lt;br /&gt;
Welcome to the &amp;lt;span style=&amp;quot;font-weight:900;&amp;quot;&amp;gt;Official Terramon Mod Wiki&amp;lt;/span&amp;gt;,&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
the most comprehensive source of information about the mod.&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;padding:5px 8px; margin-top:8px; border-radius: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
[https://discord.gg/U8skDEA Official Discord] • [https://www.youtube.com/channel/UCU91hiBTfhZB5YBbQZlgCPg YouTube Channel]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Two side-by-side tables --&amp;gt;&lt;br /&gt;
{| style=&amp;quot;width:100%; border-spacing:0; margin:0;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:70%; border:1px solid var(--border-color-base); border-radius:5px; margin:0; padding: 15px; vertical-align:top; background: var(--color-surface-2);&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;padding:4px 8px; border-radius: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;float: right;&amp;quot;&amp;gt;[[File:Mod icon.png]]&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align:center; font-size:130%; font-weight: var(--font-weight-semi-bold); color: var(--color-emphasized); margin:0;&amp;quot;&amp;gt;The Mod&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Terramon Mod is a large and immersive mod for Terraria that seamlessly integrates the beloved world of Pokémon into the game. Dive into an adventure where you can explore, catch, and train over 150 Pokémon in the vast and diverse landscapes of Terraria. With refined mechanics and plenty to discover, Terramon is a fun experience for longtime Pokémon fans, casual players, and newcomers alike.&lt;br /&gt;
&lt;br /&gt;
You can download the mod from our [https://steamcommunity.com/sharedfiles/filedetails/?id=3435381419 Steam Workshop page] or directly from [https://github.com/JamzOJamz/Terramon/releases/download/0.1.3.2/Terramon.tmod here].&lt;br /&gt;
&lt;br /&gt;
Past versions of the mod can also be downloaded from our [[Version History]] page.&lt;br /&gt;
| style=&amp;quot;width:30%; border:1px solid var(--border-color-base); border-radius:5px; margin:0; padding: 15px; vertical-align:top; background: var(--color-surface-2);&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width:100%; text-align:center;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align: center; display: flex; flex-direction: column; gap: 4px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;padding:4px 8px; border-radius: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align:center; font-size:130%; font-weight: var(--font-weight-semi-bold); color: var(--color-emphasized); margin:0;&amp;quot;&amp;gt;Latest Supported Versions&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;font-size: 107%; border-radius: 5px;&amp;quot;&amp;gt;&#039;&#039;&#039;[[Version History|Terramon Mod]]&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;[[Beta 0.1.3.2]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;font-size: 107%; border-radius: 5px;&amp;quot;&amp;gt;&#039;&#039;&#039;[[tgc:TModLoader|tModLoader]]&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;2025.9.3.0&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;font-size: 107%; border-radius: 5px;&amp;quot;&amp;gt;&#039;&#039;&#039;[[tgc:Terraria|Terraria]]&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;1.4.4.9&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Three side-by-side tables --&amp;gt;&lt;br /&gt;
{| style=&amp;quot;width:100%; border-spacing:0; margin:0;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:33%; border:1px solid var(--border-color-base); border-radius:5px; margin:0; padding: 15px; vertical-align:top; background: var(--color-surface-2);&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;padding:4px 8px; border-radius: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align:center; font-size:130%; font-weight: var(--font-weight-semi-bold); color: var(--color-emphasized); margin:0;&amp;quot;&amp;gt;[[Poké Balls]]&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* {{item|Poké Ball|size=28px}}&lt;br /&gt;
* {{item|Premier Ball|size=28px}}&lt;br /&gt;
* {{item|Cherish Ball|size=28px}}&lt;br /&gt;
* {{item|Aether Ball|size=28px}}&lt;br /&gt;
* {{item|Great Ball|size=28px}}&lt;br /&gt;
* {{item|Ultra Ball|size=28px}}&lt;br /&gt;
* {{item|Master Ball|size=28px}}&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width:33%; border:1px solid var(--border-color-base); border-radius:5px; margin:0; padding: 15px; vertical-align:top; background: var(--color-surface-2);&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;padding:4px 8px; border-radius: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align:center; font-size:130%; font-weight: var(--font-weight-semi-bold); color: var(--color-emphasized); margin:0;&amp;quot;&amp;gt;[[Evolutionary items]]&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* {{item|Rare Candy|size=28px}}&lt;br /&gt;
* {{item|Fire Stone|size=24px}}&lt;br /&gt;
* {{item|Water Stone|size=24px}}&lt;br /&gt;
* {{item|Thunder Stone|size=24px}}&lt;br /&gt;
* {{item|Leaf Stone|size=24px}}&lt;br /&gt;
* {{item|Moon Stone|size=28px}}&lt;br /&gt;
* {{item|Linking Cord}}&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width:33%; border:1px solid var(--border-color-base); border-radius:5px; margin:0; padding: 15px; vertical-align:top; background: var(--color-surface-2);&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;padding:4px 8px; border-radius: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align:center; font-size:130%; font-weight: var(--font-weight-semi-bold); color: var(--color-emphasized); margin:0;&amp;quot;&amp;gt;Misc.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* {{item|Pokémon|image=Pikachu.png|size=28px}}&lt;br /&gt;
* {{item|PC|image=PC (Red).png}}&lt;br /&gt;
* {{item|Poké Mart Clerk|image=Poké Mart Clerk Head.png}}&lt;br /&gt;
* {{item|Apricorns|image=Apricorns.gif}}&lt;br /&gt;
* {{item|Shiny Charm|size=26px}}&lt;br /&gt;
* {{item|Recipes|image=Work Bench.png|size=26px}}&lt;br /&gt;
* {{item|Vanity items|image=Pokemon Trainer Cap.png|size=24px}}&lt;br /&gt;
* {{item|Music|image=Music Box (Pokémon Center).png|size=26px}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>JamzOJamz</name></author>
	</entry>
	<entry>
		<id>https://wiki.terramonmod.com/index.php?title=Template:Image/info&amp;diff=32</id>
		<title>Template:Image/info</title>
		<link rel="alternate" type="text/html" href="https://wiki.terramonmod.com/index.php?title=Template:Image/info&amp;diff=32"/>
		<updated>2025-11-23T20:12:41Z</updated>

		<summary type="html">&lt;p&gt;JamzOJamz: Created page with &amp;quot;&amp;lt;includeonly&amp;gt;&amp;lt;!--   // forced update. --&amp;gt;{{#if:{{{2|}}}|&amp;lt;!--  	--&amp;gt;{{image/storeinfo|{{{1|}}}}}&amp;lt;!--  --&amp;gt;|&amp;lt;!--  	// query. If successful, just sets some dplvars (-&amp;gt; no output). If unsuccessful, returns an error string (-&amp;gt; output) 	--&amp;gt;{{#if:{{#cargo_query:tables=Imageinfo |fields=image, width, height |where=BINARY image=&amp;quot;{{{1|}}}&amp;quot;&amp;lt;!-- &amp;quot;BINARY&amp;quot; forces a case-sensitive query --&amp;gt; |order by=cached DESC |limit=1 |more results text= |no html |named args=yes |format=template |temp...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;&amp;lt;!-- &lt;br /&gt;
&lt;br /&gt;
// forced update.&lt;br /&gt;
--&amp;gt;{{#if:{{{2|}}}|&amp;lt;!-- &lt;br /&gt;
	--&amp;gt;{{image/storeinfo|{{{1|}}}}}&amp;lt;!-- &lt;br /&gt;
--&amp;gt;|&amp;lt;!-- &lt;br /&gt;
	// query. If successful, just sets some dplvars (-&amp;gt; no output). If unsuccessful, returns an error string (-&amp;gt; output)&lt;br /&gt;
	--&amp;gt;{{#if:{{#cargo_query:tables=Imageinfo&lt;br /&gt;
|fields=image, width, height&lt;br /&gt;
|where=BINARY image=&amp;quot;{{{1|}}}&amp;quot;&amp;lt;!-- &amp;quot;BINARY&amp;quot; forces a case-sensitive query --&amp;gt;&lt;br /&gt;
|order by=cached DESC&lt;br /&gt;
|limit=1&lt;br /&gt;
|more results text=&lt;br /&gt;
|no html&lt;br /&gt;
|named args=yes&lt;br /&gt;
|format=template&lt;br /&gt;
|template=image/query}}|&amp;lt;!--&lt;br /&gt;
		//something was output (the error string) -&amp;gt; query was unsuccessful:&lt;br /&gt;
		--&amp;gt;{{image/storeinfo|{{{1|}}}}}&amp;lt;!-- &lt;br /&gt;
	--&amp;gt;|&amp;lt;!-- &lt;br /&gt;
		//nothing was output (only dplvars were set) -&amp;gt; query was successful:&lt;br /&gt;
		--&amp;gt;{{#dplvar:set|_image_exist|1}}&amp;lt;!-- &lt;br /&gt;
	--&amp;gt;}}&amp;lt;!-- &lt;br /&gt;
--&amp;gt;}}&amp;lt;!-- &lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&amp;lt;/includeonly&amp;gt;&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
Internal sub-template. See {{tl|image}} for documentation.&lt;br /&gt;
&lt;br /&gt;
{{#cargo_attach:_table=Imageinfo}}&lt;br /&gt;
[[Category:Templates]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>JamzOJamz</name></author>
	</entry>
	<entry>
		<id>https://wiki.terramonmod.com/index.php?title=Template:Image&amp;diff=31</id>
		<title>Template:Image</title>
		<link rel="alternate" type="text/html" href="https://wiki.terramonmod.com/index.php?title=Template:Image&amp;diff=31"/>
		<updated>2025-11-23T20:12:13Z</updated>

		<summary type="html">&lt;p&gt;JamzOJamz: Created page with &amp;quot;&amp;lt;includeonly&amp;gt;&amp;lt;!--  //prepare image file info --&amp;gt;{{#if:{{#pos:{{{1|}}}|.}}|&amp;lt;!-- 	--&amp;gt;{{image/info|{{{1|}}}|{{{force|}}}}}&amp;lt;!-- for &amp;quot;filename.ext&amp;quot; will do exist check. directly.(expensive) --&amp;gt;|&amp;lt;!--  	// for &amp;quot;filename&amp;quot; will check &amp;quot;filename.gif&amp;quot; and &amp;quot;filename.png&amp;quot; (expensive*2) 	--&amp;gt;{{image/info|{{{1|}}}.gif|{{{force|}}}}}&amp;lt;!--  	--&amp;gt;{{#if:{{#dplvar:_image_exist}}||&amp;lt;!-- 		--&amp;gt;{{image/info|{{{1|}}}.png|{{{force|}}}}}&amp;lt;!--  	--&amp;gt;}}&amp;lt;!-- --&amp;gt;}}&amp;lt;!--  --&amp;gt;{{#if:{{#dplvar:_image_exist}}|&amp;lt;!--...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
//prepare image file info&lt;br /&gt;
--&amp;gt;{{#if:{{#pos:{{{1|}}}|.}}|&amp;lt;!--&lt;br /&gt;
	--&amp;gt;{{image/info|{{{1|}}}|{{{force|}}}}}&amp;lt;!-- for &amp;quot;filename.ext&amp;quot; will do exist check. directly.(expensive)&lt;br /&gt;
--&amp;gt;|&amp;lt;!-- &lt;br /&gt;
	// for &amp;quot;filename&amp;quot; will check &amp;quot;filename.gif&amp;quot; and &amp;quot;filename.png&amp;quot; (expensive*2)&lt;br /&gt;
	--&amp;gt;{{image/info|{{{1|}}}.gif|{{{force|}}}}}&amp;lt;!-- &lt;br /&gt;
	--&amp;gt;{{#if:{{#dplvar:_image_exist}}||&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{image/info|{{{1|}}}.png|{{{force|}}}}}&amp;lt;!-- &lt;br /&gt;
	--&amp;gt;}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;}}&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;{{#if:{{#dplvar:_image_exist}}|&amp;lt;!--&lt;br /&gt;
	--&amp;gt;{{#vardefine:_size_argument|}}&amp;lt;!-- cache&lt;br /&gt;
	//process all input argument&lt;br /&gt;
	--&amp;gt;{{#vardefine:_outputstr|&amp;lt;!-- string with all parameters of the &amp;quot;[[File:]]&amp;quot; call. fill it in the following loop&lt;br /&gt;
		--&amp;gt;{{#forargs:|_k|_v|&amp;lt;!-- loop through all parameters&lt;br /&gt;
			--&amp;gt;{{#iferror:{{#expr:1+{{#var:_k}}}}|&amp;lt;!-- check: is the parameter a named parameter?&lt;br /&gt;
				//parameter is a named parameter&lt;br /&gt;
				--&amp;gt;{{#switch:{{#var:_k}}&amp;lt;!-- check for certain parameters&lt;br /&gt;
					--&amp;gt;|maxsize|scale|size|redlink=&amp;lt;!-- options of this template. skip, will process later.&lt;br /&gt;
					--&amp;gt;|#default={{!}}{{#var:_k}}={{#var:_v}}&amp;lt;!-- other custom parameter for [[File:]]. add &amp;quot;|&amp;lt;name of the parameter&amp;gt;=&amp;lt;value of the parameter&amp;gt;&amp;quot; to outputstring&lt;br /&gt;
				--&amp;gt;}}&amp;lt;!-- &lt;br /&gt;
			--&amp;gt;|&amp;lt;!-- &lt;br /&gt;
				//parameter is an unnamed parameter&lt;br /&gt;
				--&amp;gt;{{#switch:{{#var:_k}}&amp;lt;!--&lt;br /&gt;
					--&amp;gt;|1=&amp;lt;!-- if parameter is the first unnamed parameter, then skip (is the image name info; already taken care of)&lt;br /&gt;
					--&amp;gt;|#default=&amp;lt;!-- other unnamed parameters&lt;br /&gt;
						--&amp;gt;{{#ifeq:{{#sub:{{#var:_v}}|-2}}|px|&amp;lt;!-- is the parameter the size option?&lt;br /&gt;
							--&amp;gt;{{#vardefine:_size_argument|{{#var:_v}}}}&amp;lt;!-- &lt;br /&gt;
						--&amp;gt;|&amp;lt;!-- parameter is not the size option, but another (e.g. alt text or &amp;quot;thumb/frame/etc.&amp;quot;)&lt;br /&gt;
							--&amp;gt;{{!}}{{#var:_v}}&amp;lt;!-- add &amp;quot;|&amp;lt;value of the parameter&amp;gt;&amp;quot; to outputstring&lt;br /&gt;
						--&amp;gt;}}&amp;lt;!--&lt;br /&gt;
				--&amp;gt;}}&amp;lt;!-- &lt;br /&gt;
			--&amp;gt;}}&amp;lt;!-- &lt;br /&gt;
		--&amp;gt;}}&amp;lt;!-- &lt;br /&gt;
	--&amp;gt;}}&amp;lt;!-- &lt;br /&gt;
	//size:&lt;br /&gt;
	--&amp;gt;{{#if:{{{maxsize|}}}{{{scale|}}}{{{size|}}}{{#var:_size_argument|}}|&amp;lt;!--&lt;br /&gt;
		--&amp;gt;{{#vardefine:_outputstr|&amp;lt;!-- &lt;br /&gt;
			--&amp;gt;{{!}}&amp;lt;!-- &lt;br /&gt;
			--&amp;gt;{{image/size|{{{size|{{#var:_size_argument|}}}}}|{{{scale|1}}}|{{{maxsize|}}}}}&amp;lt;!-- &lt;br /&gt;
			--&amp;gt;{{#var:_outputstr}}&amp;lt;!-- concatenate size parameters with other parameters&lt;br /&gt;
		--&amp;gt;}}&amp;lt;!-- &lt;br /&gt;
	--&amp;gt;}}&amp;lt;!-- &lt;br /&gt;
&lt;br /&gt;
	//final output:&lt;br /&gt;
	--&amp;gt;[[File:{{#dplvar:_image_name}}{{#var:_outputstr}}]]&amp;lt;!--&lt;br /&gt;
--&amp;gt;|&amp;lt;!--ELSE, not exist&lt;br /&gt;
	--&amp;gt;{{#if:{{{redlink|}}}|[[File:{{#if:{{#pos:{{{1|}}}|.}}|{{{1|}}}|{{{1|}}}.png}}]]}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;}}&amp;lt;!-- &lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;{{#cargo_declare:_table=Imageinfo&lt;br /&gt;
|image=String (size=200;mandatory)&lt;br /&gt;
|md5name=String(size=40)&amp;lt;!-- If we use &amp;quot;WHERE image=&#039;xxx&#039;&amp;quot; in query, it is case-insensitive. &amp;quot;WHERE BINARY image=&#039;xxx&#039;&amp;quot; is case-sensitive but it prevents using index.So we use a md5(imagename) field as a workaround.  --&amp;gt;&lt;br /&gt;
|width=Integer&lt;br /&gt;
|height=Integer&lt;br /&gt;
|cached=Integer&lt;br /&gt;
}}&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;{{doc}}&lt;br /&gt;
{{category|Templates}}&lt;br /&gt;
{{language info|en=Template:Image}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>JamzOJamz</name></author>
	</entry>
	<entry>
		<id>https://wiki.terramonmod.com/index.php?title=Template:Lang&amp;diff=30</id>
		<title>Template:Lang</title>
		<link rel="alternate" type="text/html" href="https://wiki.terramonmod.com/index.php?title=Template:Lang&amp;diff=30"/>
		<updated>2025-11-23T20:11:06Z</updated>

		<summary type="html">&lt;p&gt;JamzOJamz: Created page with &amp;quot;&amp;lt;includeonly&amp;gt;&amp;lt;!--  // auto detect if needed, only once per page. --&amp;gt;{{#var:__global__lang|&amp;lt;!--  	--&amp;gt;{{#vardefineecho:__global__lang|&amp;lt;!--   		// For language wikis: 		--&amp;gt;&amp;lt;!--&amp;lt;language code&amp;gt;&amp;lt;!-- replace the &amp;quot;&amp;lt;!--&amp;lt;language code&amp;gt;&amp;quot; with your wiki&amp;#039;s language code, e.g. de/fr/pt/zh   		------ The part below this line should be omitted on language wikis! ------  		--&amp;gt;{{#ifeq:{{PAGENAME}}|{{SUBPAGENAME}}|en|{{#ifeq:{{#len:{{SUBPAGENAME}}}}|2|{{SUBPAGENAME}}|en}}}}&amp;lt;!--   		------...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;&amp;lt;!-- &lt;br /&gt;
// auto detect if needed, only once per page.&lt;br /&gt;
--&amp;gt;{{#var:__global__lang|&amp;lt;!-- &lt;br /&gt;
	--&amp;gt;{{#vardefineecho:__global__lang|&amp;lt;!-- &lt;br /&gt;
&lt;br /&gt;
		// For language wikis:&lt;br /&gt;
		--&amp;gt;&amp;lt;!--&amp;lt;language code&amp;gt;&amp;lt;!-- replace the &amp;quot;&amp;lt;!--&amp;lt;language code&amp;gt;&amp;quot; with your wiki&#039;s language code, e.g. de/fr/pt/zh&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		------ The part below this line should be omitted on language wikis! ------&lt;br /&gt;
&lt;br /&gt;
		--&amp;gt;{{#ifeq:{{PAGENAME}}|{{SUBPAGENAME}}|en|{{#ifeq:{{#len:{{SUBPAGENAME}}}}|2|{{SUBPAGENAME}}|en}}}}&amp;lt;!-- &lt;br /&gt;
&lt;br /&gt;
		------ The part above this line should be omitted on language wikis! ------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	--&amp;gt;}}&amp;lt;!-- &lt;br /&gt;
--&amp;gt;}}&amp;lt;!-- &lt;br /&gt;
--&amp;gt;&amp;lt;/includeonly&amp;gt;&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&amp;lt;noinclude&amp;gt;{{doc}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>JamzOJamz</name></author>
	</entry>
	<entry>
		<id>https://wiki.terramonmod.com/index.php?title=Template:Tr&amp;diff=29</id>
		<title>Template:Tr</title>
		<link rel="alternate" type="text/html" href="https://wiki.terramonmod.com/index.php?title=Template:Tr&amp;diff=29"/>
		<updated>2025-11-23T20:10:47Z</updated>

		<summary type="html">&lt;p&gt;JamzOJamz: Created page with &amp;quot;&amp;lt;includeonly&amp;gt;&amp;lt;!--  // init language setting: --&amp;gt;{{#dplvar:set|tr:lang|{{{lang|{{lang}}}}}}}&amp;lt;!--   --&amp;gt;{{#ifeq:{{#dplvar:tr:lang}}|en|&amp;lt;!--  	--&amp;gt;{{{1}}}&amp;lt;!-- en, no need to translate --&amp;gt;|&amp;lt;!--  	// loading glossary database, only do once per page. 	--&amp;gt;{{#if:{{#var:_tr:{{#dplvar:tr:lang}}:__OK__}}||{{#invoke:Tr|loadData|lang={{#dplvar:tr:lang}}}}}}&amp;lt;!--   	--&amp;gt;{{#if:{{{link|}}}|&amp;lt;!--  		// looking up for link translation: 		--&amp;gt;{{#vardefine:_t|{{#var:_tr:{{#dplvar:tr:lang}}:link:{...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;&amp;lt;!-- &lt;br /&gt;
// init language setting:&lt;br /&gt;
--&amp;gt;{{#dplvar:set|tr:lang|{{{lang|{{lang}}}}}}}&amp;lt;!-- &lt;br /&gt;
&lt;br /&gt;
--&amp;gt;{{#ifeq:{{#dplvar:tr:lang}}|en|&amp;lt;!-- &lt;br /&gt;
	--&amp;gt;{{{1}}}&amp;lt;!-- en, no need to translate&lt;br /&gt;
--&amp;gt;|&amp;lt;!-- &lt;br /&gt;
	// loading glossary database, only do once per page.&lt;br /&gt;
	--&amp;gt;{{#if:{{#var:_tr:{{#dplvar:tr:lang}}:__OK__}}||{{#invoke:Tr|loadData|lang={{#dplvar:tr:lang}}}}}}&amp;lt;!-- &lt;br /&gt;
&lt;br /&gt;
	--&amp;gt;{{#if:{{{link|}}}|&amp;lt;!-- &lt;br /&gt;
		// looking up for link translation:&lt;br /&gt;
		--&amp;gt;{{#vardefine:_t|{{#var:_tr:{{#dplvar:tr:lang}}:link:{{{1|}}}}}}}&amp;lt;!-- varname example: _tr-it:link:Fish&lt;br /&gt;
		--&amp;gt;{{#var:_t|{{{1|}}}/{{#dplvar:tr:lang}}}}&amp;lt;!-- default: enPagename/lang, e.g. Fish/it&lt;br /&gt;
	--&amp;gt;|&amp;lt;!-- &lt;br /&gt;
		// looking up for normal translation:&lt;br /&gt;
		--&amp;gt;{{#vardefine:_t|{{#var:_tr:{{#dplvar:tr:lang}}:{{{1|}}}}}}}&amp;lt;!--  varname example: _tr-it:Fish&lt;br /&gt;
		--&amp;gt;{{#var:_t|{{{1|}}}}}&amp;lt;!--&lt;br /&gt;
	--&amp;gt;}}&amp;lt;!-- &lt;br /&gt;
--&amp;gt;}}&amp;lt;!-- &lt;br /&gt;
--&amp;gt;&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
Auto translation, depending on glossary database, it is located at &amp;lt;code&amp;gt;Template:tr/db-&amp;lt;langcode&amp;gt;&amp;lt;/code&amp;gt; (e.g. &amp;lt;code&amp;gt;Template:tr/db-ko&amp;lt;/code&amp;gt; for Korean).&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
Auto determine the language(by page url):&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{tr|&amp;lt;english&amp;gt;}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Explicitly specify language:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{tr|lang=&amp;lt;langcode&amp;gt;|&amp;lt;english&amp;gt;}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You will get the corresponding translation. If there is no entity for the input in glossary, you will get the original input text.&lt;br /&gt;
&lt;br /&gt;
For example:&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{tr|lang=en|Gold Watch}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;{{tr|lang=en|Gold Watch}}&amp;lt;/code&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{tr|lang=ko|Molten Hamaxe}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;{{tr|lang=ko|Molten Hamaxe}}&amp;lt;/code&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{tr|lang=ko|Dirt Wings}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;{{tr|lang=ko|Dirt Wings}}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
get pagename for target language:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{tr|&amp;lt;english&amp;gt;|link=y}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{tr|lang=&amp;lt;langcode&amp;gt;|&amp;lt;english&amp;gt;|link=y|}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example:&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{tr|lang=en|Gold Watch|link=y}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;{{tr|lang=en|Gold Watch|link=y}}&amp;lt;/code&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{tr|lang=ko|Molten Hamaxe|link=y}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;{{tr|lang=ko|Molten Hamaxe|link=y}}&amp;lt;/code&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;white-space:pre&amp;quot;&amp;gt;&lt;br /&gt;
NOTE: Based on performance considerations, input text is case sensitive and white space sensitive, so be careful about that.&lt;br /&gt;
For example:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{tr|lang=ko|Molten Hamaxe}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;{{tr|lang=ko|Molten Hamaxe}}&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{tr|lang=ko|Molten hamaxe}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;{{tr|lang=ko|Molten hamaxe}}&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{tr|lang=ko| Molten Hamaxe }}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;{{tr|lang=ko| Molten Hamaxe }}&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{tr|lang=ko|Molten   Hamaxe}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;{{tr|lang=ko|Molten   Hamaxe}}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Data templates]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>JamzOJamz</name></author>
	</entry>
	<entry>
		<id>https://wiki.terramonmod.com/index.php?title=Main_Page&amp;diff=28</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.terramonmod.com/index.php?title=Main_Page&amp;diff=28"/>
		<updated>2025-11-23T20:09:23Z</updated>

		<summary type="html">&lt;p&gt;JamzOJamz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#seo:&lt;br /&gt;
|title=The Terramon Wikia&lt;br /&gt;
}}&lt;br /&gt;
{| style=&amp;quot;width:100%; text-align:center; border:1px solid var(--border-color-base); border-radius:5px; margin:0; background: var(--color-surface-2);&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding:13px;&amp;quot; |&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:170%; font-weight:600; color: var(--color-emphasized); font-weight: var(--font-weight-semi-bold);&amp;quot;&amp;gt;&lt;br /&gt;
Welcome to the &amp;lt;span style=&amp;quot;font-weight:900;&amp;quot;&amp;gt;Official Terramon Mod Wiki&amp;lt;/span&amp;gt;,&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
the most comprehensive source of information about the mod.&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;padding:5px 8px; margin-top:8px; border-radius: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
[https://discord.gg/U8skDEA Official Discord] • [https://www.youtube.com/channel/UCU91hiBTfhZB5YBbQZlgCPg YouTube Channel]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Two side-by-side tables --&amp;gt;&lt;br /&gt;
{| style=&amp;quot;width:100%; border-spacing:0; margin:0;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:70%; border:1px solid var(--border-color-base); border-radius:5px; margin:0; padding: 15px; vertical-align:top; background: var(--color-surface-2);&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;padding:4px 8px; border-radius: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;float: right;&amp;quot;&amp;gt;[[File:Mod icon.png]]&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align:center; font-size:130%; font-weight: var(--font-weight-semi-bold); color: var(--color-emphasized); margin:0;&amp;quot;&amp;gt;The Mod&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Terramon Mod is a large and immersive mod for Terraria that seamlessly integrates the beloved world of Pokémon into the game. Dive into an adventure where you can explore, catch, and train over 150 Pokémon in the vast and diverse landscapes of Terraria. With refined mechanics and plenty to discover, Terramon is a fun experience for longtime Pokémon fans, casual players, and newcomers alike.&lt;br /&gt;
&lt;br /&gt;
You can download the mod from our [https://steamcommunity.com/sharedfiles/filedetails/?id=3435381419 Steam Workshop page] or directly from [https://github.com/JamzOJamz/Terramon/releases/download/0.1.3.2/Terramon.tmod here].&lt;br /&gt;
&lt;br /&gt;
Past versions of the mod can also be downloaded from our [[Version History]] page.&lt;br /&gt;
| style=&amp;quot;width:30%; border:1px solid var(--border-color-base); border-radius:5px; margin:0; padding: 15px; vertical-align:top; background: var(--color-surface-2);&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width:100%; text-align:center;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align: center; display: flex; flex-direction: column; gap: 4px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;padding:4px 8px; border-radius: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align:center; font-size:130%; font-weight: var(--font-weight-semi-bold); color: var(--color-emphasized); margin:0;&amp;quot;&amp;gt;Latest Supported Versions&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;font-size: 107%; border-radius: 5px;&amp;quot;&amp;gt;&#039;&#039;&#039;[[Version History|Terramon Mod]]&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;[[Beta 0.1.3.2]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;font-size: 107%; border-radius: 5px;&amp;quot;&amp;gt;&#039;&#039;&#039;[[tgc:TModLoader|tModLoader]]&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;2025.9.3.0&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;font-size: 107%; border-radius: 5px;&amp;quot;&amp;gt;&#039;&#039;&#039;[[tgc:Terraria|Terraria]]&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;1.4.4.9&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Three side-by-side tables --&amp;gt;&lt;br /&gt;
{| style=&amp;quot;width:100%; border-spacing:0; margin:0;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:33%; border:1px solid var(--border-color-base); border-radius:5px; margin:0; padding: 15px; vertical-align:top; background: var(--color-surface-2);&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;padding:4px 8px; border-radius: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align:center; font-size:130%; font-weight: var(--font-weight-semi-bold); color: var(--color-emphasized); margin:0;&amp;quot;&amp;gt;[[Poké Balls]]&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* {{item|Poké Ball|size=28px}}&lt;br /&gt;
* {{item|Premier Ball|size=28px}}&lt;br /&gt;
* {{item|Cherish Ball|size=28px}}&lt;br /&gt;
* {{item|Aether Ball|size=28px}}&lt;br /&gt;
* {{item|Great Ball|size=28px}}&lt;br /&gt;
* {{item|Ultra Ball|size=28px}}&lt;br /&gt;
* {{item|Master Ball|size=28px}}&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width:33%; border:1px solid var(--border-color-base); border-radius:5px; margin:0; padding: 15px; vertical-align:top; background: var(--color-surface-2);&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;padding:4px 8px; border-radius: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align:center; font-size:130%; font-weight: var(--font-weight-semi-bold); color: var(--color-emphasized); margin:0;&amp;quot;&amp;gt;[[Evolutionary items]]&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* {{item|Rare Candy|size=28px}}&lt;br /&gt;
* {{item|Fire Stone|size=24px}}&lt;br /&gt;
* {{item|Water Stone|size=24px}}&lt;br /&gt;
* {{item|Thunder Stone|size=24px}}&lt;br /&gt;
* {{item|Leaf Stone|size=24px}}&lt;br /&gt;
* {{item|Moon Stone|size=28px}}&lt;br /&gt;
* {{item|Linking Cord}}&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width:33%; border:1px solid var(--border-color-base); border-radius:5px; margin:0; padding: 15px; vertical-align:top; background: var(--color-surface-2);&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;padding:4px 8px; border-radius: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align:center; font-size:130%; font-weight: var(--font-weight-semi-bold); color: var(--color-emphasized); margin:0;&amp;quot;&amp;gt;Misc.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* {{item|Pokémon|image=Pikachu.png|size=28px}}&lt;br /&gt;
* {{item|PC|image=PC (Red).png}}&lt;br /&gt;
* {{item|Poké Mart Clerk|image=Poké Mart Clerk Head.png}}&lt;br /&gt;
* {{item|Apricorns|image=Apricorns.gif}}&lt;br /&gt;
* {{item|Shiny Charm|size=26px}}&lt;br /&gt;
* {{item|Recipes|image=Work Bench.png|size=26px}}&lt;br /&gt;
* {{item|Vanity items|image=Pokemon Trainer Cap.png|size=24px}}&lt;br /&gt;
* {{item|Music|image=Music Box (Pokémon Center).png|size=26px}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>JamzOJamz</name></author>
	</entry>
	<entry>
		<id>https://wiki.terramonmod.com/index.php?title=Module:Recipes/l10n&amp;diff=27</id>
		<title>Module:Recipes/l10n</title>
		<link rel="alternate" type="text/html" href="https://wiki.terramonmod.com/index.php?title=Module:Recipes/l10n&amp;diff=27"/>
		<updated>2025-11-23T20:08:55Z</updated>

		<summary type="html">&lt;p&gt;JamzOJamz: Created page with &amp;quot;-- register l10n information -- Note: All &amp;quot;Any xxx&amp;quot; groups (e.g. &amp;quot;Any Birds&amp;quot;) should be added to the {{tr}} database.  return { 	[&amp;#039;en&amp;#039;] = { 		-- for {{recipes}}-- 		[&amp;#039;cate_unexpected_rows_count&amp;#039;] = &amp;#039;Recipes table with unexpected total number of rows&amp;#039;, 		[&amp;#039;cate_no_row&amp;#039;] = &amp;#039;Recipes table with no row&amp;#039;, 		[&amp;#039;header_result&amp;#039;] = &amp;#039;Result&amp;#039;, 		[&amp;#039;header_ingredients&amp;#039;] = &amp;#039;Ingredients&amp;#039;, 		[&amp;#039;header_station&amp;#039;] = &amp;#039;Crafting station&amp;#039;, 		 		[&amp;#039;historical_recipe_note&amp;#039;] = &amp;#039;&amp;amp;nbsp;&amp;lt;abbr title=...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- register l10n information&lt;br /&gt;
-- Note: All &amp;quot;Any xxx&amp;quot; groups (e.g. &amp;quot;Any Birds&amp;quot;) should be added to the {{tr}} database.&lt;br /&gt;
&lt;br /&gt;
return {&lt;br /&gt;
	[&#039;en&#039;] = {&lt;br /&gt;
		-- for {{recipes}}--&lt;br /&gt;
		[&#039;cate_unexpected_rows_count&#039;] = &#039;Recipes table with unexpected total number of rows&#039;,&lt;br /&gt;
		[&#039;cate_no_row&#039;] = &#039;Recipes table with no row&#039;,&lt;br /&gt;
		[&#039;header_result&#039;] = &#039;Result&#039;,&lt;br /&gt;
		[&#039;header_ingredients&#039;] = &#039;Ingredients&#039;,&lt;br /&gt;
		[&#039;header_station&#039;] = &#039;[[Crafting station]]&#039;,&lt;br /&gt;
		&lt;br /&gt;
		[&#039;historical_recipe_note&#039;] = &#039;&amp;amp;nbsp;&amp;lt;abbr title=&amp;quot;This recipe is no longer present in the mod&amp;quot;&amp;gt;hist&amp;lt;/abbr&amp;gt;&#039;,&lt;br /&gt;
&lt;br /&gt;
		[&#039;cate_craftable&#039;] = &#039;Craftable items&#039;,&lt;br /&gt;
&lt;br /&gt;
		[&#039;station_cate_start_str&#039;] = &#039;Items crafted at &#039;,&lt;br /&gt;
&lt;br /&gt;
		[&#039;station_by_hand&#039;] = &#039;[[By Hand]]&#039;,&lt;br /&gt;
		[&#039;station_by_hand_cate&#039;] = &#039;Items crafted by hand&#039;,&lt;br /&gt;
&lt;br /&gt;
		[&#039;station_sep_or&#039;] = &amp;quot;&amp;lt;br/&amp;gt;&#039;&#039;&#039;&#039;&#039;or&#039;&#039;&#039;&#039;&#039;&amp;lt;br/&amp;gt;&amp;quot;,&lt;br /&gt;
		[&#039;station_sep_and&#039;] = &amp;quot; &#039;&#039;&#039;and&#039;&#039;&#039; &amp;quot;,&lt;br /&gt;
&lt;br /&gt;
		[&#039;ingredients_sep&#039;] = &amp;quot; &#039;&#039;or&#039;&#039; &amp;quot;,&lt;br /&gt;
&lt;br /&gt;
		[&#039;no_ingredients&#039;] = &#039;(none)&#039;,&lt;br /&gt;
&lt;br /&gt;
		[&#039;station_cate&#039;] = {&lt;br /&gt;
			[&#039;Lead Anvil&#039;] = &#039;Iron or Lead Anvil&#039;,&lt;br /&gt;
			[&#039;Iron Anvil&#039;] = &#039;Iron or Lead Anvil&#039;,&lt;br /&gt;
			[&#039;Orichalcum Anvil&#039;] = &#039;Mythril or Orichalcum Anvil&#039;,&lt;br /&gt;
			[&#039;Mythril Anvil&#039;] = &#039;Mythril or Orichalcum Anvil&#039;,&lt;br /&gt;
			[&#039;Demon Altar&#039;] =  &#039;Demon or Crimson Altar&#039;,&lt;br /&gt;
			[&#039;Crimson Altar&#039;] = &#039;Demon or Crimson Altar&#039;,&lt;br /&gt;
			[&#039;Altar&#039;] = &#039;Demon or Crimson Altar&#039;,&lt;br /&gt;
			[&#039;Titanium Forge&#039;] = &#039;Adamantite or Titanium Forge&#039;,&lt;br /&gt;
			[&#039;Adamantite Forge&#039;] = &#039;Adamantite or Titanium Forge&#039;,&lt;br /&gt;
			[&#039;Cauldron&#039;] = &#039;Cooking Pot or Cauldron&#039;,&lt;br /&gt;
			[&#039;Cooking Pot&#039;] = &#039;Cooking Pot or Cauldron&#039;,&lt;br /&gt;
			[&#039;Bottle only&#039;] = &#039;Placed Bottle&#039;,&lt;br /&gt;
			[&#039;Placed Bottle only&#039;] = &#039;Placed Bottle&#039;,&lt;br /&gt;
			[&#039;Bottle&#039;] = &#039;Placed Bottle or Alchemy Table&#039;,&lt;br /&gt;
			[&#039;Placed Bottle&#039;] = &#039;Placed Bottle or Alchemy Table&#039;,&lt;br /&gt;
			[&#039;Alchemy Table&#039;] = &#039;Placed Bottle or Alchemy Table&#039;,&lt;br /&gt;
			[&#039;Water&#039;] = &#039;Water or Sink&#039;,&lt;br /&gt;
			[&#039;Sink&#039;] = &#039;Water or Sink&#039;,&lt;br /&gt;
			[&#039;Crystal Ball and Water&#039;] = &#039;Crystal Ball and Water or Sink&#039;,&lt;br /&gt;
			[&#039;Sky Mill and Water&#039;] = &#039;Sky Mill and Water or Sink&#039;,&lt;br /&gt;
			[&#039;Sky Mill and Snow Biome&#039;] = &#039;Sky Mill and Snow Biome&#039;,&lt;br /&gt;
			[&#039;Crystal Ball and Honey&#039;] = &#039;Crystal Ball and Honey&#039;,&lt;br /&gt;
			[&#039;Crystal Ball and Lava&#039;] = &#039;Crystal Ball and Lava&#039;,&lt;br /&gt;
&lt;br /&gt;
			[&#039;Alchemy Table only&#039;] = &#039;Alchemy Table&#039;,&lt;br /&gt;
&lt;br /&gt;
		},&lt;br /&gt;
		-- for {{recipes/extract}}--&lt;br /&gt;
		[&#039;default_sep_compact&#039;] = &amp;quot;&amp;lt;br/&amp;gt;&#039;&#039;&#039;or&#039;&#039;&#039;&amp;lt;br/&amp;gt;&amp;quot;,&lt;br /&gt;
		[&#039;default_sep_ingredients&#039;] = &amp;quot;&#039;&#039;&#039;or&#039;&#039;&#039;&amp;quot;,&lt;br /&gt;
		[&#039;compact_before&#039;] = &#039; &amp;amp;nbsp;&amp;lt;span style=&amp;quot;font-weight:bold; text-shadow: 0px 0px 8px #FF0066; cursor:pointer;&amp;quot; title=&amp;quot;Crafted At&amp;quot;&amp;gt;@&amp;lt;/span&amp;gt;&amp;amp;nbsp;&amp;amp;thinsp;&#039;,&lt;br /&gt;
		[&#039;compact_snow_biome&#039;] = &#039;[[Snow biome|Snow]]&#039;,&lt;br /&gt;
	},&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>JamzOJamz</name></author>
	</entry>
	<entry>
		<id>https://wiki.terramonmod.com/index.php?title=Module:Recipes&amp;diff=26</id>
		<title>Module:Recipes</title>
		<link rel="alternate" type="text/html" href="https://wiki.terramonmod.com/index.php?title=Module:Recipes&amp;diff=26"/>
		<updated>2025-11-23T20:08:34Z</updated>

		<summary type="html">&lt;p&gt;JamzOJamz: Created page with &amp;quot;------- l10n info -------------- local l10n_info = mw.loadData(&amp;#039;Module:Recipes/l10n&amp;#039;)  ------- The following is not related to l10n. --------------   local item_link = require(&amp;#039;Module:Item&amp;#039;).go local trim = mw.text.trim local cargo = mw.ext.cargo local cache = require &amp;#039;mw.ext.LuaCache&amp;#039;  local currentFrame -- global cache for current frame object. local inputArgs -- global args cache. local lang -- cache current lang. local l10n_table  local resultanchor  local l10n = fun...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;------- l10n info --------------&lt;br /&gt;
local l10n_info = mw.loadData(&#039;Module:Recipes/l10n&#039;)&lt;br /&gt;
&lt;br /&gt;
------- The following is not related to l10n. --------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local item_link = require(&#039;Module:Item&#039;).go&lt;br /&gt;
local trim = mw.text.trim&lt;br /&gt;
local cargo = mw.ext.cargo&lt;br /&gt;
local cache = require &#039;mw.ext.LuaCache&#039;&lt;br /&gt;
&lt;br /&gt;
local currentFrame -- global cache for current frame object.&lt;br /&gt;
local inputArgs -- global args cache.&lt;br /&gt;
local lang -- cache current lang.&lt;br /&gt;
local l10n_table&lt;br /&gt;
&lt;br /&gt;
local resultanchor&lt;br /&gt;
&lt;br /&gt;
local l10n = function(key)&lt;br /&gt;
	return l10n_table[key] or l10n_info[&#039;en&#039;][key]&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local extCols_stationBefore = nil&lt;br /&gt;
local extCols_stationAfter = nil&lt;br /&gt;
&lt;br /&gt;
local extCols_A = nil&lt;br /&gt;
local extCols_B = nil&lt;br /&gt;
local extCols_C = nil&lt;br /&gt;
local extCols_D = nil&lt;br /&gt;
&lt;br /&gt;
function getArg(key)&lt;br /&gt;
	local v = trim(inputArgs[key] or &#039;&#039;)&lt;br /&gt;
	if v==&#039;&#039; then&lt;br /&gt;
		return nil&lt;br /&gt;
	else&lt;br /&gt;
		return v&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local itemLink = (function()&lt;br /&gt;
	local cache = {}&lt;br /&gt;
	return function(name, args)&lt;br /&gt;
		local key = name..&amp;quot;|&amp;quot;&lt;br /&gt;
		if args then&lt;br /&gt;
			for k, v in pairs(args) do&lt;br /&gt;
				key = key..k..&#039;=&#039;..tostring(v)..&#039;|&#039;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if not cache[key] then&lt;br /&gt;
			local args = args and mw.clone(args) or {}&lt;br /&gt;
			args[&#039;mode&#039;] = args[&#039;mode&#039;] or nil&lt;br /&gt;
			args[1] = name&lt;br /&gt;
			if (not args[2]) or args[2] == &#039;&#039; then&lt;br /&gt;
				args[2] = currentFrame:expandTemplate{ title = &#039;tr&#039;, args = {name, lang=lang} }&lt;br /&gt;
			end&lt;br /&gt;
			args[&#039;small&#039;] = &#039;y&#039;&lt;br /&gt;
			args[&#039;lang&#039;] = lang or &#039;en&#039;&lt;br /&gt;
			args[&#039;nolink&#039;] = args[&#039;nolink&#039;] and &#039;y&#039; or nil&lt;br /&gt;
			args[&#039;class&#039;] = args[&#039;class&#039;] or nil&lt;br /&gt;
			cache[key] = item_link(currentFrame, args)&lt;br /&gt;
		end&lt;br /&gt;
		return cache[key]&lt;br /&gt;
	end&lt;br /&gt;
end)()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-- credit: http://richard.warburton.it&lt;br /&gt;
-- this version is with trim.&lt;br /&gt;
local explode = function(div,str)&lt;br /&gt;
	if (div==&#039;&#039;) then return false end&lt;br /&gt;
	local pos,arr = 0,{}&lt;br /&gt;
	-- for each divider found&lt;br /&gt;
	for st,sp in function() return string.find(str,div,pos,true) end do&lt;br /&gt;
		table.insert(arr, trim(string.sub(str,pos,st-1))) -- Attach chars left of current divider&lt;br /&gt;
		pos = sp + 1 -- Jump past current divider&lt;br /&gt;
	end&lt;br /&gt;
	table.insert(arr, trim(string.sub(str,pos))) -- Attach chars right of last divider&lt;br /&gt;
	return arr&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- retuan a array of itemname, split xxx/yyy to item1=xxx, item2=yyy. If it&#039;s something like &amp;quot;Lead/Iron Bar&amp;quot;, it will normalize as item1 = Iron Bar, item2 = Lead Bar.&lt;br /&gt;
local split = (function()&lt;br /&gt;
	local metals = {&lt;br /&gt;
		[&#039;Copper/Tin&#039;] = 1,&lt;br /&gt;
		[&#039;Silver/Tungsten&#039;] = 1,&lt;br /&gt;
		[&#039;Gold/Platinum&#039;] = 1,&lt;br /&gt;
		[&#039;Iron/Lead&#039;] = 1,&lt;br /&gt;
		[&#039;Cobalt/Palladium&#039;] = 1,&lt;br /&gt;
		[&#039;Mythril/Orichalcum&#039;] = 1,&lt;br /&gt;
		[&#039;Adamantite/Titanium&#039;] = 1,&lt;br /&gt;
		[&#039;Tin/Copper&#039;] = 2,&lt;br /&gt;
		[&#039;Tungsten/Silver&#039;] = 2,&lt;br /&gt;
		[&#039;Platinum/Gold&#039;] = 2,&lt;br /&gt;
		[&#039;Lead/Iron&#039;] = 2,&lt;br /&gt;
		[&#039;Palladium/Cobalt&#039;] = 2,&lt;br /&gt;
		[&#039;Orichalcum/Mythril&#039;] = 2,&lt;br /&gt;
		[&#039;Titanium/Adamantite&#039;] = 2,&lt;br /&gt;
	}&lt;br /&gt;
	return function(name)&lt;br /&gt;
		local count = select(2, name:gsub(&amp;quot;/&amp;quot;, &amp;quot;/&amp;quot;, 2))&lt;br /&gt;
		if count == 0 then&lt;br /&gt;
			-- only 1 item&lt;br /&gt;
			return { trim(name) }&lt;br /&gt;
		elseif count == 1 then&lt;br /&gt;
			-- 2 items&lt;br /&gt;
			local item1a, item1b, item2a, item2b = name:match(&amp;quot;^%s*(%S+)%s*(.-)/%s*(%S+)%s*(.-)$&amp;quot;)&lt;br /&gt;
			local x = metals[item1a..&#039;/&#039;..item2a]&lt;br /&gt;
			if tostring(item1b) == &#039;&#039; and x then&lt;br /&gt;
				item1b = item2b&lt;br /&gt;
			end&lt;br /&gt;
			if x == 2 then&lt;br /&gt;
				return {trim(item2a..&#039; &#039;..item2b), trim(item1a..&#039; &#039;..item1b)}&lt;br /&gt;
			else&lt;br /&gt;
				return {trim(item1a..&#039; &#039;..item1b), trim(item2a..&#039; &#039;..item2b)}&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			-- 3 or more items&lt;br /&gt;
			return explode(&#039;/&#039;, name)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end)()&lt;br /&gt;
&lt;br /&gt;
-- return 1 or 2 value(s), when input is name[note], return item, note.&lt;br /&gt;
local itemname = function(str)&lt;br /&gt;
		local item, note = str:match(&amp;quot;^(.-)(%b[])$&amp;quot;)&lt;br /&gt;
		if item then&lt;br /&gt;
			return item, note&lt;br /&gt;
		else&lt;br /&gt;
			return str&lt;br /&gt;
		end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- normalize ingredient name input, Lead Bar=&amp;gt;‡Lead Bar‡, Iron/Lead Bar =&amp;gt; ‡Iron Bar‡Lead Bar‡, Lead/Iron Bar =&amp;gt; ‡Iron Bar‡Lead Bar‡ ....&lt;br /&gt;
local normalize = function(name)&lt;br /&gt;
	local result = &#039;‡&#039;&lt;br /&gt;
	for k, v in ipairs(split(name)) do&lt;br /&gt;
		result = result .. itemname(v) .. &#039;‡&#039;&lt;br /&gt;
	end&lt;br /&gt;
	return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local escape = function(str)&lt;br /&gt;
	return str:gsub(&amp;quot;&#039;&amp;quot;, &amp;quot;\\&#039;&amp;quot;):gsub(&amp;quot;&amp;amp;#39;&amp;quot;, &amp;quot;\\&#039;&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
local enclose = function(str)&lt;br /&gt;
	return &amp;quot;&#039;&amp;quot; .. escape(str) .. &amp;quot;&#039;&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local getItemGroupName = function(item)&lt;br /&gt;
	if item == &#039;Wood&#039; or item == &#039;Ebonwood&#039; or item == &#039;Rich Mahogany&#039; or item == &#039;Pearlwood&#039; or item == &#039;Shadewood&#039;&lt;br /&gt;
	or item == &#039;Spooky Wood&#039; or item == &#039;Boreal Wood&#039; or item == &#039;Palm Wood&#039; or item == &#039;Yew Wood&#039; then&lt;br /&gt;
		return &#039;Any Wood&#039;&lt;br /&gt;
	elseif item == &#039;Iron Bar&#039; or item == &#039;Lead Bar&#039; then&lt;br /&gt;
		return &#039;Any Iron Bar&#039;&lt;br /&gt;
	elseif item == &#039;Sand Block&#039; or item == &#039;Pearlsand Block&#039; or item == &#039;Crimsand Block&#039; or item == &#039;Ebonsand Block&#039; or item == &#039;Hardened Sand Block&#039; then&lt;br /&gt;
		return &#039;Any Sand&#039;&lt;br /&gt;
	elseif item == &#039;Red Pressure Plate&#039; or item == &#039;Green Pressure Plate&#039; or item == &#039;Gray Pressure Plate&#039; or item == &#039;Brown Pressure Plate&#039;&lt;br /&gt;
	    or item == &#039;Blue Pressure Plate&#039; or item == &#039;Yellow Pressure Plate&#039; or item == &#039;Lihzahrd Pressure Plate&#039; then&lt;br /&gt;
		return &#039;Any Pressure Plate&#039;&lt;br /&gt;
	elseif item == &#039;Bird&#039; or item == &#039;Blue Jay&#039; or item == &#039;Cardinal&#039; then&lt;br /&gt;
		return &#039;Any Bird&#039;&lt;br /&gt;
	elseif item == &#039;Black Scorpion&#039; or item == &#039;Scorpion&#039; then&lt;br /&gt;
		return &#039;Any Scorpion&#039;&lt;br /&gt;
	elseif item == &#039;Squirrel&#039; or item == &#039;Red Squirrel&#039; then&lt;br /&gt;
		return &#039;Any Squirrel&#039;&lt;br /&gt;
	elseif item == &#039;Grubby&#039; or item == &#039;Sluggy&#039; or item == &#039;Buggy&#039; then&lt;br /&gt;
		return &#039;Any Bug&#039;&lt;br /&gt;
	elseif item == &#039;Mallard Duck&#039; or item == &#039;Duck&#039; then&lt;br /&gt;
		return &#039;Any Duck&#039;&lt;br /&gt;
	elseif item == &#039;Sulphur Butterfly&#039; or item == &#039;Julia Butterfly&#039; or item == &#039;Monarch Butterfly&#039; or item == &#039;Purple Emperor Butterfly&#039;&lt;br /&gt;
	    or item == &#039;Red Admiral Butterfly&#039; or item == &#039;Tree Nymph Butterfly&#039; or item == &#039;Ulysses Butterfly&#039; or item == &#039;Zebra Swallowtail Butterfly&#039; then&lt;br /&gt;
		return &#039;Any Butterfly&#039;&lt;br /&gt;
	elseif item == &#039;Firefly&#039; or item == &#039;Lightning Bug&#039; or item == &#039;Twinkler&#039; then&lt;br /&gt;
		return &#039;Any Firefly&#039;&lt;br /&gt;
	elseif item == &#039;Snail&#039; or item == &#039;Glowing Snail&#039; then&lt;br /&gt;
		return &#039;Any Snail&#039;&lt;br /&gt;
	elseif item == &#039;Apple&#039; or item == &#039;Apricot&#039; or item == &#039;Banana&#039; or item == &#039;Blackcurrant&#039; or item == &#039;Blood Orange&#039; or item == &#039;Cherry&#039; or item == &#039;Coconut&#039; &lt;br /&gt;
	    or item == &#039;Dragon Fruit&#039; or item == &#039;Elderberry&#039; or item == &#039;Grapefruit&#039; or item == &#039;Lemon&#039; or item == &#039;Mango&#039; or item == &#039;Peach&#039; &lt;br /&gt;
	    or item == &#039;Pineapple&#039; or item == &#039;Plum&#039; or item == &#039;Rambutan&#039; or item == &#039;Star Fruit&#039; then&lt;br /&gt;
		return &#039;Any Fruit&#039;&lt;br /&gt;
	elseif item == &#039;Black Dragonfly&#039; or item == &#039;Blue Dragonfly&#039; or item == &#039;Green Dragonfly&#039; or item == &#039;Orange Dragonfly&#039;&lt;br /&gt;
	    or item == &#039;Red Dragonfly&#039; or item == &#039;Yellow Dragonfly&#039; then&lt;br /&gt;
		return &#039;Any Dragonfly&#039;&lt;br /&gt;
	elseif item == &#039;Turtle&#039; or item == &#039;Jungle Turtle&#039; then&lt;br /&gt;
		return &#039;Any Turtle&#039;&lt;br /&gt;
	elseif item == &#039;Copper Bar&#039; or item == &#039;Tin Bar&#039; then&lt;br /&gt;
		return &#039;Any Copper Bar&#039;&lt;br /&gt;
	elseif item == &#039;Gold Ore&#039; or item == &#039;Platinum Ore&#039; then&lt;br /&gt;
		return &#039;Any Gold Ore&#039;&lt;br /&gt;
	elseif item == &#039;Gold Bar&#039; or item == &#039;Platinum Bar&#039; then&lt;br /&gt;
		return &#039;Any Gold Bar&#039;&lt;br /&gt;
	elseif item == &#039;Ebonstone Block&#039; or item == &#039;Crimstone Block&#039; then&lt;br /&gt;
		return &#039;Any Evil Block&#039;&lt;br /&gt;
	elseif item == &#039;Demonite Bar&#039; or item == &#039;Crimtane Bar&#039; then&lt;br /&gt;
		return &#039;Any Evil Bar&#039;&lt;br /&gt;
	elseif item == &#039;Cobalt Bar&#039; or item == &#039;Palladium Bar&#039; then&lt;br /&gt;
		return &#039;Any Cobalt Bar&#039;&lt;br /&gt;
	elseif item == &#039;Adamantite Bar&#039; or item == &#039;Titanium Bar&#039; then&lt;br /&gt;
		return &#039;Any Adamantite Bar&#039;&lt;br /&gt;
	elseif item == &#039;Shadow Scale&#039; or item == &#039;Tissue Sample&#039; then&lt;br /&gt;
		return &#039;Any Evil Flesh&#039;&lt;br /&gt;
	elseif item == &#039;Cursed Flame&#039; or item == &#039;Ichor&#039; then&lt;br /&gt;
		return &#039;Any Hardmode Evil Component&#039;&lt;br /&gt;
	elseif item == &#039;Mythril Anvil&#039; or item == &#039;Orichalcum Anvil&#039; then&lt;br /&gt;
		return &#039;Any Hardmode Anvil&#039;&lt;br /&gt;
	elseif item == &#039;Adamantite Forge&#039; or item == &#039;Titanium Forge&#039; then&lt;br /&gt;
		return &#039;Any Hardmode Forge&#039;&lt;br /&gt;
	elseif item == &#039;Ice Block&#039; or item == &#039;Purple Ice Block&#039; or item == &#039;Red Ice Block&#039; or item == &#039;Pink Ice Block&#039; then&lt;br /&gt;
		return &#039;Any Ice Block&#039;&lt;br /&gt;
	elseif item == &#039;Silt Block&#039; or item == &#039;Slush Block&#039; then&lt;br /&gt;
		return &#039;Any Silt Block&#039;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local normalizeStation = function(station)&lt;br /&gt;
	if station == &#039;Altar&#039; then&lt;br /&gt;
		station = &#039;Demon Altar&#039;&lt;br /&gt;
	end&lt;br /&gt;
	return station&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local criStr = function(args)&lt;br /&gt;
	local constraints = {}&lt;br /&gt;
	-- station = ? and station != ?&lt;br /&gt;
	local _station = trim(args[&#039;station&#039;] or &#039;&#039;)&lt;br /&gt;
	local _stationnot = trim(args[&#039;stationnot&#039;] or &#039;&#039;)&lt;br /&gt;
	local str = &#039;&#039;&lt;br /&gt;
	if _station ~= &#039;&#039; then&lt;br /&gt;
		for _, v in ipairs(explode(&#039;/&#039;, _station)) do&lt;br /&gt;
			if str ~= &#039;&#039; then&lt;br /&gt;
				str = str .. &#039; OR &#039;&lt;br /&gt;
			end&lt;br /&gt;
			str = str .. &amp;quot;station = &amp;quot; .. enclose(normalizeStation(v))&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if _stationnot ~= &#039;&#039; then&lt;br /&gt;
		if str ~= &#039;&#039; then&lt;br /&gt;
			str = &#039;(&#039; .. str .. &#039;)&#039;&lt;br /&gt;
		end&lt;br /&gt;
		for _, v in ipairs(explode(&#039;/&#039;, _stationnot)) do&lt;br /&gt;
			if str ~= &#039;&#039; then&lt;br /&gt;
				str = str .. &#039; AND &#039;&lt;br /&gt;
			end&lt;br /&gt;
			str = str .. &#039;station &amp;lt;&amp;gt; &#039; .. enclose(normalizeStation(v))&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	constraints[&#039;station&#039;] = str&lt;br /&gt;
	-- result = ? and result != ?&lt;br /&gt;
	local _result = trim(args[&#039;result&#039;] or &#039;&#039;)&lt;br /&gt;
	local _resultnot = trim(args[&#039;resultnot&#039;] or &#039;&#039;)&lt;br /&gt;
	local str = &#039;&#039;&lt;br /&gt;
	if _result ~= &#039;&#039; then&lt;br /&gt;
		for _, v in ipairs(explode(&#039;/&#039;, _result)) do&lt;br /&gt;
			if str ~= &#039;&#039; then&lt;br /&gt;
				str = str .. &#039; OR &#039;&lt;br /&gt;
			end&lt;br /&gt;
			if mw.ustring.sub(v, 1, 5) == &#039;LIKE &#039; then&lt;br /&gt;
				str = str .. &amp;quot;result LIKE &amp;quot; .. enclose(trim(mw.ustring.sub(v, 6)))&lt;br /&gt;
			else&lt;br /&gt;
				str = str .. &#039;result=&#039; .. enclose(v)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if _resultnot ~= &#039;&#039; then&lt;br /&gt;
		if str ~= &#039;&#039; then&lt;br /&gt;
			str = &#039;(&#039; .. str .. &#039;)&#039;&lt;br /&gt;
		end&lt;br /&gt;
		for _, v in ipairs(explode(&#039;/&#039;, _resultnot)) do&lt;br /&gt;
			if str ~= &#039;&#039; then&lt;br /&gt;
				str = str .. &#039; AND &#039;&lt;br /&gt;
			end&lt;br /&gt;
			if mw.ustring.sub(v, 1, 5) == &#039;LIKE &#039; then&lt;br /&gt;
				str = str .. &amp;quot;result NOT LIKE &amp;quot; .. enclose(trim(mw.ustring.sub(v, 6)))&lt;br /&gt;
			else&lt;br /&gt;
				str = str .. &#039;result &amp;lt;&amp;gt; &#039; .. enclose(v)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if str ~= &#039;&#039; then&lt;br /&gt;
		constraints[&#039;result&#039;] = str&lt;br /&gt;
	end&lt;br /&gt;
	-- ingredient = ?&lt;br /&gt;
	local _ingredient = trim(args[&#039;ingredient&#039;] or &#039;&#039;)&lt;br /&gt;
	if _ingredient ~= &#039;&#039; then&lt;br /&gt;
		local str = &#039;&#039;&lt;br /&gt;
		for _, v in ipairs(explode(&#039;/&#039;, _ingredient)) do&lt;br /&gt;
			if str ~= &#039;&#039; then&lt;br /&gt;
				str = str .. &#039; OR &#039;&lt;br /&gt;
			end&lt;br /&gt;
			if mw.ustring.sub(v, 1, 1) == &#039;#&#039; then&lt;br /&gt;
				str = str .. &amp;quot;ingredients HOLDS LIKE &#039;%‡&amp;quot; .. escape(mw.ustring.sub(v, 2)) .. &amp;quot;‡%&#039;&amp;quot;&lt;br /&gt;
			elseif mw.ustring.sub(v, 1, 5) == &#039;LIKE &#039; then&lt;br /&gt;
				str = str .. &amp;quot;ingredients HOLDS LIKE &#039;%‡&amp;quot; .. escape(trim(mw.ustring.sub(v, 6))) .. &amp;quot;‡%&#039;&amp;quot;&lt;br /&gt;
			else&lt;br /&gt;
				str = str .. &amp;quot;ingredients HOLDS LIKE &#039;%‡&amp;quot; .. escape(v) .. &amp;quot;‡%&#039;&amp;quot;&lt;br /&gt;
				-- any xxx&lt;br /&gt;
				local group = getItemGroupName(v)&lt;br /&gt;
				if group then&lt;br /&gt;
					str = str .. &amp;quot; OR ingredients HOLDS LIKE &#039;%‡&amp;quot; .. escape(group) .. &amp;quot;‡%&#039;&amp;quot;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		constraints[&#039;ingredient&#039;] = str&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local where = &#039;&#039;&lt;br /&gt;
	if constraints[&#039;station&#039;] then&lt;br /&gt;
		where = constraints[&#039;station&#039;]&lt;br /&gt;
	end&lt;br /&gt;
	if constraints[&#039;result&#039;] then&lt;br /&gt;
		if where ~= &#039;&#039; then&lt;br /&gt;
			where = where .. &#039; AND &#039;&lt;br /&gt;
		end&lt;br /&gt;
		where = where .. &#039;(&#039; .. constraints[&#039;result&#039;] .. &#039;)&#039;&lt;br /&gt;
	end&lt;br /&gt;
	if constraints[&#039;ingredient&#039;] then&lt;br /&gt;
		if where ~= &#039;&#039; then&lt;br /&gt;
			where = where .. &#039; AND &#039;&lt;br /&gt;
		end&lt;br /&gt;
		where = where .. &#039;(&#039; .. constraints[&#039;ingredient&#039;] .. &#039;)&#039;&lt;br /&gt;
	end&lt;br /&gt;
	-- query historical recipes?&lt;br /&gt;
	--[[&lt;br /&gt;
	if trim(args[&#039;historical&#039;] or &#039;&#039;) == &#039;only&#039; then&lt;br /&gt;
		where = where .. &#039; AND historical IS NOT NULL&#039;&lt;br /&gt;
	elseif trim(args[&#039;historical&#039;] or &#039;&#039;) ~= &#039;include&#039; then&lt;br /&gt;
		where = where .. &#039; AND historical IS NULL&#039;&lt;br /&gt;
	end&lt;br /&gt;
	]]&lt;br /&gt;
	return where&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local resultCell = function(row, needLink, template)&lt;br /&gt;
	local result, resultimage, resulttext, amount = row[&#039;result&#039;], row[&#039;resultimage&#039;], row[&#039;resulttext&#039;], row[&#039;amount&#039;]&lt;br /&gt;
	local str = &#039;&#039;&lt;br /&gt;
	local args = {anchor = resultanchor, nolink = not needLink, class=&#039;multi-line&#039;}&lt;br /&gt;
	if resultimage then&lt;br /&gt;
		args[&#039;image&#039;] = resultimage&lt;br /&gt;
	end&lt;br /&gt;
	if resulttext then&lt;br /&gt;
		args[2] = currentFrame:expandTemplate{ title = &#039;tr&#039;, args = {resulttext, lang=lang} }&lt;br /&gt;
	end&lt;br /&gt;
	str = str .. itemLink(result, args)&lt;br /&gt;
	if amount ~= &#039;1&#039; then&lt;br /&gt;
		str = str .. &#039; &amp;lt;span class=&amp;quot;note-text&amp;quot;&amp;gt;(&#039;..amount..&#039;)&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
	end&lt;br /&gt;
	--[[&lt;br /&gt;
	if historical == &amp;quot;1&amp;quot; then&lt;br /&gt;
		str = str .. l10n(&#039;historical_recipe_note&#039;)&lt;br /&gt;
	end&lt;br /&gt;
	]]&lt;br /&gt;
	if template then&lt;br /&gt;
		local template_str = currentFrame:expandTemplate{ title = template, args = {&lt;br /&gt;
				link = needLink,&lt;br /&gt;
				resultimage=resultimage, resulttext=resulttext,&lt;br /&gt;
				result=result, amount=amount,&lt;br /&gt;
		} }&lt;br /&gt;
		str = template_str:gsub(&#039;@@@@&#039;, str)&lt;br /&gt;
	end&lt;br /&gt;
	return str&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local ingredientsCell = function(args)&lt;br /&gt;
	local str = &#039;&amp;lt;ul&amp;gt;&#039;&lt;br /&gt;
	for _, v in ipairs(explode(&#039;^&#039;, args)) do&lt;br /&gt;
		str = str .. &#039;&amp;lt;li&amp;gt;&#039;&lt;br /&gt;
		local item, amount = v:match(&#039;^(.-)‡(.-)$&#039;)&lt;br /&gt;
		local s&lt;br /&gt;
		if item ~= nil then&lt;br /&gt;
			for _, itemname in ipairs(split(item)) do&lt;br /&gt;
				local actualitemname, itemtext&lt;br /&gt;
				if string.match(itemname, &#039;¦&#039;) ~= nil then&lt;br /&gt;
					actualitemname, itemtext = itemname:match(&#039;^(.-)¦(.-)$&#039;)&lt;br /&gt;
				end&lt;br /&gt;
				if s then&lt;br /&gt;
					s = s .. l10n(&#039;ingredients_sep&#039;)&lt;br /&gt;
				end&lt;br /&gt;
				if itemtext then&lt;br /&gt;
					local itemlinkoptions = {}&lt;br /&gt;
					itemlinkoptions[2] = currentFrame:expandTemplate{ title = &#039;tr&#039;, args = {itemtext, lang=lang} }&lt;br /&gt;
					s = (s or &#039;&#039;) .. itemLink(actualitemname, itemlinkoptions)&lt;br /&gt;
				else&lt;br /&gt;
					s = (s or &#039;&#039;) .. itemLink(itemname)&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			s = l10n(&#039;no_ingredients&#039;)&lt;br /&gt;
		end&lt;br /&gt;
		str = str .. s&lt;br /&gt;
		if amount ~= nil then&lt;br /&gt;
			if amount ~= &#039;1&#039; then&lt;br /&gt;
				str = str .. &#039; &amp;lt;span class=&amp;quot;note-text&amp;quot;&amp;gt;(&#039;..amount..&#039;)&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		str = str .. &#039;&amp;lt;/li&amp;gt;&#039;&lt;br /&gt;
	end&lt;br /&gt;
	str = str .. &#039;&amp;lt;/ul&amp;gt;&#039;&lt;br /&gt;
	return str&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local stationCell = function(station, options)&lt;br /&gt;
	options = options or {wrap = &#039;y&#039;}&lt;br /&gt;
	if station == &#039;By Hand&#039; then&lt;br /&gt;
		return l10n(&#039;station_by_hand&#039;)&lt;br /&gt;
	elseif station == &#039;Furnace&#039; or station == &#039;Work Bench&#039; or station == &#039;Sawmill&#039; or station == &amp;quot;Tinkerer&#039;s Workshop&amp;quot; or station == &#039;Dye Vat&#039;&lt;br /&gt;
	  or station == &#039;Loom&#039; or station == &#039;Keg&#039; or station == &#039;Hellforge&#039; or station == &#039;Bookcase&#039; or station == &#039;Imbuing Station&#039; or station == &#039;Lava&#039;&lt;br /&gt;
	  or station == &#039;Honey&#039; or station == &#039;Glass Kiln&#039; or station == &#039;Flesh Cloning Vat&#039; or station == &#039;Autohammer&#039; or station == &#039;Crystal Ball&#039;&lt;br /&gt;
	  or station == &#039;Ice Machine&#039; or station == &#039;Meat Grinder&#039; or station == &#039;Living Loom&#039; or station == &#039;Heavy Work Bench&#039; or station == &#039;Sky Mill&#039;&lt;br /&gt;
	  or station == &#039;Solidifier&#039; or station == &#039;Honey Dispenser&#039; or station == &#039;Bone Welder&#039; or station == &#039;Blend-O-Matic&#039; or station == &#039;Steampunk Boiler&#039;&lt;br /&gt;
	  or station == &#039;Ancient Manipulator&#039; or station == &#039;Shimmer Transmutation&#039; then&lt;br /&gt;
		return itemLink(station, options)&lt;br /&gt;
	elseif station == &#039;Iron Anvil&#039; then&lt;br /&gt;
		return itemLink(&#039;Iron Anvil&#039;, options) .. l10n(&#039;station_sep_or&#039;) .. itemLink(&#039;Lead Anvil&#039;, options)&lt;br /&gt;
	elseif station == &#039;Adamantite Forge&#039; then&lt;br /&gt;
		return itemLink(&#039;Adamantite Forge&#039;, options) .. l10n(&#039;station_sep_or&#039;) .. itemLink(&#039;Titanium Forge&#039;, options)&lt;br /&gt;
	elseif station == &#039;Mythril Anvil&#039; then&lt;br /&gt;
		return itemLink(&#039;Mythril Anvil&#039;, options) .. l10n(&#039;station_sep_or&#039;) .. itemLink(&#039;Orichalcum Anvil&#039;, options)&lt;br /&gt;
	elseif station == &#039;Demon Altar&#039; then&lt;br /&gt;
		return itemLink(&#039;Demon Altar&#039;, options) .. l10n(&#039;station_sep_or&#039;) .. itemLink(&#039;Crimson Altar&#039;, options)&lt;br /&gt;
	elseif station == &#039;Cooking Pot&#039; then&lt;br /&gt;
		return itemLink(&#039;Cooking Pot&#039;, options) .. l10n(&#039;station_sep_or&#039;) .. itemLink(&#039;Cauldron&#039;, options)&lt;br /&gt;
	elseif station == &#039;Placed Bottle&#039; then&lt;br /&gt;
		return itemLink(&#039;Placed Bottle&#039;, options) .. l10n(&#039;station_sep_or&#039;) .. itemLink(&#039;Alchemy Table&#039;, options)&lt;br /&gt;
	elseif station == &#039;Water&#039; then&lt;br /&gt;
		return itemLink(&#039;Water&#039;, options) .. l10n(&#039;station_sep_or&#039;) .. itemLink(&#039;Sink&#039;, options)&lt;br /&gt;
	elseif station == &#039;Table and Chair&#039; then&lt;br /&gt;
		return itemLink(&#039;Table&#039;, options) .. l10n(&#039;station_sep_and&#039;) .. itemLink(&#039;Chair&#039;, options)&lt;br /&gt;
	elseif station == &#039;Work Bench and Chair&#039; then&lt;br /&gt;
		return itemLink(&#039;Work Bench&#039;, options) .. l10n(&#039;station_sep_and&#039;) .. itemLink(&#039;Chair&#039;, options)&lt;br /&gt;
	elseif station == &#039;Crystal Ball and Lava&#039; then&lt;br /&gt;
		return itemLink(&#039;Crystal Ball&#039;, options) .. l10n(&#039;station_sep_and&#039;) .. itemLink(&#039;Lava&#039;, options)&lt;br /&gt;
	elseif station == &#039;Crystal Ball and Honey&#039; then&lt;br /&gt;
		return itemLink(&#039;Crystal Ball&#039;, options) .. l10n(&#039;station_sep_and&#039;) .. itemLink(&#039;Honey&#039;, options)&lt;br /&gt;
	elseif station == &#039;Crystal Ball and Water&#039; then&lt;br /&gt;
		return itemLink(&#039;Crystal Ball&#039;, options) .. l10n(&#039;station_sep_and&#039;).. &#039;&amp;lt;span class=&amp;quot;water&amp;quot;&amp;gt;&#039; .. itemLink(&#039;Water&#039;, options) .. l10n(&#039;station_sep_or&#039;) .. itemLink(&#039;Sink&#039;, options) .. &#039;&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
	elseif station == &#039;Sky Mill and Water&#039; then&lt;br /&gt;
		return itemLink(&#039;Sky Mill&#039;, options) .. l10n(&#039;station_sep_and&#039;).. &#039;&amp;lt;span  class=&amp;quot;water&amp;quot;&amp;gt;&#039; .. itemLink(&#039;Water&#039;, options) .. l10n(&#039;station_sep_or&#039;) .. itemLink(&#039;Sink&#039;, options) .. &#039;&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
	elseif station == &#039;Sky Mill and Snow Biome&#039; then&lt;br /&gt;
		return itemLink(&#039;Sky Mill&#039;, options) .. l10n(&#039;station_sep_and&#039;).. l10n(&#039;snow_biome&#039;)&lt;br /&gt;
	elseif station == &amp;quot;Heavy Work Bench and Ecto Mist&amp;quot; then&lt;br /&gt;
		return itemLink(&amp;quot;Heavy Work Bench&amp;quot;, options) .. l10n(&#039;station_sep_and&#039;) .. itemLink(&#039;Ecto Mist&#039;, {mode = &#039;text&#039;})&lt;br /&gt;
	elseif station == &#039;Placed Bottle only&#039; then&lt;br /&gt;
		return itemLink(&#039;Placed Bottle&#039;, options)&lt;br /&gt;
	elseif station == &#039;Alchemy Table only&#039; then&lt;br /&gt;
		return itemLink(&#039;Alchemy Table&#039;, options)&lt;br /&gt;
	else&lt;br /&gt;
		return station&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
-- for extract.&lt;br /&gt;
local compactStation = function(station)&lt;br /&gt;
	if station == &#039;By Hand&#039; then&lt;br /&gt;
		return &#039;(&#039; .. l10n(&#039;station_by_hand&#039;) .. &#039;)&#039;&lt;br /&gt;
	elseif station == &#039;Furnace&#039; or station == &#039;Work Bench&#039; or station == &#039;Sawmill&#039; or station == &amp;quot;Tinkerer&#039;s Workshop&amp;quot; or station == &#039;Dye Vat&#039;&lt;br /&gt;
	  or station == &#039;Loom&#039; or station == &#039;Keg&#039; or station == &#039;Hellforge&#039; or station == &#039;Bookcase&#039; or station == &#039;Imbuing Station&#039; or station == &#039;Lava&#039;&lt;br /&gt;
	  or station == &#039;Honey&#039; or station == &#039;Glass Kiln&#039; or station == &#039;Flesh Cloning Vat&#039; or station == &#039;Autohammer&#039; or station == &#039;Crystal Ball&#039;&lt;br /&gt;
	  or station == &#039;Ice Machine&#039; or station == &#039;Meat Grinder&#039; or station == &#039;Living Loom&#039; or station == &#039;Heavy Work Bench&#039; or station == &#039;Sky Mill&#039;&lt;br /&gt;
	  or station == &#039;Solidifier&#039; or station == &#039;Honey Dispenser&#039; or station == &#039;Bone Welder&#039; or station == &#039;Blend-O-Matic&#039; or station == &#039;Steampunk Boiler&#039;&lt;br /&gt;
 	  or station == &#039;Ancient Manipulator&#039; or station == &#039;Lihzahrd Furnace&#039; or station == &#039;Thorium Anvil&#039; or station == &#039;Arcane Armor Fabricator&#039; or station == &#039;Soul Forge&#039; then&lt;br /&gt;
		return l10n(&#039;compact_before&#039;) .. itemLink(station, {mode = &#039;image&#039;})&lt;br /&gt;
	elseif station == &#039;Iron Anvil&#039; then&lt;br /&gt;
		return l10n(&#039;compact_before&#039;) .. itemLink(&#039;Iron Anvil&#039;, {mode = &#039;image&#039;}) .. &amp;quot;&amp;amp;thinsp;/&amp;amp;thinsp;&amp;quot; .. itemLink(&#039;Lead Anvil&#039;, {mode = &#039;image&#039;})&lt;br /&gt;
	elseif station == &#039;Adamantite Forge&#039; then&lt;br /&gt;
		return l10n(&#039;compact_before&#039;) .. itemLink(&#039;Adamantite Forge&#039;, {mode = &#039;image&#039;}) .. &amp;quot;&amp;amp;thinsp;/&amp;amp;thinsp;&amp;quot; .. itemLink(&#039;Titanium Forge&#039;, {mode = &#039;image&#039;})&lt;br /&gt;
	elseif station == &#039;Mythril Anvil&#039; then&lt;br /&gt;
		return l10n(&#039;compact_before&#039;) .. itemLink(&#039;Mythril Anvil&#039;, {mode = &#039;image&#039;}) .. &amp;quot;&amp;amp;thinsp;/&amp;amp;thinsp;&amp;quot; .. itemLink(&#039;Orichalcum Anvil&#039;, {mode = &#039;image&#039;})&lt;br /&gt;
	elseif station == &#039;Demon Altar&#039; then&lt;br /&gt;
		return l10n(&#039;compact_before&#039;) .. itemLink(&#039;Demon Altar&#039;, {mode = &#039;image&#039;}) .. &amp;quot;&amp;amp;thinsp;/&amp;amp;thinsp;&amp;quot; .. itemLink(&#039;Crimson Altar&#039;, {mode = &#039;image&#039;})&lt;br /&gt;
	elseif station == &#039;Cooking Pot&#039; then&lt;br /&gt;
		return l10n(&#039;compact_before&#039;) .. itemLink(&#039;Cooking Pot&#039;, {mode = &#039;image&#039;}) .. &amp;quot;&amp;amp;thinsp;/&amp;amp;thinsp;&amp;quot; .. itemLink(&#039;Cauldron&#039;, {mode = &#039;image&#039;})&lt;br /&gt;
	elseif station == &#039;Placed Bottle&#039; then&lt;br /&gt;
		return l10n(&#039;compact_before&#039;) .. itemLink(&#039;Placed Bottle&#039;, {mode = &#039;image&#039;}) .. &amp;quot;&amp;amp;thinsp;/&amp;amp;thinsp;&amp;quot; .. itemLink(&#039;Alchemy Table&#039;, {mode = &#039;image&#039;})&lt;br /&gt;
	elseif station == &#039;Water&#039; then&lt;br /&gt;
		return l10n(&#039;compact_before&#039;) .. itemLink(&#039;Water&#039;, {mode = &#039;image&#039;}) .. &amp;quot;&amp;amp;thinsp;/&amp;amp;thinsp;&amp;quot; .. itemLink(&#039;Sink&#039;, {mode = &#039;image&#039;})&lt;br /&gt;
	elseif station == &#039;Table and Chair&#039; then&lt;br /&gt;
		return l10n(&#039;compact_before&#039;) .. itemLink(&#039;Table&#039;, {mode = &#039;image&#039;}) .. &amp;quot;&amp;amp;thinsp;&amp;amp;amp;&amp;amp;thinsp;&amp;quot; .. itemLink(&#039;Chair&#039;, {mode = &#039;image&#039;})&lt;br /&gt;
	elseif station == &#039;Work Bench and Chair&#039; then&lt;br /&gt;
		return l10n(&#039;compact_before&#039;) .. itemLink(&#039;Work Bench&#039;, {mode = &#039;image&#039;}) .. &amp;quot;&amp;amp;thinsp;&amp;amp;amp;&amp;amp;thinsp;&amp;quot; .. itemLink(&#039;Chair&#039;, {mode = &#039;image&#039;})&lt;br /&gt;
	elseif station == &#039;Crystal Ball and Lava&#039; then&lt;br /&gt;
		return l10n(&#039;compact_before&#039;) .. itemLink(&#039;Crystal Ball&#039;, {mode = &#039;image&#039;}) .. &amp;quot;&amp;amp;thinsp;&amp;amp;amp;&amp;amp;thinsp;&amp;quot; .. itemLink(&#039;Lava&#039;, {mode = &#039;image&#039;})&lt;br /&gt;
	elseif station == &#039;Crystal Ball and Honey&#039; then&lt;br /&gt;
		return l10n(&#039;compact_before&#039;) .. itemLink(&#039;Crystal Ball&#039;, {mode = &#039;image&#039;}) .. &amp;quot;&amp;amp;thinsp;&amp;amp;amp;&amp;amp;thinsp;&amp;quot; .. itemLink(&#039;Honey&#039;, {mode = &#039;image&#039;})&lt;br /&gt;
	elseif station == &#039;Crystal Ball and Water&#039; then&lt;br /&gt;
		return l10n(&#039;compact_before&#039;) .. itemLink(&#039;Crystal Ball&#039;, {mode = &#039;image&#039;}) .. &amp;quot;&amp;amp;thinsp;&amp;amp;amp;&amp;amp;thinsp;&amp;quot;.. itemLink(&#039;Water&#039;, {mode = &#039;image&#039;}) .. &amp;quot; / &amp;quot; ..&lt;br /&gt;
		itemLink(&#039;Crystal Ball&#039;, {mode = &#039;image&#039;}) .. &amp;quot;&amp;amp;thinsp;&amp;amp;amp;&amp;amp;thinsp;&amp;quot; .. itemLink(&#039;Sink&#039;, {mode = &#039;image&#039;})&lt;br /&gt;
	elseif station == &#039;Sky Mill and Water&#039; then&lt;br /&gt;
		return l10n(&#039;compact_before&#039;) .. itemLink(&#039;Sky Mill&#039;, {mode = &#039;image&#039;}) .. &amp;quot;&amp;amp;thinsp;&amp;amp;amp;&amp;amp;thinsp;&amp;quot;.. itemLink(&#039;Water&#039;, {mode = &#039;image&#039;}) .. &amp;quot; / &amp;quot; .. &lt;br /&gt;
		itemLink(&#039;Sky Mill&#039;, {mode = &#039;image&#039;}) .. &amp;quot;&amp;amp;thinsp;&amp;amp;amp;&amp;amp;thinsp;&amp;quot;..  itemLink(&#039;Sink&#039;, {mode = &#039;image&#039;})&lt;br /&gt;
	elseif station == &#039;Sky Mill and Snow Biome&#039; then&lt;br /&gt;
		return l10n(&#039;compact_before&#039;) .. itemLink(&#039;Sky Mill&#039;, {mode = &#039;image&#039;}) .. &amp;quot;&amp;amp;thinsp;&amp;amp;amp;&amp;amp;thinsp;&amp;quot;.. l10n(&#039;compact_snow_biome&#039;)&lt;br /&gt;
	elseif station == &amp;quot;Heavy Work Bench and Ecto Mist&amp;quot; then&lt;br /&gt;
		return l10n(&#039;compact_before&#039;) .. itemLink(&amp;quot;Heavy Work Bench&amp;quot;, options) .. l10n(&#039;station_sep_and&#039;) .. itemLink(&#039;Ecto Mist&#039;, {mode = &#039;text&#039;})&lt;br /&gt;
	elseif station == &#039;Placed Bottle only&#039; then&lt;br /&gt;
		return l10n(&#039;compact_before&#039;) .. itemLink(&#039;Placed Bottle&#039;, {mode = &#039;image&#039;})&lt;br /&gt;
	elseif station == &#039;Alchemy Table only&#039; then&lt;br /&gt;
		return l10n(&#039;compact_before&#039;) .. itemLink(&#039;Alchemy Table&#039;, {mode = &#039;image&#039;})&lt;br /&gt;
	else&lt;br /&gt;
		return l10n(&#039;compact_before&#039;) .. station&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local getFlags = function(args)&lt;br /&gt;
	local needCate = 1&lt;br /&gt;
	local needLink = true&lt;br /&gt;
	local _cate = trim(args[&#039;cate&#039;] or &#039;&#039;)&lt;br /&gt;
	if _cate == &#039;force&#039; or _cate == &#039;all&#039; then&lt;br /&gt;
		needCate = 2&lt;br /&gt;
	elseif _cate == &#039;n&#039; or _cate == &#039;no&#039; then&lt;br /&gt;
		needCate = nil&lt;br /&gt;
	end&lt;br /&gt;
	local _link = trim(args[&#039;link&#039;] or &#039;&#039;)&lt;br /&gt;
	if _link == &#039;y&#039; or _link == &#039;yes&#039; or _link == &#039;force&#039; then&lt;br /&gt;
		needLink = true&lt;br /&gt;
	elseif _link == &#039;n&#039; or _link == &#039;no&#039; then&lt;br /&gt;
		needLink = false&lt;br /&gt;
	end&lt;br /&gt;
	return needCate, needLink&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local addCate, cateStr -- for table body. init in p.query&lt;br /&gt;
&lt;br /&gt;
local tableStart = function(title, withStation)&lt;br /&gt;
	local header_&lt;br /&gt;
	local str = &#039;&amp;lt;div class=&amp;quot;crafts &#039;.. (getArg(&#039;class&#039;) or &#039;&#039;)&lt;br /&gt;
	local _id = (getArg(&#039;id&#039;) or &#039;&#039;)&lt;br /&gt;
	if _id ~= &#039;&#039; then&lt;br /&gt;
		str = str .. &#039;&amp;quot; id=&amp;quot;&#039;.. _id&lt;br /&gt;
	end&lt;br /&gt;
	local _css = (getArg(&#039;css&#039;) or getArg(&#039;style&#039;) or &#039;&#039;)&lt;br /&gt;
	if _css ~= &#039;&#039; then&lt;br /&gt;
		str = str .. &#039;&amp;quot; style=&amp;quot;&#039;.. _css&lt;br /&gt;
	end&lt;br /&gt;
	str = str .. &#039;&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;wrap&amp;quot;&amp;gt;&amp;lt;table &#039;&lt;br /&gt;
	if (getArg(&#039;sortable&#039;) or &#039;y&#039;):sub(1,1) ~= &#039;n&#039; then&lt;br /&gt;
		str = str .. &#039;class=&amp;quot;sortable&amp;quot; &#039;&lt;br /&gt;
	end&lt;br /&gt;
	str = str .. &#039;cellpadding=&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot;&amp;gt;&#039;&lt;br /&gt;
	if title ~= &#039;&#039; then&lt;br /&gt;
		str = str .. &#039;&amp;lt;caption&amp;gt;&#039; .. title .. &#039;&amp;lt;/caption&amp;gt;&#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local _i, _field&lt;br /&gt;
	str = str .. &#039;&amp;lt;tr&amp;gt;&#039;&lt;br /&gt;
	_i = 1&lt;br /&gt;
	_field = &#039;col-A-1&#039;&lt;br /&gt;
	while getArg(_field) do&lt;br /&gt;
		if not extCols_A then&lt;br /&gt;
			extCols_A = {}&lt;br /&gt;
		end&lt;br /&gt;
		table.insert(extCols_A, _field)&lt;br /&gt;
		str = str .. &#039;&amp;lt;th&amp;gt;&#039;.. getArg(_field) ..&#039;&amp;lt;/th&amp;gt;&#039;&lt;br /&gt;
		_i = _i + 1&lt;br /&gt;
		_field = &#039;col-A-&#039; .. _i&lt;br /&gt;
	end&lt;br /&gt;
	str = str .. &#039;&amp;lt;th class=&amp;quot;result&amp;quot;&amp;gt;&#039; .. (getArg(&#039;header-result&#039;) or l10n(&#039;header_result&#039;)) .. &#039;&amp;lt;/th&amp;gt;&#039;&lt;br /&gt;
	_i = 1&lt;br /&gt;
	_field = &#039;col-B-1&#039;&lt;br /&gt;
	while getArg(_field) do&lt;br /&gt;
		if not extCols_B then&lt;br /&gt;
			extCols_B = {}&lt;br /&gt;
		end&lt;br /&gt;
		table.insert(extCols_B, _field)&lt;br /&gt;
		str = str .. &#039;&amp;lt;th&amp;gt;&#039;.. getArg(_field) ..&#039;&amp;lt;/th&amp;gt;&#039;&lt;br /&gt;
		_i = _i + 1&lt;br /&gt;
		_field = &#039;col-B-&#039; .. _i&lt;br /&gt;
	end&lt;br /&gt;
	str = str .. &#039;&amp;lt;th class=&amp;quot;ingredients&amp;quot;&amp;gt;&#039; .. (getArg(&#039;header-ingredients&#039;) or l10n(&#039;header_ingredients&#039;)) .. &#039;&amp;lt;/th&amp;gt;&#039;&lt;br /&gt;
	_i = 1&lt;br /&gt;
	_field = &#039;col-C-1&#039;&lt;br /&gt;
	while getArg(_field) do&lt;br /&gt;
		if not extCols_C then&lt;br /&gt;
			extCols_C = {}&lt;br /&gt;
		end&lt;br /&gt;
		table.insert(extCols_C, _field)&lt;br /&gt;
		str = str .. &#039;&amp;lt;th&amp;gt;&#039;.. getArg(_field) ..&#039;&amp;lt;/th&amp;gt;&#039;&lt;br /&gt;
		_i = _i + 1&lt;br /&gt;
		_field = &#039;col-C-&#039; .. _i&lt;br /&gt;
	end&lt;br /&gt;
	if withStation then&lt;br /&gt;
		_i = 1&lt;br /&gt;
		_field = &#039;station-col-before-1&#039;&lt;br /&gt;
		while getArg(_field) do&lt;br /&gt;
			if not extCols_stationBefore then&lt;br /&gt;
				extCols_stationBefore = {}&lt;br /&gt;
			end&lt;br /&gt;
			table.insert(extCols_stationBefore, _field)&lt;br /&gt;
			str = str .. &#039;&amp;lt;th class=&amp;quot;station&amp;quot;&amp;gt;&#039;.. getArg(_field) ..&#039;&amp;lt;/th&amp;gt;&#039;&lt;br /&gt;
			_i = _i + 1&lt;br /&gt;
			_field = &#039;station-col-before-&#039; .. _i&lt;br /&gt;
		end&lt;br /&gt;
		str = str .. &#039;&amp;lt;th class=&amp;quot;station&amp;quot;&amp;gt;&#039; .. (getArg(&#039;header-station&#039;) or l10n(&#039;header_station&#039;)) .. &#039;&amp;lt;/th&amp;gt;&#039;&lt;br /&gt;
		_i = 1&lt;br /&gt;
		_field = &#039;station-col-after-1&#039;&lt;br /&gt;
		while getArg(_field) do&lt;br /&gt;
			if not extCols_stationAfter then&lt;br /&gt;
				extCols_stationAfter = {}&lt;br /&gt;
			end&lt;br /&gt;
			table.insert(extCols_stationAfter, _field)&lt;br /&gt;
			str = str .. &#039;&amp;lt;th class=&amp;quot;station&amp;quot;&amp;gt;&#039;.. getArg(_field) ..&#039;&amp;lt;/th&amp;gt;&#039;&lt;br /&gt;
			_i = _i + 1&lt;br /&gt;
			_field = &#039;station-col-after-&#039; .. _i&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	_i = 1&lt;br /&gt;
	_field = &#039;col-D-1&#039;&lt;br /&gt;
	while getArg(_field) do&lt;br /&gt;
		if not extCols_D then&lt;br /&gt;
			extCols_D = {}&lt;br /&gt;
		end&lt;br /&gt;
		table.insert(extCols_D, _field)&lt;br /&gt;
		str = str .. &#039;&amp;lt;th&amp;gt;&#039;.. getArg(_field) ..&#039;&amp;lt;/th&amp;gt;&#039;&lt;br /&gt;
		_i = _i + 1&lt;br /&gt;
		_field = &#039;col-D-&#039; .. _i&lt;br /&gt;
	end&lt;br /&gt;
	str = str .. &#039;&amp;lt;/tr&amp;gt;&#039;&lt;br /&gt;
	return str&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local tableEnd = function(rows_count, expectedrows)&lt;br /&gt;
	local str = &#039;&amp;lt;/table&amp;gt;&amp;lt;div style=&amp;quot;display: none&amp;quot;&amp;gt;total: &#039;..rows_count..&#039; row(s)&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
	if expectedrows and rows_count ~= expectedrows then&lt;br /&gt;
		str = str .. &#039;[[Category:&#039;.. l10n(&#039;cate_unexpected_rows_count&#039;) .. &#039;]]&#039;&lt;br /&gt;
	end&lt;br /&gt;
	if not expectedrows and rows_count == 0 then&lt;br /&gt;
		str = str .. &#039;[[Category:&#039;.. l10n(&#039;cate_no_row&#039;) .. &#039;]]&#039;&lt;br /&gt;
	end&lt;br /&gt;
	return str&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local tableRow = function(str, row, current_station, station_count, rows_count, withStation, needCate, needLink, needGroup, current_result, result_count, current_result_ext, result_ext_count, template, stationGroup)&lt;br /&gt;
	local str_w = &#039;&#039; -- before result col&lt;br /&gt;
	local str_x = &#039;&#039; -- between result and ingredients cols&lt;br /&gt;
	local str_y = &#039;&#039; -- between ingredients and station cols&lt;br /&gt;
	local str_z = &#039;&#039; -- after station&lt;br /&gt;
	local str_resultCell = &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
	local result_index = getArg(&#039;result-index-#&#039;..rows_count) or getArg(&#039;result-index-&#039;..row[&#039;result&#039;])&lt;br /&gt;
&lt;br /&gt;
	str = str .. &#039;&amp;lt;tr data-rowid=&amp;quot;&#039;..tostring(rows_count)..&#039;&amp;quot;&amp;gt;&#039;&lt;br /&gt;
&lt;br /&gt;
	if needGroup then&lt;br /&gt;
		local result = row[&#039;result&#039;]..&#039;|&#039;..(row[&#039;resultimage&#039;] or &amp;quot;&amp;quot;)..&#039;|&#039;..(row[&#039;resulttext&#039;] or &amp;quot;&amp;quot;)..&#039;|&#039;..(row[&#039;amount&#039;] or &amp;quot;&amp;quot;)&lt;br /&gt;
		-- grouping result col&lt;br /&gt;
		if current_result == result then -- is same group ??&lt;br /&gt;
			result_count = result_count + 1&lt;br /&gt;
		else&lt;br /&gt;
			--new group:&lt;br /&gt;
			-- rowspan value for prev group, if needed.&lt;br /&gt;
			if result_count then&lt;br /&gt;
				str = str:gsub(&amp;quot;yyyrowspanyyy&amp;quot;, tostring(result_count))&lt;br /&gt;
			end&lt;br /&gt;
			-- begin this group&lt;br /&gt;
			current_result = result&lt;br /&gt;
			result_count = 1&lt;br /&gt;
			str_resultCell = &#039;&amp;lt;td class=&amp;quot;result&amp;quot; rowspan=&amp;quot;yyyrowspanyyy&amp;quot;&amp;gt;&#039;.. resultCell(row, needLink, template).. &#039;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
		end&lt;br /&gt;
		-- grouping ext cols&lt;br /&gt;
		if result_index and (current_result_ext == result_index) then -- is same group ??&lt;br /&gt;
			result_ext_count = result_ext_count + 1&lt;br /&gt;
		else&lt;br /&gt;
			--new group:&lt;br /&gt;
			-- rowspan value for prev group, if needed.&lt;br /&gt;
			if result_ext_count then&lt;br /&gt;
				str = str:gsub(&amp;quot;zzzrowspanzzz&amp;quot;, tostring(result_ext_count))&lt;br /&gt;
			end&lt;br /&gt;
			-- begin this group&lt;br /&gt;
			current_result_ext = result_index&lt;br /&gt;
			result_ext_count = 1&lt;br /&gt;
			if extCols_A then&lt;br /&gt;
				for _, v in ipairs(extCols_A) do&lt;br /&gt;
					if result_index then&lt;br /&gt;
						str_w = str_w .. &#039;&amp;lt;td class=&amp;quot;&#039;..v..&#039;&amp;quot; rowspan=&amp;quot;zzzrowspanzzz&amp;quot;&amp;gt;&#039; .. (getArg(result_index .. &#039;-row-&#039; .. v) or &#039;&#039;) .. &#039;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
					else&lt;br /&gt;
						str_w = str_w .. &#039;&amp;lt;td class=&amp;quot;&#039;..v..&#039;&amp;quot; rowspan=&amp;quot;zzzrowspanzzz&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			if extCols_B then&lt;br /&gt;
				for _, v in ipairs(extCols_B) do&lt;br /&gt;
					if result_index then&lt;br /&gt;
						str_x = str_x .. &#039;&amp;lt;td class=&amp;quot;&#039;..v..&#039;&amp;quot; rowspan=&amp;quot;zzzrowspanzzz&amp;quot;&amp;gt;&#039; .. (getArg(result_index .. &#039;-row-&#039; .. v) or &#039;&#039;) .. &#039;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
					else&lt;br /&gt;
						str_x = str_x .. &#039;&amp;lt;td class=&amp;quot;&#039;..v..&#039;&amp;quot; rowspan=&amp;quot;zzzrowspanzzz&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			if extCols_C then&lt;br /&gt;
				for _, v in ipairs(extCols_C) do&lt;br /&gt;
					if result_index then&lt;br /&gt;
						str_y = str_y .. &#039;&amp;lt;td class=&amp;quot;&#039;..v..&#039;&amp;quot; rowspan=&amp;quot;zzzrowspanzzz&amp;quot;&amp;gt;&#039; .. (getArg(result_index .. &#039;-row-&#039; .. v) or &#039;&#039;) .. &#039;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
					else&lt;br /&gt;
						str_y = str_y .. &#039;&amp;lt;td class=&amp;quot;&#039;..v..&#039;&amp;quot; rowspan=&amp;quot;zzzrowspanzzz&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			if extCols_D then&lt;br /&gt;
				for _, v in ipairs(extCols_D) do&lt;br /&gt;
					if result_index then&lt;br /&gt;
						str_z = str_z .. &#039;&amp;lt;td class=&amp;quot;&#039;..v..&#039;&amp;quot; rowspan=&amp;quot;zzzrowspanzzz&amp;quot;&amp;gt;&#039; .. (getArg(result_index .. &#039;-row-&#039; .. v) or &#039;&#039;) .. &#039;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
					else&lt;br /&gt;
						str_z = str_z .. &#039;&amp;lt;td class=&amp;quot;&#039;..v..&#039;&amp;quot; rowspan=&amp;quot;zzzrowspanzzz&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		if extCols_A then&lt;br /&gt;
			for _, v in ipairs(extCols_A) do&lt;br /&gt;
				if result_index then&lt;br /&gt;
					str_w = str_w .. &#039;&amp;lt;td class=&amp;quot;&#039;..v..&#039;&amp;quot;&amp;gt;&#039; .. (getArg(result_index .. &#039;-row-&#039; .. v) or &#039;&#039;) .. &#039;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
				else&lt;br /&gt;
					str_w = str_w .. &#039;&amp;lt;td class=&amp;quot;&#039;..v..&#039;&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if extCols_B then&lt;br /&gt;
			for _, v in ipairs(extCols_B) do&lt;br /&gt;
				if result_index then&lt;br /&gt;
					str_x = str_x .. &#039;&amp;lt;td class=&amp;quot;&#039;..v..&#039;&amp;quot;&amp;gt;&#039; .. (getArg(result_index .. &#039;-row-&#039; .. v) or &#039;&#039;) .. &#039;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
				else&lt;br /&gt;
					str_x = str_x .. &#039;&amp;lt;td class=&amp;quot;&#039;..v..&#039;&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if extCols_C then&lt;br /&gt;
			for _, v in ipairs(extCols_C) do&lt;br /&gt;
				if result_index then&lt;br /&gt;
					str_y = str_y .. &#039;&amp;lt;td class=&amp;quot;&#039;..v..&#039;&amp;quot;&amp;gt;&#039; .. (getArg(result_index .. &#039;-row-&#039; .. v) or &#039;&#039;) .. &#039;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
				else&lt;br /&gt;
					str_y = str_y .. &#039;&amp;lt;td class=&amp;quot;&#039;..v..&#039;&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if extCols_D then&lt;br /&gt;
			for _, v in ipairs(extCols_D) do&lt;br /&gt;
				if result_index then&lt;br /&gt;
					str_z = str_z .. &#039;&amp;lt;td class=&amp;quot;&#039;..v..&#039;&amp;quot;&amp;gt;&#039; .. (getArg(result_index .. &#039;-row-&#039; .. v) or &#039;&#039;) .. &#039;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
				else&lt;br /&gt;
					str_z = str_z .. &#039;&amp;lt;td class=&amp;quot;&#039;..v..&#039;&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		str_resultCell = &#039;&amp;lt;td class=&amp;quot;result&amp;quot;&amp;gt;&#039;.. resultCell(row, needLink, template).. &#039;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	str = str .. str_w .. str_resultCell .. str_x .. &#039;&amp;lt;td class=&amp;quot;ingredients&amp;quot;&amp;gt;&#039; .. ingredientsCell(row[&#039;args&#039;] or &amp;quot;&amp;quot;).. &#039;&amp;lt;/td&amp;gt;&#039; .. str_y&lt;br /&gt;
&lt;br /&gt;
	if withStation then&lt;br /&gt;
		local station = row[&#039;station&#039;]&lt;br /&gt;
		if stationGroup then&lt;br /&gt;
			if current_station == station then -- is same group ??&lt;br /&gt;
				station_count = station_count + 1&lt;br /&gt;
			else&lt;br /&gt;
				--new group:&lt;br /&gt;
				-- rowspan value for prev group, if needed.&lt;br /&gt;
				if station_count then&lt;br /&gt;
					str = str:gsub(&amp;quot;xxxrowspanxxx&amp;quot;, tostring(station_count))&lt;br /&gt;
				end&lt;br /&gt;
				-- begin this group&lt;br /&gt;
				current_station = station&lt;br /&gt;
				station_count = 1&lt;br /&gt;
				local station_index = getArg(&#039;station-index-&#039;..station)&lt;br /&gt;
				-- station before:&lt;br /&gt;
				if extCols_stationBefore then&lt;br /&gt;
					for _, v in ipairs(extCols_stationBefore) do&lt;br /&gt;
						if station_index then&lt;br /&gt;
							str = str .. &#039;&amp;lt;td class=&amp;quot;station &#039;..v..&#039;&amp;quot; rowspan=&amp;quot;xxxrowspanxxx&amp;quot;&amp;gt;&#039; .. (getArg(station_index .. &#039;-row-&#039; .. v) or &#039;&#039;) .. &#039;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
						else&lt;br /&gt;
							str = str .. &#039;&amp;lt;td class=&amp;quot;station &#039;..v..&#039;&amp;quot; rowspan=&amp;quot;xxxrowspanxxx&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
				str = str .. &#039;&amp;lt;td class=&amp;quot;station&amp;quot; rowspan=&amp;quot;xxxrowspanxxx&amp;quot;&amp;gt;&#039;.. stationCell(station) ..&#039;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
				-- station after:&lt;br /&gt;
				if extCols_stationAfter then&lt;br /&gt;
					for _, v in ipairs(extCols_stationAfter) do&lt;br /&gt;
						if station_index then&lt;br /&gt;
							str = str .. &#039;&amp;lt;td class=&amp;quot;station &#039;..v..&#039;&amp;quot; rowspan=&amp;quot;xxxrowspanxxx&amp;quot;&amp;gt;&#039; .. (getArg(station_index .. &#039;-row-&#039; .. v) or &#039;&#039;) .. &#039;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
						else&lt;br /&gt;
							str = str .. &#039;&amp;lt;td class=&amp;quot;station &#039;..v..&#039;&amp;quot; rowspan=&amp;quot;xxxrowspanxxx&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			if current_station == station then -- is same group ??&lt;br /&gt;
				station_count = station_count + 1&lt;br /&gt;
			else&lt;br /&gt;
				current_station = station&lt;br /&gt;
				station_count = 1&lt;br /&gt;
			end&lt;br /&gt;
			local station_index = getArg(&#039;station-index-&#039;..station)&lt;br /&gt;
			-- station before:&lt;br /&gt;
			if extCols_stationBefore then&lt;br /&gt;
				for _, v in ipairs(extCols_stationBefore) do&lt;br /&gt;
					if station_index then&lt;br /&gt;
						str = str .. &#039;&amp;lt;td class=&amp;quot;station &#039;..v..&#039;&amp;quot;&amp;gt;&#039; .. (getArg(station_index .. &#039;-row-&#039; .. v) or &#039;&#039;) .. &#039;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
					else&lt;br /&gt;
						str = str .. &#039;&amp;lt;td class=&amp;quot;station &#039;..v..&#039;&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			str = str .. &#039;&amp;lt;td class=&amp;quot;station&amp;quot;&amp;gt;&#039;.. stationCell(station) ..&#039;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
			-- station after:&lt;br /&gt;
			if extCols_stationAfter then&lt;br /&gt;
				for _, v in ipairs(extCols_stationAfter) do&lt;br /&gt;
					if station_index then&lt;br /&gt;
						str = str .. &#039;&amp;lt;td class=&amp;quot;station &#039;..v..&#039;&amp;quot;&amp;gt;&#039; .. (getArg(station_index .. &#039;-row-&#039; .. v) or &#039;&#039;) .. &#039;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
					else&lt;br /&gt;
						str = str .. &#039;&amp;lt;td class=&amp;quot;station &#039;..v..&#039;&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	str = str .. str_z ..&#039;&amp;lt;/tr&amp;gt;&#039;&lt;br /&gt;
	return str, current_station, station_count, current_result, result_count, current_result_ext, result_ext_count&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local extRows = function(withStation, isTop)&lt;br /&gt;
	local prefix&lt;br /&gt;
	if isTop then&lt;br /&gt;
		prefix = &#039;topextrow-&#039;&lt;br /&gt;
	else&lt;br /&gt;
		prefix = &#039;extrow-&#039;&lt;br /&gt;
	end&lt;br /&gt;
	local returnstr = &#039;&#039;&lt;br /&gt;
	local valid = true&lt;br /&gt;
	local p&lt;br /&gt;
	local str&lt;br /&gt;
	local _i = 1&lt;br /&gt;
	local temp&lt;br /&gt;
	while valid do&lt;br /&gt;
		local i = tostring(_i) .. &#039;-&#039;&lt;br /&gt;
		p = prefix .. i&lt;br /&gt;
		valid = false&lt;br /&gt;
		str = &#039;&amp;lt;tr data-&#039;..prefix..&#039;id=&amp;quot;&#039;..tostring(_i)..&#039;&amp;quot;&amp;gt;&#039;&lt;br /&gt;
		if extCols_A then&lt;br /&gt;
			for _, v in ipairs(extCols_A) do&lt;br /&gt;
				temp = getArg(p..v)&lt;br /&gt;
				if temp then&lt;br /&gt;
					valid = true&lt;br /&gt;
					str = str .. &#039;&amp;lt;td class=&amp;quot;&#039;..v..&#039;&amp;quot;&amp;gt;&#039; .. temp .. &#039;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
				else&lt;br /&gt;
					str = str .. &#039;&amp;lt;td class=&amp;quot;&#039;..v..&#039;&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		temp = getArg(p..&#039;col-result&#039;)&lt;br /&gt;
		if temp then&lt;br /&gt;
			valid = true&lt;br /&gt;
			str = str .. &#039;&amp;lt;td class=&amp;quot;result&amp;quot;&amp;gt;&#039; .. temp .. &#039;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
		else&lt;br /&gt;
			str = str .. &#039;&amp;lt;td class=&amp;quot;result&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
		end&lt;br /&gt;
		if extCols_B then&lt;br /&gt;
			for _, v in ipairs(extCols_B) do&lt;br /&gt;
				temp = getArg(p..v)&lt;br /&gt;
				if temp then&lt;br /&gt;
					valid = true&lt;br /&gt;
					str = str .. &#039;&amp;lt;td class=&amp;quot;&#039;..v..&#039;&amp;quot;&amp;gt;&#039; .. temp .. &#039;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
				else&lt;br /&gt;
					str = str .. &#039;&amp;lt;td class=&amp;quot;&#039;..v..&#039;&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		temp = getArg(p..&#039;col-ingredients&#039;)&lt;br /&gt;
		if temp then&lt;br /&gt;
			valid = true&lt;br /&gt;
			str = str .. &#039;&amp;lt;td class=&amp;quot;ingredients&amp;quot;&amp;gt;&#039; .. temp .. &#039;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
		else&lt;br /&gt;
			str = str .. &#039;&amp;lt;td class=&amp;quot;ingredients&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
		end&lt;br /&gt;
		if extCols_C then&lt;br /&gt;
			for _, v in ipairs(extCols_C) do&lt;br /&gt;
				temp = getArg(p..v)&lt;br /&gt;
				if temp then&lt;br /&gt;
					valid = true&lt;br /&gt;
					str = str .. &#039;&amp;lt;td class=&amp;quot;&#039;..v..&#039;&amp;quot;&amp;gt;&#039; .. temp .. &#039;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
				else&lt;br /&gt;
					str = str .. &#039;&amp;lt;td class=&amp;quot;&#039;..v..&#039;&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if withStation then&lt;br /&gt;
			-- station before:&lt;br /&gt;
			if extCols_stationBefore then&lt;br /&gt;
				for _, v in ipairs(extCols_stationBefore) do&lt;br /&gt;
					temp = getArg(p..v)&lt;br /&gt;
					if temp then&lt;br /&gt;
						valid = true&lt;br /&gt;
						str = str .. &#039;&amp;lt;td class=&amp;quot;station &#039;..v..&#039;&amp;quot;&amp;gt;&#039; .. temp .. &#039;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
					else&lt;br /&gt;
						str = str .. &#039;&amp;lt;td class=&amp;quot;station &#039;..v..&#039;&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			temp = getArg(p..&#039;col-station&#039;)&lt;br /&gt;
			if temp then&lt;br /&gt;
				valid = true&lt;br /&gt;
				str = str .. &#039;&amp;lt;td class=&amp;quot;station&amp;quot;&amp;gt;&#039; .. temp .. &#039;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
			else&lt;br /&gt;
				str = str .. &#039;&amp;lt;td class=&amp;quot;station&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
			end&lt;br /&gt;
			-- station after:&lt;br /&gt;
			if extCols_stationAfter then&lt;br /&gt;
				for _, v in ipairs(extCols_stationAfter) do&lt;br /&gt;
					temp = getArg(p..v)&lt;br /&gt;
					if temp then&lt;br /&gt;
						valid = true&lt;br /&gt;
						str = str .. &#039;&amp;lt;td class=&amp;quot;station &#039;..v..&#039;&amp;quot;&amp;gt;&#039; .. temp .. &#039;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
					else&lt;br /&gt;
						str = str .. &#039;&amp;lt;td class=&amp;quot;station &#039;..v..&#039;&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if extCols_D then&lt;br /&gt;
			for _, v in ipairs(extCols_D) do&lt;br /&gt;
				temp = getArg(p..v)&lt;br /&gt;
				if temp then&lt;br /&gt;
					valid = true&lt;br /&gt;
					str = str .. &#039;&amp;lt;td class=&amp;quot;&#039;..v..&#039;&amp;quot;&amp;gt;&#039; .. temp .. &#039;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
				else&lt;br /&gt;
					str = str .. &#039;&amp;lt;td class=&amp;quot;&#039;..v..&#039;&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		str = str .. &#039;&amp;lt;/tr&amp;gt;&#039;&lt;br /&gt;
&lt;br /&gt;
		if valid then&lt;br /&gt;
			_i = _i + 1&lt;br /&gt;
			returnstr = returnstr .. str&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return returnstr&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local tableBody = function(result, withStation, needGroup, needCate, needLink, rootpagename, title, expectedrows, template, stationGroup)&lt;br /&gt;
		local str = tableStart(title, withStation)&lt;br /&gt;
		-- top ext rows:&lt;br /&gt;
		str = str .. extRows(withStation, true)&lt;br /&gt;
		-- main rows:&lt;br /&gt;
		local current_station&lt;br /&gt;
		local station_count&lt;br /&gt;
		local rows_count = 0&lt;br /&gt;
		local current_result&lt;br /&gt;
		local result_count&lt;br /&gt;
		local current_result_ext&lt;br /&gt;
		local result_ext_count&lt;br /&gt;
		for _, row in ipairs(result) do&lt;br /&gt;
			rows_count = rows_count + 1&lt;br /&gt;
			-- table row:&lt;br /&gt;
			str, current_station, station_count, current_result, result_count, current_result_ext, result_ext_count = tableRow(str, row, current_station, station_count, rows_count, withStation, needCate, needLink, needGroup, current_result, result_count, current_result_ext, result_ext_count, template, stationGroup)&lt;br /&gt;
			-- cate:&lt;br /&gt;
			if needCate then&lt;br /&gt;
				if needCate == 2 or rootpagename == currentFrame:expandTemplate{ title = &#039;tr&#039;, args = {row[&#039;result&#039;], lang=lang} } then&lt;br /&gt;
					addCate(row[&#039;station&#039;])&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		-- rowspan value for last station group and result group&lt;br /&gt;
		if withStation and station_count and stationGroup then&lt;br /&gt;
			str = str:gsub(&amp;quot;xxxrowspanxxx&amp;quot;, tostring(station_count))&lt;br /&gt;
		end&lt;br /&gt;
		if needGroup then&lt;br /&gt;
			str = str:gsub(&amp;quot;yyyrowspanyyy&amp;quot;, tostring(result_count))&lt;br /&gt;
			str = str:gsub(&amp;quot;zzzrowspanzzz&amp;quot;, tostring(result_ext_count))&lt;br /&gt;
		end&lt;br /&gt;
		-- ext rows:&lt;br /&gt;
		str = str .. extRows(withStation)&lt;br /&gt;
		-- table end&lt;br /&gt;
		str = str .. tableEnd(rows_count, expectedrows)&lt;br /&gt;
&lt;br /&gt;
		-- cate&lt;br /&gt;
		if needCate then&lt;br /&gt;
			str = str .. cateStr()&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		return str&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local infoboxesBody = function(result, needCate, needLink, rootpagename, title, expectedrows)&lt;br /&gt;
		-- main rows:&lt;br /&gt;
		local current_station&lt;br /&gt;
		local station_count&lt;br /&gt;
		local rows_count = 0&lt;br /&gt;
		local current_result&lt;br /&gt;
		local result_count&lt;br /&gt;
		local str = currentFrame:expandTemplate{ title = &#039;flexstart&#039;, args = {&amp;quot;inlinebox&amp;quot;} }&lt;br /&gt;
		for _, row in ipairs(result) do&lt;br /&gt;
			rows_count = rows_count + 1&lt;br /&gt;
			-- table row:&lt;br /&gt;
			str = str .. &#039;&amp;lt;table class=&amp;quot;background-1&amp;quot; style=&amp;quot;width:239px; border: 1px solid #aaaaaa; -moz-border-radius: .7em; -webkit-border-radius: .7em; padding: 0.2em; margin-bottom:5px; margin-right:5px;&amp;quot;&amp;gt;&#039;&lt;br /&gt;
&lt;br /&gt;
			str = str .. &#039;&amp;lt;th class=&amp;quot;heading-1&amp;quot; colspan=&amp;quot;3&amp;quot; style=&amp;quot;font-size:110%; padding:0.2em;&amp;quot;&amp;gt;Crafting Station&amp;lt;/th&amp;gt;&#039;&lt;br /&gt;
&lt;br /&gt;
			str = str .. &#039;&amp;lt;tr align=&amp;quot;center&amp;quot;&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;gt;&#039;.. stationCell(row[&#039;station&#039;]) .. &#039;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&#039;&lt;br /&gt;
&lt;br /&gt;
			str = str .. &#039;&amp;lt;th class=&amp;quot;heading-1&amp;quot; colspan=&amp;quot;2&amp;quot; style=&amp;quot;width:65%; padding:0.2em;&amp;quot;&amp;gt;\&#039;\&#039;\&#039;Ingredient(s)\&#039;\&#039;\&#039;&amp;lt;/th&amp;gt;&#039;&lt;br /&gt;
			str = str .. &#039;&amp;lt;th class=&amp;quot;heading-1&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;width:35%; padding:0.2em;&amp;quot;&amp;gt;\&#039;\&#039;\&#039;Amount\&#039;\&#039;\&#039;&amp;lt;/th&amp;gt;&#039;&lt;br /&gt;
&lt;br /&gt;
			for i, v in ipairs(explode(&#039;^&#039;, row[&#039;args&#039;] or &amp;quot;&amp;quot;)) do&lt;br /&gt;
				local item, amount = v:match(&#039;^(.-)‡(.-)$&#039;)&lt;br /&gt;
				local s = &#039;&#039;&lt;br /&gt;
				local needamount = true&lt;br /&gt;
				if item ~= nil then&lt;br /&gt;
					for _, itemname in ipairs(split(item)) do&lt;br /&gt;
						if s ~= &#039;&#039; then&lt;br /&gt;
							if amount ~= nil then&lt;br /&gt;
								s = s .. &#039;&amp;lt;td rowspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;&amp;gt;&#039; .. amount .. &#039;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
								needamount = false&lt;br /&gt;
							end&lt;br /&gt;
							s = s .. &#039;&amp;lt;/tr&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;&amp;gt;&#039; .. l10n(&#039;ingredients_sep&#039;) .. &#039;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&#039; .. itemLink(itemname, { mode = &#039;htmltable&#039;, class = &#039;break&#039; } ) .. &#039;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
						else&lt;br /&gt;
							local rowToplineClass = &amp;quot;&amp;quot;&lt;br /&gt;
							if i ~= 1 then&lt;br /&gt;
								rowToplineClass = &#039; class=&amp;quot;topline&amp;quot;&#039;&lt;br /&gt;
							end&lt;br /&gt;
							s = &#039;&amp;lt;tr&#039; .. rowToplineClass .. &#039;&amp;gt;&amp;lt;td&amp;gt;&#039; .. itemLink(itemname, { mode = &#039;htmltable&#039;, class = &#039;break&#039; } ) .. &#039;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
				else&lt;br /&gt;
					s = &#039;&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot;&amp;gt;&#039; .. l10n(&#039;no_ingredients&#039;) .. &#039;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&#039;&lt;br /&gt;
				end&lt;br /&gt;
				str = str .. s&lt;br /&gt;
				if amount ~= nil and needamount == true then&lt;br /&gt;
					str = str .. &#039;&amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;&#039; .. amount .. &#039;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
				end&lt;br /&gt;
				str = str .. &#039;&amp;lt;/tr&amp;gt;&#039;&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			str = str .. &#039;&amp;lt;th class=&amp;quot;heading-1&amp;quot; colspan=&amp;quot;3&amp;quot; style=&amp;quot;padding:0.2em;&amp;quot;&amp;gt;\&#039;\&#039;\&#039;Result\&#039;\&#039;\&#039;&amp;lt;/th&amp;gt;&#039;&lt;br /&gt;
&lt;br /&gt;
			str = str .. &#039;&amp;lt;tr&amp;gt;&#039;&lt;br /&gt;
&lt;br /&gt;
			local args = {mode = &#039;htmltable&#039;, anchor = resultanchor, nolink = not needLink, class=&#039;multi-line break&#039;}&lt;br /&gt;
			if row[&#039;resultimage&#039;] then&lt;br /&gt;
				args[&#039;image&#039;] = row[&#039;resultimage&#039;]&lt;br /&gt;
			end&lt;br /&gt;
			if row[&#039;resulttext&#039;] then&lt;br /&gt;
				args[2] = currentFrame:expandTemplate{ title = &#039;tr&#039;, args = {row[&#039;resulttext&#039;], lang=lang} }&lt;br /&gt;
			end&lt;br /&gt;
			str = str .. &#039;&amp;lt;td&amp;gt;&#039; .. itemLink(row[&#039;result&#039;], args)&lt;br /&gt;
			&lt;br /&gt;
			--[[&lt;br /&gt;
			if row[&#039;historical&#039;] == &amp;quot;1&amp;quot; then&lt;br /&gt;
				str = str .. l10n(&#039;historical_recipe_note&#039;)&lt;br /&gt;
			end&lt;br /&gt;
			]]&lt;br /&gt;
			&lt;br /&gt;
			str = str  .. &#039;&amp;lt;/td&amp;gt;&amp;lt;td align=&amp;quot;center&amp;quot;&amp;gt;&#039; .. row[&#039;amount&#039;] .. &#039;&amp;lt;/td&amp;gt;&#039;&lt;br /&gt;
&lt;br /&gt;
			str = str .. &#039;&amp;lt;/tr&amp;gt;&#039;&lt;br /&gt;
&lt;br /&gt;
			str = str .. &#039;&amp;lt;/table&amp;gt;&#039;&lt;br /&gt;
			-- cate:&lt;br /&gt;
			if needCate then&lt;br /&gt;
				if needCate == 2 or rootpagename == currentFrame:expandTemplate{ title = &#039;tr&#039;, args = {row[&#039;result&#039;], lang=lang} } then&lt;br /&gt;
					addCate(row[&#039;station&#039;])&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		str = str .. currentFrame:expandTemplate{ title = &#039;flexend&#039; }&lt;br /&gt;
&lt;br /&gt;
		-- cate&lt;br /&gt;
		if expectedrows and rows_count ~= expectedrows then&lt;br /&gt;
			str = str .. &#039;[[Category:&#039;.. l10n(&#039;cate_unexpected_rows_count&#039;) .. &#039;]]&#039;&lt;br /&gt;
		end&lt;br /&gt;
		if not expectedrows and rows_count == 0 then&lt;br /&gt;
			return &#039;&amp;lt;span style=&amp;quot;color:red;font-weight:bold;&amp;quot;&amp;gt;Recipes: No result&amp;lt;/span&amp;gt;[[Category:&#039;.. l10n(&#039;cate_no_row&#039;) .. &#039;]]&#039;&lt;br /&gt;
		end&lt;br /&gt;
		str = str .. cateStr()&lt;br /&gt;
&lt;br /&gt;
		return str&lt;br /&gt;
end&lt;br /&gt;
-----------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
-- for {{recipes/register}}&lt;br /&gt;
p.register = function(frame)&lt;br /&gt;
	local args = frame:getParent().args&lt;br /&gt;
	--[[&lt;br /&gt;
	local historical&lt;br /&gt;
&lt;br /&gt;
	if (trim(args[&#039;historical&#039;] or &#039;n&#039;)):sub(1,1) == &#039;y&#039; then&lt;br /&gt;
		historical = true&lt;br /&gt;
	end&lt;br /&gt;
	]]&lt;br /&gt;
&lt;br /&gt;
	-- {{{ingredients}}}&lt;br /&gt;
	local ingredients = {} -- list of {index, itemname, amount}&lt;br /&gt;
	for k, v in pairs(args) do&lt;br /&gt;
		if(type(k) == &#039;number&#039;) then&lt;br /&gt;
			if k % 2 == 1 then  -- 2n-1, nth item&lt;br /&gt;
				local index, item, amount = (k+1)/2, trim(v), trim(args[k+1])&lt;br /&gt;
				ingredients[index] = {item, amount}&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local serialized = &#039;&#039; -- serialized ingredients list&lt;br /&gt;
	for _, v in ipairs(ingredients) do&lt;br /&gt;
		serialized = serialized .. &#039;^&#039; .. v[1] .. &#039;‡&#039; .. v[2]&lt;br /&gt;
	end&lt;br /&gt;
	serialized = mw.ustring.sub(serialized, 2)&lt;br /&gt;
&lt;br /&gt;
	table.sort(ingredients, function(a , b) return a[1] &amp;lt; b[1] end) -- sort by ingredient item name&lt;br /&gt;
	local ingredients_string = &#039;&#039;&lt;br /&gt;
	local ingredients_string_full = &#039;&#039;&lt;br /&gt;
	for _, v in ipairs(ingredients) do&lt;br /&gt;
		local name, amount = unpack(v)&lt;br /&gt;
		local ingstr = normalize(name)&lt;br /&gt;
		ingredients_string = ingredients_string .. &#039;^&#039; .. ingstr&lt;br /&gt;
		ingredients_string_full = ingredients_string_full .. &#039;^&#039; .. ingstr .. amount&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	--store&lt;br /&gt;
	frame:callParserFunction(&#039;#cargo_store:_table=Recipes&#039;,{&lt;br /&gt;
		result = trim(args[&#039;result&#039;] or &#039;&#039;),&lt;br /&gt;
		resultimage = trim(args[&#039;image&#039;] or &#039;&#039;),&lt;br /&gt;
		resulttext = trim(args[&#039;text&#039;] or &#039;&#039;),&lt;br /&gt;
		amount = trim(args[&#039;amount&#039;] or &#039;&#039;),&lt;br /&gt;
		-- historical = historical,&lt;br /&gt;
		station = normalizeStation(trim(args[&#039;station&#039;] or &#039;&#039;)),&lt;br /&gt;
		ingredients = mw.ustring.sub(ingredients_string, 2),&lt;br /&gt;
		ings = mw.ustring.sub(ingredients_string_full, 2),&lt;br /&gt;
		args = serialized or &amp;quot;&amp;quot;,&lt;br /&gt;
	})&lt;br /&gt;
end -- p.register&lt;br /&gt;
&lt;br /&gt;
-- for {{recipes}}&lt;br /&gt;
p.query = function(frame)&lt;br /&gt;
	currentFrame = frame -- global frame cache&lt;br /&gt;
	local args = frame:getParent().args&lt;br /&gt;
	inputArgs = args&lt;br /&gt;
&lt;br /&gt;
	lang = frame.args[&#039;lang&#039;] or &#039;en&#039;&lt;br /&gt;
	l10n_table = l10n_info[lang] or l10n_info[&#039;en&#039;]&lt;br /&gt;
&lt;br /&gt;
	resultanchor = trim(args[&#039;resultanchor&#039;] or &#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
	addCate, cateStr = (function()&lt;br /&gt;
		local cate = l10n(&#039;station_cate&#039;)&lt;br /&gt;
		local cateCache = {}&lt;br /&gt;
		local addCate = function(station)&lt;br /&gt;
			cateCache[station] = true&lt;br /&gt;
		end&lt;br /&gt;
		local cateStr = function()&lt;br /&gt;
			local str = &#039;&#039;&lt;br /&gt;
			for station, _ in pairs(cateCache) do&lt;br /&gt;
				if station == &#039;By Hand&#039; then&lt;br /&gt;
					str = str .. &#039;[[Category:&#039;.. l10n(&#039;station_by_hand_cate&#039;).. &#039;]]&#039;&lt;br /&gt;
				else&lt;br /&gt;
					str = str .. &#039;[[Category:&#039;.. l10n(&#039;station_cate_start_str&#039;)..(cate[station] or frame:expandTemplate{ title = &#039;tr&#039;, args = {station, lang=lang, link=&#039;y&#039;}})..&#039;]]&#039;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			if str ~= &#039;&#039; then&lt;br /&gt;
				str = str .. &#039;[[Category:&#039;.. l10n(&#039;cate_craftable&#039;).. &#039;]]&#039;&lt;br /&gt;
			end&lt;br /&gt;
			return str&lt;br /&gt;
		end&lt;br /&gt;
		return addCate, cateStr&lt;br /&gt;
	end)()&lt;br /&gt;
&lt;br /&gt;
	local where = trim(args[&#039;where&#039;] or &#039;&#039;)&lt;br /&gt;
	if where == &#039;&#039; then&lt;br /&gt;
		where = criStr(args)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- no constraint no result.&lt;br /&gt;
	if where == &#039;&#039; then&lt;br /&gt;
		return &#039;&amp;lt;span style=&amp;quot;color:red;font-weight:bold;&amp;quot;&amp;gt;Recipes: No constraint&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- format:&lt;br /&gt;
	local needCate, needLink = getFlags(args)&lt;br /&gt;
	local needGroup = true&lt;br /&gt;
	if (getArg(&#039;grouping&#039;) or &#039;y&#039;):sub(1,1) == &#039;n&#039; then&lt;br /&gt;
		needGroup = false&lt;br /&gt;
	end&lt;br /&gt;
	local _title = trim(args[&#039;title&#039;] or &#039;&#039;)&lt;br /&gt;
	local _expectedrows = trim(args[&#039;expectedrows&#039;] or &#039;&#039;)&lt;br /&gt;
	if _expectedrows ~= &#039;&#039; then&lt;br /&gt;
		_expectedrows = tonumber(_expectedrows)&lt;br /&gt;
	else&lt;br /&gt;
		_expectedrows = nil&lt;br /&gt;
	end&lt;br /&gt;
	local rootpagename = mw.title.getCurrentTitle().rootText&lt;br /&gt;
&lt;br /&gt;
	if getArg(&#039;view&#039;) == &#039;infobox&#039; then&lt;br /&gt;
		local result = mw.ext.cargo.query(&#039;Recipes&#039;, &#039;result, resultimage, resulttext, amount, station, args&#039;, {&lt;br /&gt;
			where = where,&lt;br /&gt;
			groupBy = &amp;quot;result, amount, ings&amp;quot;,&lt;br /&gt;
			orderBy = &amp;quot;result, amount DESC&amp;quot;, -- Don&#039;t order by station&lt;br /&gt;
			limit = 2000,&lt;br /&gt;
		})&lt;br /&gt;
		return infoboxesBody(result, needCate, needLink, rootpagename, _title, _expectedrows)&lt;br /&gt;
	else&lt;br /&gt;
		if trim(args[&#039;nostation&#039;] or &#039;&#039;) ~= &#039;&#039; then&lt;br /&gt;
			-- no station&lt;br /&gt;
			-- query, still need contain station field for cate.&lt;br /&gt;
			local result = mw.ext.cargo.query(&#039;Recipes&#039;, &#039;result, resultimage, resulttext, amount, station, args&#039;, {&lt;br /&gt;
				where = where,&lt;br /&gt;
				groupBy = &amp;quot;result, amount, ings&amp;quot;,&lt;br /&gt;
				orderBy = &amp;quot;result, amount DESC&amp;quot;, -- Don&#039;t order by station&lt;br /&gt;
				limit = 2000,&lt;br /&gt;
			})&lt;br /&gt;
			return tableBody(result, false, needGroup, needCate, needLink, rootpagename, _title, _expectedrows, getArg(&#039;resulttemplate&#039;), false)&lt;br /&gt;
		else&lt;br /&gt;
			-- with station&lt;br /&gt;
			local stationGroup = true&lt;br /&gt;
			if (getArg(&#039;stationgrouping&#039;) or &#039;y&#039;):sub(1,1) == &#039;n&#039; then&lt;br /&gt;
				stationGroup = false&lt;br /&gt;
			end&lt;br /&gt;
			-- query&lt;br /&gt;
			local result = mw.ext.cargo.query(&#039;Recipes&#039;, &#039;result, resultimage, resulttext, amount, station, args&#039;, {&lt;br /&gt;
				where = where,&lt;br /&gt;
				groupBy = &amp;quot;result, amount, ings&amp;quot;,&lt;br /&gt;
				orderBy = &amp;quot;station, result, amount DESC, ings&amp;quot;, -- order by station first for station grouping.&lt;br /&gt;
				limit = 2000,&lt;br /&gt;
			})&lt;br /&gt;
			return tableBody(result, true, needGroup, needCate, needLink, rootpagename, _title, _expectedrows, getArg(&#039;resulttemplate&#039;), stationGroup)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end -- p.query&lt;br /&gt;
&lt;br /&gt;
-- for {{recipes/extract}}&lt;br /&gt;
p.extract = function(frame)&lt;br /&gt;
	currentFrame = frame -- global frame cache&lt;br /&gt;
&lt;br /&gt;
	local args = frame:getParent().args&lt;br /&gt;
	inputArgs = args&lt;br /&gt;
&lt;br /&gt;
	lang = frame.args[&#039;lang&#039;] or &#039;en&#039;&lt;br /&gt;
	l10n_table = l10n_info[lang] or l10n_info[&#039;en&#039;]&lt;br /&gt;
&lt;br /&gt;
	local where = trim(args[&#039;where&#039;] or &#039;&#039;)&lt;br /&gt;
	if where == &#039;&#039; then&lt;br /&gt;
		where = criStr(args)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- no constraint no result.&lt;br /&gt;
	if where == &#039;&#039; then&lt;br /&gt;
		return &#039;&amp;lt;span style=&amp;quot;color:red;font-weight:bold;&amp;quot;&amp;gt;Recipes/extract: No constraint&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- query:&lt;br /&gt;
	local result = mw.ext.cargo.query(&#039;Recipes&#039;, &#039;result, resultimage, resulttext, amount, station, args&#039;, {&lt;br /&gt;
		where = where,&lt;br /&gt;
		groupBy = &amp;quot;result, amount, ings&amp;quot;,&lt;br /&gt;
		orderBy = &amp;quot;result, amount DESC&amp;quot;, -- Don&#039;t order by station&lt;br /&gt;
		limit = 20, -- enough.&lt;br /&gt;
	})&lt;br /&gt;
&lt;br /&gt;
	-- output&lt;br /&gt;
	local mode = getArg(&#039;mode&#039;)&lt;br /&gt;
	local sep = getArg(&#039;sep&#039;) or getArg(&#039;seperator&#039;)&lt;br /&gt;
	if not mode or mode ==&#039;compact&#039; or mode == &#039;&#039; then&lt;br /&gt;
		--default mode = compact&lt;br /&gt;
		local sep = sep or l10n(&#039;default_sep_compact&#039;)&lt;br /&gt;
		local withResult = getArg(&#039;withresult&#039;)&lt;br /&gt;
		local withStation = not getArg(&#039;nostation&#039;)&lt;br /&gt;
		local str = nil&lt;br /&gt;
		for _, row in ipairs(result) do&lt;br /&gt;
			if str then&lt;br /&gt;
				str = str .. sep&lt;br /&gt;
			else&lt;br /&gt;
				str = &#039;&#039;&lt;br /&gt;
			end&lt;br /&gt;
			str = str .. &#039;&amp;lt;span class=&amp;quot;recipe compact&amp;quot;&amp;gt;&#039;&lt;br /&gt;
			local ingFlag = nil&lt;br /&gt;
			for _, v in ipairs(explode(&#039;^&#039;, row[&#039;args&#039;] or &amp;quot;&amp;quot;)) do&lt;br /&gt;
				if ingFlag then&lt;br /&gt;
					str = str .. &#039; + &#039;&lt;br /&gt;
				else&lt;br /&gt;
					ingFlag = true&lt;br /&gt;
				end&lt;br /&gt;
				local item, amount = v:match(&#039;^(.-)‡(.-)$&#039;)&lt;br /&gt;
				if amount ~= &#039;1&#039; then&lt;br /&gt;
					str = str .. amount .. &#039; &#039;&lt;br /&gt;
				end&lt;br /&gt;
				local s&lt;br /&gt;
				for _, itemname in ipairs(split(item)) do&lt;br /&gt;
					if s then&lt;br /&gt;
						s = s .. &amp;quot;&amp;amp;thinsp;/&amp;amp;thinsp;&amp;quot; .. itemLink(itemname, {mode=&#039;image&#039;})&lt;br /&gt;
					else&lt;br /&gt;
						s = itemLink(itemname, {mode=&#039;image&#039;})&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
				str = str .. s&lt;br /&gt;
			end&lt;br /&gt;
			if withResult then&lt;br /&gt;
				str = str .. &#039; = &#039;&lt;br /&gt;
				if row[&#039;amount&#039;] ~= &#039;1&#039; then&lt;br /&gt;
					str = str .. row[&#039;amount&#039;] .. &#039; &#039;&lt;br /&gt;
				end&lt;br /&gt;
				local args = {mode=&#039;image&#039;}&lt;br /&gt;
				if row[&#039;resultimage&#039;] then&lt;br /&gt;
					args[&#039;image&#039;] = row[&#039;resultimage&#039;]&lt;br /&gt;
				end&lt;br /&gt;
				str = str .. itemLink(row[&#039;result&#039;], args)&lt;br /&gt;
			end&lt;br /&gt;
			if withStation then&lt;br /&gt;
				str = str .. compactStation(row[&#039;station&#039;])&lt;br /&gt;
			end&lt;br /&gt;
			str = str..&#039;&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
		end&lt;br /&gt;
		return str&lt;br /&gt;
	elseif mode == &#039;ingredients&#039; then&lt;br /&gt;
		local sep = sep or l10n(&#039;default_sep_ingredients&#039;) &lt;br /&gt;
		local str = nil&lt;br /&gt;
		for _, row in ipairs(result) do&lt;br /&gt;
			if str then&lt;br /&gt;
				str = str .. sep&lt;br /&gt;
			else&lt;br /&gt;
				str = &#039;&#039;&lt;br /&gt;
			end&lt;br /&gt;
			str = str .. ingredientsCell(row[&#039;args&#039;] or &amp;quot;&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
		return &#039;&amp;lt;div class=&amp;quot;crafting-ingredients&amp;quot;&amp;gt;&#039;..str..&#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
	elseif mode == &#039;station&#039; then&lt;br /&gt;
		-- only return first row.&lt;br /&gt;
		for _, row in ipairs(result) do&lt;br /&gt;
			return stationCell(row[&#039;station&#039;], {})&lt;br /&gt;
		end&lt;br /&gt;
	elseif mode == &#039;stationraw&#039; then&lt;br /&gt;
		-- only return first row.&lt;br /&gt;
		for _, row in ipairs(result) do&lt;br /&gt;
			return row[&#039;station&#039;]&lt;br /&gt;
		end&lt;br /&gt;
	elseif mode == &#039;result&#039; then&lt;br /&gt;
		-- only return first row.&lt;br /&gt;
		local needCate, needLink = getFlags(args)&lt;br /&gt;
		for _, row in ipairs(result) do&lt;br /&gt;
			return resultCell(row, needLink, getArg(&#039;resulttemplate&#039;))&lt;br /&gt;
		end&lt;br /&gt;
	elseif mode == &#039;amount&#039; then&lt;br /&gt;
		-- only return first row.&lt;br /&gt;
		for _, row in ipairs(result) do&lt;br /&gt;
			return row[&#039;amount&#039;]&lt;br /&gt;
		end&lt;br /&gt;
	elseif mode == &#039;ingredients-buy&#039; then -- doesn&#039;t work now, left for possible future expansion&lt;br /&gt;
		-- only process first row.&lt;br /&gt;
		for _, row in ipairs(result) do&lt;br /&gt;
			local value = 0&lt;br /&gt;
			for _, v in ipairs(explode(&#039;^&#039;, row[&#039;args&#039;] or &amp;quot;&amp;quot;)) do&lt;br /&gt;
				local item, amount = v:match(&#039;^(.-)‡(.-)$&#039;)&lt;br /&gt;
				value = value + require(&#039;Module:Iteminfo&#039;).getItemStat( tonumber(currentFrame:expandTemplate{ title = &#039;itemIdFromName&#039;, args = {item, lang=&#039;en&#039;} }) or 0, &#039;value&#039; ) * amount&lt;br /&gt;
			end&lt;br /&gt;
			return value&lt;br /&gt;
		end&lt;br /&gt;
	elseif mode == &#039;ingredients-sell&#039; then -- doesn&#039;t work now, left for possible future expansion&lt;br /&gt;
		-- only process first row.&lt;br /&gt;
		for _, row in ipairs(result) do&lt;br /&gt;
			local value = 0&lt;br /&gt;
			for _, v in ipairs(explode(&#039;^&#039;, row[&#039;args&#039;] or &amp;quot;&amp;quot;)) do&lt;br /&gt;
				local item, amount = v:match(&#039;^(.-)‡(.-)$&#039;)&lt;br /&gt;
				value = value + math.floor(require(&#039;Module:Iteminfo&#039;).getItemStat( tonumber(currentFrame:expandTemplate{ title = &#039;itemIdFromName&#039;, args = {item, lang=&#039;en&#039;} }) or 0, &#039;value&#039; )/5) * amount&lt;br /&gt;
			end&lt;br /&gt;
			return value&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		return &#039;&amp;lt;span style=&amp;quot;color:red;font-weight:bold;&amp;quot;&amp;gt;Recipes/extract: Invalid mode&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
	end&lt;br /&gt;
end -- p.extract&lt;br /&gt;
&lt;br /&gt;
-- count&lt;br /&gt;
p.count = function(frame)&lt;br /&gt;
	local args = frame:getParent().args&lt;br /&gt;
	local where = trim(args[&#039;where&#039;] or &#039;&#039;)&lt;br /&gt;
	if where == &#039;&#039; then&lt;br /&gt;
		where = criStr(args)&lt;br /&gt;
	end&lt;br /&gt;
	-- no constraint no result.&lt;br /&gt;
	if where == &#039;&#039; then&lt;br /&gt;
		return &lt;br /&gt;
	end&lt;br /&gt;
	-- query: since we must use group by to eliminate duplicates, so we can not use COUNT() to get row count directly.&lt;br /&gt;
	local result = mw.ext.cargo.query(&#039;Recipes&#039;, &#039;result, resultimage, resulttext, amount, station, args&#039;, {&lt;br /&gt;
		where = where,&lt;br /&gt;
		groupBy = &amp;quot;result, amount, ings&amp;quot;,&lt;br /&gt;
		limit = 2000,&lt;br /&gt;
	})&lt;br /&gt;
	-- count&lt;br /&gt;
	local count = 0&lt;br /&gt;
	for _, row in ipairs(result) do&lt;br /&gt;
		count = count + 1&lt;br /&gt;
	end&lt;br /&gt;
	return count&lt;br /&gt;
end -- p.count&lt;br /&gt;
&lt;br /&gt;
-- return &amp;quot;yes&amp;quot; or &amp;quot;&amp;quot; &lt;br /&gt;
p.exist = function(frame)&lt;br /&gt;
	local args = frame:getParent().args&lt;br /&gt;
	local where = trim(args[&#039;where&#039;] or &#039;&#039;)&lt;br /&gt;
	if where == &#039;&#039; then&lt;br /&gt;
		where = criStr(args)&lt;br /&gt;
	end&lt;br /&gt;
	-- no constraint no result.&lt;br /&gt;
	if where == &#039;&#039; then&lt;br /&gt;
		return &lt;br /&gt;
	end&lt;br /&gt;
	-- query:&lt;br /&gt;
	local result = mw.ext.cargo.query(&#039;Recipes&#039;, &#039;result&#039;, {&lt;br /&gt;
		where = where,&lt;br /&gt;
		limit = 1, -- enough.&lt;br /&gt;
	})&lt;br /&gt;
	-- output&lt;br /&gt;
	for _, row in ipairs(result) do&lt;br /&gt;
		return &#039;yes&#039;&lt;br /&gt;
	end&lt;br /&gt;
end -- p.exist&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>JamzOJamz</name></author>
	</entry>
	<entry>
		<id>https://wiki.terramonmod.com/index.php?title=Module:Tr/loaddata-en&amp;diff=25</id>
		<title>Module:Tr/loaddata-en</title>
		<link rel="alternate" type="text/html" href="https://wiki.terramonmod.com/index.php?title=Module:Tr/loaddata-en&amp;diff=25"/>
		<updated>2025-11-23T20:07:59Z</updated>

		<summary type="html">&lt;p&gt;JamzOJamz: Created page with &amp;quot;return require(&amp;#039;Module:Tr/loaddata&amp;#039;).load(&amp;#039;en&amp;#039;)&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;return require(&#039;Module:Tr/loaddata&#039;).load(&#039;en&#039;)&lt;/div&gt;</summary>
		<author><name>JamzOJamz</name></author>
	</entry>
	<entry>
		<id>https://wiki.terramonmod.com/index.php?title=Module:Tr/db-en&amp;diff=24</id>
		<title>Module:Tr/db-en</title>
		<link rel="alternate" type="text/html" href="https://wiki.terramonmod.com/index.php?title=Module:Tr/db-en&amp;diff=24"/>
		<updated>2025-11-23T20:07:37Z</updated>

		<summary type="html">&lt;p&gt;JamzOJamz: Created page with &amp;quot;return { 	main = {}, 	pagename = {} }&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;return {&lt;br /&gt;
	main = {},&lt;br /&gt;
	pagename = {}&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>JamzOJamz</name></author>
	</entry>
	<entry>
		<id>https://wiki.terramonmod.com/index.php?title=Main_Page&amp;diff=23</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.terramonmod.com/index.php?title=Main_Page&amp;diff=23"/>
		<updated>2025-11-23T20:06:46Z</updated>

		<summary type="html">&lt;p&gt;JamzOJamz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#seo:&lt;br /&gt;
|title=The Terramon Wiki&lt;br /&gt;
}}&lt;br /&gt;
{| style=&amp;quot;width:100%; text-align:center; border:1px solid var(--border-color-base); border-radius:5px; margin:0; background: var(--color-surface-2);&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding:13px;&amp;quot; |&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:170%; font-weight:600; color: var(--color-emphasized); font-weight: var(--font-weight-semi-bold);&amp;quot;&amp;gt;&lt;br /&gt;
Welcome to the &amp;lt;span style=&amp;quot;font-weight:900;&amp;quot;&amp;gt;Official Terramon Mod Wiki&amp;lt;/span&amp;gt;,&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
the most comprehensive source of information about the mod.&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;padding:5px 8px; margin-top:8px; border-radius: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
[https://discord.gg/U8skDEA Official Discord] • [https://www.youtube.com/channel/UCU91hiBTfhZB5YBbQZlgCPg YouTube Channel]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Two side-by-side tables --&amp;gt;&lt;br /&gt;
{| style=&amp;quot;width:100%; border-spacing:0; margin:0;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:70%; border:1px solid var(--border-color-base); border-radius:5px; margin:0; padding: 15px; vertical-align:top; background: var(--color-surface-2);&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;padding:4px 8px; border-radius: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;float: right;&amp;quot;&amp;gt;[[File:Mod icon.png]]&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align:center; font-size:130%; font-weight: var(--font-weight-semi-bold); color: var(--color-emphasized); margin:0;&amp;quot;&amp;gt;The Mod&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Terramon Mod is a large and immersive mod for Terraria that seamlessly integrates the beloved world of Pokémon into the game. Dive into an adventure where you can explore, catch, and train over 150 Pokémon in the vast and diverse landscapes of Terraria. With refined mechanics and plenty to discover, Terramon is a fun experience for longtime Pokémon fans, casual players, and newcomers alike.&lt;br /&gt;
&lt;br /&gt;
You can download the mod from our [https://steamcommunity.com/sharedfiles/filedetails/?id=3435381419 Steam Workshop page] or directly from [https://github.com/JamzOJamz/Terramon/releases/download/0.1.3.2/Terramon.tmod here].&lt;br /&gt;
&lt;br /&gt;
Past versions of the mod can also be downloaded from our [[Version History]] page.&lt;br /&gt;
| style=&amp;quot;width:30%; border:1px solid var(--border-color-base); border-radius:5px; margin:0; padding: 15px; vertical-align:top; background: var(--color-surface-2);&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width:100%; text-align:center;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align: center; display: flex; flex-direction: column; gap: 4px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;padding:4px 8px; border-radius: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align:center; font-size:130%; font-weight: var(--font-weight-semi-bold); color: var(--color-emphasized); margin:0;&amp;quot;&amp;gt;Latest Supported Versions&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;font-size: 107%; border-radius: 5px;&amp;quot;&amp;gt;&#039;&#039;&#039;[[Version History|Terramon Mod]]&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;[[Beta 0.1.3.2]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;font-size: 107%; border-radius: 5px;&amp;quot;&amp;gt;&#039;&#039;&#039;[[tgc:TModLoader|tModLoader]]&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;2025.9.3.0&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;font-size: 107%; border-radius: 5px;&amp;quot;&amp;gt;&#039;&#039;&#039;[[tgc:Terraria|Terraria]]&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;1.4.4.9&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Three side-by-side tables --&amp;gt;&lt;br /&gt;
{| style=&amp;quot;width:100%; border-spacing:0; margin:0;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:33%; border:1px solid var(--border-color-base); border-radius:5px; margin:0; padding: 15px; vertical-align:top; background: var(--color-surface-2);&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;padding:4px 8px; border-radius: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align:center; font-size:130%; font-weight: var(--font-weight-semi-bold); color: var(--color-emphasized); margin:0;&amp;quot;&amp;gt;[[Poké Balls]]&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* {{item|Poké Ball|size=28px}}&lt;br /&gt;
* {{item|Premier Ball|size=28px}}&lt;br /&gt;
* {{item|Cherish Ball|size=28px}}&lt;br /&gt;
* {{item|Aether Ball|size=28px}}&lt;br /&gt;
* {{item|Great Ball|size=28px}}&lt;br /&gt;
* {{item|Ultra Ball|size=28px}}&lt;br /&gt;
* {{item|Master Ball|size=28px}}&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width:33%; border:1px solid var(--border-color-base); border-radius:5px; margin:0; padding: 15px; vertical-align:top; background: var(--color-surface-2);&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;padding:4px 8px; border-radius: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align:center; font-size:130%; font-weight: var(--font-weight-semi-bold); color: var(--color-emphasized); margin:0;&amp;quot;&amp;gt;[[Evolutionary items]]&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* {{item|Rare Candy|size=28px}}&lt;br /&gt;
* {{item|Fire Stone|size=24px}}&lt;br /&gt;
* {{item|Water Stone|size=24px}}&lt;br /&gt;
* {{item|Thunder Stone|size=24px}}&lt;br /&gt;
* {{item|Leaf Stone|size=24px}}&lt;br /&gt;
* {{item|Moon Stone|size=28px}}&lt;br /&gt;
* {{item|Linking Cord}}&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width:33%; border:1px solid var(--border-color-base); border-radius:5px; margin:0; padding: 15px; vertical-align:top; background: var(--color-surface-2);&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;padding:4px 8px; border-radius: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align:center; font-size:130%; font-weight: var(--font-weight-semi-bold); color: var(--color-emphasized); margin:0;&amp;quot;&amp;gt;Misc.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* {{item|Pokémon|image=Pikachu.png|size=28px}}&lt;br /&gt;
* {{item|PC|image=PC (Red).png}}&lt;br /&gt;
* {{item|Poké Mart Clerk|image=Poké Mart Clerk Head.png}}&lt;br /&gt;
* {{item|Apricorns|image=Apricorns.gif}}&lt;br /&gt;
* {{item|Shiny Charm|size=26px}}&lt;br /&gt;
* {{item|Recipes|image=Work Bench.png|size=26px}}&lt;br /&gt;
* {{item|Vanity items|image=Pokemon Trainer Cap.png|size=24px}}&lt;br /&gt;
* {{item|Music|image=Music Box (Pokémon Center).png|size=26px}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>JamzOJamz</name></author>
	</entry>
	<entry>
		<id>https://wiki.terramonmod.com/index.php?title=Main_Page&amp;diff=22</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.terramonmod.com/index.php?title=Main_Page&amp;diff=22"/>
		<updated>2025-11-23T20:06:12Z</updated>

		<summary type="html">&lt;p&gt;JamzOJamz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#seo:&lt;br /&gt;
|title=The Terramon Wikie&lt;br /&gt;
}}&lt;br /&gt;
{| style=&amp;quot;width:100%; text-align:center; border:1px solid var(--border-color-base); border-radius:5px; margin:0; background: var(--color-surface-2);&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding:13px;&amp;quot; |&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:170%; font-weight:600; color: var(--color-emphasized); font-weight: var(--font-weight-semi-bold);&amp;quot;&amp;gt;&lt;br /&gt;
Welcome to the &amp;lt;span style=&amp;quot;font-weight:900;&amp;quot;&amp;gt;Official Terramon Mod Wiki&amp;lt;/span&amp;gt;,&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
the most comprehensive source of information about the mod.&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;padding:5px 8px; margin-top:8px; border-radius: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
[https://discord.gg/U8skDEA Official Discord] • [https://www.youtube.com/channel/UCU91hiBTfhZB5YBbQZlgCPg YouTube Channel]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Two side-by-side tables --&amp;gt;&lt;br /&gt;
{| style=&amp;quot;width:100%; border-spacing:0; margin:0;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:70%; border:1px solid var(--border-color-base); border-radius:5px; margin:0; padding: 15px; vertical-align:top; background: var(--color-surface-2);&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;padding:4px 8px; border-radius: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;float: right;&amp;quot;&amp;gt;[[File:Mod icon.png]]&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align:center; font-size:130%; font-weight: var(--font-weight-semi-bold); color: var(--color-emphasized); margin:0;&amp;quot;&amp;gt;The Mod&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Terramon Mod is a large and immersive mod for Terraria that seamlessly integrates the beloved world of Pokémon into the game. Dive into an adventure where you can explore, catch, and train over 150 Pokémon in the vast and diverse landscapes of Terraria. With refined mechanics and plenty to discover, Terramon is a fun experience for longtime Pokémon fans, casual players, and newcomers alike.&lt;br /&gt;
&lt;br /&gt;
You can download the mod from our [https://steamcommunity.com/sharedfiles/filedetails/?id=3435381419 Steam Workshop page] or directly from [https://github.com/JamzOJamz/Terramon/releases/download/0.1.3.2/Terramon.tmod here].&lt;br /&gt;
&lt;br /&gt;
Past versions of the mod can also be downloaded from our [[Version History]] page.&lt;br /&gt;
| style=&amp;quot;width:30%; border:1px solid var(--border-color-base); border-radius:5px; margin:0; padding: 15px; vertical-align:top; background: var(--color-surface-2);&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width:100%; text-align:center;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align: center; display: flex; flex-direction: column; gap: 4px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;padding:4px 8px; border-radius: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align:center; font-size:130%; font-weight: var(--font-weight-semi-bold); color: var(--color-emphasized); margin:0;&amp;quot;&amp;gt;Latest Supported Versions&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;font-size: 107%; border-radius: 5px;&amp;quot;&amp;gt;&#039;&#039;&#039;[[Version History|Terramon Mod]]&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;[[Beta 0.1.3.2]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;font-size: 107%; border-radius: 5px;&amp;quot;&amp;gt;&#039;&#039;&#039;[[tgc:TModLoader|tModLoader]]&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;2025.9.3.0&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;font-size: 107%; border-radius: 5px;&amp;quot;&amp;gt;&#039;&#039;&#039;[[tgc:Terraria|Terraria]]&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;1.4.4.9&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Three side-by-side tables --&amp;gt;&lt;br /&gt;
{| style=&amp;quot;width:100%; border-spacing:0; margin:0;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:33%; border:1px solid var(--border-color-base); border-radius:5px; margin:0; padding: 15px; vertical-align:top; background: var(--color-surface-2);&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;padding:4px 8px; border-radius: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align:center; font-size:130%; font-weight: var(--font-weight-semi-bold); color: var(--color-emphasized); margin:0;&amp;quot;&amp;gt;[[Poké Balls]]&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* {{item|Poké Ball|size=28px}}&lt;br /&gt;
* {{item|Premier Ball|size=28px}}&lt;br /&gt;
* {{item|Cherish Ball|size=28px}}&lt;br /&gt;
* {{item|Aether Ball|size=28px}}&lt;br /&gt;
* {{item|Great Ball|size=28px}}&lt;br /&gt;
* {{item|Ultra Ball|size=28px}}&lt;br /&gt;
* {{item|Master Ball|size=28px}}&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width:33%; border:1px solid var(--border-color-base); border-radius:5px; margin:0; padding: 15px; vertical-align:top; background: var(--color-surface-2);&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;padding:4px 8px; border-radius: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align:center; font-size:130%; font-weight: var(--font-weight-semi-bold); color: var(--color-emphasized); margin:0;&amp;quot;&amp;gt;[[Evolutionary items]]&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* {{item|Rare Candy|size=28px}}&lt;br /&gt;
* {{item|Fire Stone|size=24px}}&lt;br /&gt;
* {{item|Water Stone|size=24px}}&lt;br /&gt;
* {{item|Thunder Stone|size=24px}}&lt;br /&gt;
* {{item|Leaf Stone|size=24px}}&lt;br /&gt;
* {{item|Moon Stone|size=28px}}&lt;br /&gt;
* {{item|Linking Cord}}&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width:33%; border:1px solid var(--border-color-base); border-radius:5px; margin:0; padding: 15px; vertical-align:top; background: var(--color-surface-2);&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;padding:4px 8px; border-radius: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align:center; font-size:130%; font-weight: var(--font-weight-semi-bold); color: var(--color-emphasized); margin:0;&amp;quot;&amp;gt;Misc.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* {{item|Pokémon|image=Pikachu.png|size=28px}}&lt;br /&gt;
* {{item|PC|image=PC (Red).png}}&lt;br /&gt;
* {{item|Poké Mart Clerk|image=Poké Mart Clerk Head.png}}&lt;br /&gt;
* {{item|Apricorns|image=Apricorns.gif}}&lt;br /&gt;
* {{item|Shiny Charm|size=26px}}&lt;br /&gt;
* {{item|Recipes|image=Work Bench.png|size=26px}}&lt;br /&gt;
* {{item|Vanity items|image=Pokemon Trainer Cap.png|size=24px}}&lt;br /&gt;
* {{item|Music|image=Music Box (Pokémon Center).png|size=26px}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>JamzOJamz</name></author>
	</entry>
	<entry>
		<id>https://wiki.terramonmod.com/index.php?title=Module:Tr/loaddata&amp;diff=21</id>
		<title>Module:Tr/loaddata</title>
		<link rel="alternate" type="text/html" href="https://wiki.terramonmod.com/index.php?title=Module:Tr/loaddata&amp;diff=21"/>
		<updated>2025-11-23T20:05:08Z</updated>

		<summary type="html">&lt;p&gt;JamzOJamz: Created page with &amp;quot;-- Note:  -- It seems that objects/lists stored via luacache have a limit on the number of entities,  which is about 8k. -- Any object/list which has more then 8k entities or having such a large sub-object/sub-list will be truncated. -- Therefore, we encode the data into a string to get around this problem.  local cache = mw.ext.LuaCache  return { 	 	load = function(lang) 		local status, result = pcall(function () 			return mw.text.jsonDecode(cache.get(&amp;#039;tr__database-&amp;#039;..l...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- Note: &lt;br /&gt;
-- It seems that objects/lists stored via luacache have a limit on the number of entities,  which is about 8k.&lt;br /&gt;
-- Any object/list which has more then 8k entities or having such a large sub-object/sub-list will be truncated.&lt;br /&gt;
-- Therefore, we encode the data into a string to get around this problem.&lt;br /&gt;
&lt;br /&gt;
local cache = mw.ext.LuaCache&lt;br /&gt;
&lt;br /&gt;
return {&lt;br /&gt;
	&lt;br /&gt;
	load = function(lang)&lt;br /&gt;
		local status, result = pcall(function ()&lt;br /&gt;
			return mw.text.jsonDecode(cache.get(&#039;tr__database-&#039;..lang))&lt;br /&gt;
		end)&lt;br /&gt;
		if status then&lt;br /&gt;
			return result&lt;br /&gt;
		else&lt;br /&gt;
			-- fallback&lt;br /&gt;
			local info = require(&#039;Module:Tr/db-&#039;..lang) -- return table of mw.loadData() has a metatable, can not be used for cache.set and mw.loadData.&lt;br /&gt;
			&lt;br /&gt;
			-- add on wiki language list&lt;br /&gt;
			info.onWikiLangList = { [&#039;ko&#039;] = true }&lt;br /&gt;
			&lt;br /&gt;
			-- cache it. &lt;br /&gt;
			-- This cache can be purged by:&lt;br /&gt;
			-- * purge Module:tr/db-&amp;lt;lang&amp;gt; or Module:tr/db-&amp;lt;lang&amp;gt;/doc page&lt;br /&gt;
			-- * lua code: require(&#039;Module:Tr/loaddata&#039;).purge(&amp;lt;lang&amp;gt;)&lt;br /&gt;
			-- * template code: {{#invoke:tr|purge|lang=&amp;lt;lang&amp;gt;}}&lt;br /&gt;
			cache.set( &#039;tr__database-&#039;..lang, mw.text.jsonEncode(info))&lt;br /&gt;
			return info&lt;br /&gt;
		end&lt;br /&gt;
	end,&lt;br /&gt;
	&lt;br /&gt;
	purge = function(lang)&lt;br /&gt;
		cache.delete( &#039;tr__database-&#039;..lang)&lt;br /&gt;
	end&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>JamzOJamz</name></author>
	</entry>
	<entry>
		<id>https://wiki.terramonmod.com/index.php?title=Module:Tr&amp;diff=20</id>
		<title>Module:Tr</title>
		<link rel="alternate" type="text/html" href="https://wiki.terramonmod.com/index.php?title=Module:Tr&amp;diff=20"/>
		<updated>2025-11-23T20:04:10Z</updated>

		<summary type="html">&lt;p&gt;JamzOJamz: Created page with &amp;quot;local VariablesLua = mw.ext.VariablesLua  return {  	-- load database for template:tr 	-- from template: {{#invoke:tr|loadData|lang=&amp;lt;lang&amp;gt;}} 	loadData = function(frame) 		local lang = frame.args[&amp;#039;lang&amp;#039;] or &amp;#039;en&amp;#039; 		local database = mw.loadData( &amp;#039;Module:Tr/loaddata-&amp;#039;..lang) 		 		local prefix = &amp;#039;_tr:&amp;#039;..lang ..&amp;#039;:&amp;#039; 		for k,v in pairs(database.main) do 			VariablesLua.vardefine( prefix..k, v ) 		end 		-- {{#vardefine:_tr:&amp;lt;lang&amp;gt;:__OK__|y}} 		VariablesLua.vardefine(prefix .. &amp;#039;__O...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local VariablesLua = mw.ext.VariablesLua&lt;br /&gt;
&lt;br /&gt;
return { &lt;br /&gt;
	-- load database for template:tr&lt;br /&gt;
	-- from template: {{#invoke:tr|loadData|lang=&amp;lt;lang&amp;gt;}}&lt;br /&gt;
	loadData = function(frame)&lt;br /&gt;
		local lang = frame.args[&#039;lang&#039;] or &#039;en&#039;&lt;br /&gt;
		local database = mw.loadData( &#039;Module:Tr/loaddata-&#039;..lang) 		&lt;br /&gt;
		local prefix = &#039;_tr:&#039;..lang ..&#039;:&#039;&lt;br /&gt;
		for k,v in pairs(database.main) do&lt;br /&gt;
			VariablesLua.vardefine( prefix..k, v )&lt;br /&gt;
		end&lt;br /&gt;
		-- {{#vardefine:_tr:&amp;lt;lang&amp;gt;:__OK__|y}}&lt;br /&gt;
		VariablesLua.vardefine(prefix .. &#039;__OK__&#039;, &#039;y&#039;)&lt;br /&gt;
		prefix = prefix .. &#039;link:&#039;&lt;br /&gt;
		for k,v in pairs(database.pagename) do&lt;br /&gt;
			VariablesLua.vardefine( prefix..k, v )&lt;br /&gt;
		end&lt;br /&gt;
	end,&lt;br /&gt;
	&lt;br /&gt;
	-- load database for template:tr2e&lt;br /&gt;
	-- from template: {{#invoke:tr|loadData2e|lang=&amp;lt;lang&amp;gt;}}&lt;br /&gt;
	loadData2e = function(frame)&lt;br /&gt;
		local lang = frame.args[&#039;lang&#039;] or &#039;en&#039;&lt;br /&gt;
		local database = mw.loadData( &#039;Module:Tr/loaddata-&#039;..lang) 		&lt;br /&gt;
		local prefix = &#039;_tr2e:&#039;..lang ..&#039;:&#039;&lt;br /&gt;
		for k,v in pairs(database.main) do&lt;br /&gt;
			VariablesLua.vardefine( prefix..v, k )&lt;br /&gt;
		end&lt;br /&gt;
		-- {{#vardefine:_tr2e:&amp;lt;lang&amp;gt;:__OK__|y}}&lt;br /&gt;
		VariablesLua.vardefine(prefix .. &#039;__OK__&#039;, &#039;y&#039;)&lt;br /&gt;
	end,&lt;br /&gt;
	&lt;br /&gt;
	-- purge database cache&lt;br /&gt;
	-- from template: {{#invoke:tr|purge|lang=&amp;lt;lang&amp;gt;}}&lt;br /&gt;
	-- from module: require(&#039;Module:tr&#039;).purge(&amp;lt;lang&amp;gt;)&lt;br /&gt;
	purge = function(frame)&lt;br /&gt;
		local lang&lt;br /&gt;
		if frame == mw.getCurrentFrame() then&lt;br /&gt;
			lang = frame.args[&#039;lang&#039;]&lt;br /&gt;
		else&lt;br /&gt;
			lang = frame&lt;br /&gt;
		end&lt;br /&gt;
		lang = lang or &#039;en&#039;&lt;br /&gt;
		require(&#039;Module:Tr/loaddata&#039;).purge(lang)&lt;br /&gt;
	end,&lt;br /&gt;
&lt;br /&gt;
	-- for other module. Functionally identical to {{tr|&amp;lt;input&amp;gt;|lang=&amp;lt;lang&amp;gt;|link=y}}.&lt;br /&gt;
	translateLink = function(input, lang)&lt;br /&gt;
		local database = mw.loadData(&#039;Module:Tr/loaddata-&#039;..lang)&lt;br /&gt;
		local t = database.pagename[input]&lt;br /&gt;
		if not t then&lt;br /&gt;
			if database.onWikiLangList[lang] then&lt;br /&gt;
			   	t = input..&#039;/&#039;..lang -- &amp;lt;enpagename&amp;gt;/&amp;lt;lang&amp;gt;&lt;br /&gt;
			else&lt;br /&gt;
				t = database.main[input] or input -- use {{tr}} as fallback&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		return t&lt;br /&gt;
	end,&lt;br /&gt;
	&lt;br /&gt;
	-- for other module. Functionally identical to {{tr|&amp;lt;input&amp;gt;|lang=&amp;lt;lang&amp;gt;}}.&lt;br /&gt;
	translate = function(input, lang)&lt;br /&gt;
		local database = mw.loadData(&#039;Module:Tr/loaddata-&#039;..lang)&lt;br /&gt;
		return database.main[input] or input&lt;br /&gt;
	end,&lt;br /&gt;
	&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>JamzOJamz</name></author>
	</entry>
	<entry>
		<id>https://wiki.terramonmod.com/index.php?title=Main_Page&amp;diff=19</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.terramonmod.com/index.php?title=Main_Page&amp;diff=19"/>
		<updated>2025-11-23T20:03:44Z</updated>

		<summary type="html">&lt;p&gt;JamzOJamz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#seo:&lt;br /&gt;
|title=The Terramon Wiki&lt;br /&gt;
}}&lt;br /&gt;
{| style=&amp;quot;width:100%; text-align:center; border:1px solid var(--border-color-base); border-radius:5px; margin:0; background: var(--color-surface-2);&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding:13px;&amp;quot; |&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:170%; font-weight:600; color: var(--color-emphasized); font-weight: var(--font-weight-semi-bold);&amp;quot;&amp;gt;&lt;br /&gt;
Welcome to the &amp;lt;span style=&amp;quot;font-weight:900;&amp;quot;&amp;gt;Official Terramon Mod Wiki&amp;lt;/span&amp;gt;,&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
the most comprehensive source of information about the mod.&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;padding:5px 8px; margin-top:8px; border-radius: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
[https://discord.gg/U8skDEA Official Discord] • [https://www.youtube.com/channel/UCU91hiBTfhZB5YBbQZlgCPg YouTube Channel]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Two side-by-side tables --&amp;gt;&lt;br /&gt;
{| style=&amp;quot;width:100%; border-spacing:0; margin:0;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:70%; border:1px solid var(--border-color-base); border-radius:5px; margin:0; padding: 15px; vertical-align:top; background: var(--color-surface-2);&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;padding:4px 8px; border-radius: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;float: right;&amp;quot;&amp;gt;[[File:Mod icon.png]]&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align:center; font-size:130%; font-weight: var(--font-weight-semi-bold); color: var(--color-emphasized); margin:0;&amp;quot;&amp;gt;The Mod&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Terramon Mod is a large and immersive mod for Terraria that seamlessly integrates the beloved world of Pokémon into the game. Dive into an adventure where you can explore, catch, and train over 150 Pokémon in the vast and diverse landscapes of Terraria. With refined mechanics and plenty to discover, Terramon is a fun experience for longtime Pokémon fans, casual players, and newcomers alike.&lt;br /&gt;
&lt;br /&gt;
You can download the mod from our [https://steamcommunity.com/sharedfiles/filedetails/?id=3435381419 Steam Workshop page] or directly from [https://github.com/JamzOJamz/Terramon/releases/download/0.1.3.2/Terramon.tmod here].&lt;br /&gt;
&lt;br /&gt;
Past versions of the mod can also be downloaded from our [[Version History]] page.&lt;br /&gt;
| style=&amp;quot;width:30%; border:1px solid var(--border-color-base); border-radius:5px; margin:0; padding: 15px; vertical-align:top; background: var(--color-surface-2);&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width:100%; text-align:center;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align: center; display: flex; flex-direction: column; gap: 4px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;padding:4px 8px; border-radius: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align:center; font-size:130%; font-weight: var(--font-weight-semi-bold); color: var(--color-emphasized); margin:0;&amp;quot;&amp;gt;Latest Supported Versions&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;font-size: 107%; border-radius: 5px;&amp;quot;&amp;gt;&#039;&#039;&#039;[[Version History|Terramon Mod]]&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;[[Beta 0.1.3.2]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;font-size: 107%; border-radius: 5px;&amp;quot;&amp;gt;&#039;&#039;&#039;[[tgc:TModLoader|tModLoader]]&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;2025.9.3.0&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;font-size: 107%; border-radius: 5px;&amp;quot;&amp;gt;&#039;&#039;&#039;[[tgc:Terraria|Terraria]]&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;1.4.4.9&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Three side-by-side tables --&amp;gt;&lt;br /&gt;
{| style=&amp;quot;width:100%; border-spacing:0; margin:0;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:33%; border:1px solid var(--border-color-base); border-radius:5px; margin:0; padding: 15px; vertical-align:top; background: var(--color-surface-2);&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;padding:4px 8px; border-radius: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align:center; font-size:130%; font-weight: var(--font-weight-semi-bold); color: var(--color-emphasized); margin:0;&amp;quot;&amp;gt;[[Poké Balls]]&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* {{item|Poké Ball|size=28px}}&lt;br /&gt;
* {{item|Premier Ball|size=28px}}&lt;br /&gt;
* {{item|Cherish Ball|size=28px}}&lt;br /&gt;
* {{item|Aether Ball|size=28px}}&lt;br /&gt;
* {{item|Great Ball|size=28px}}&lt;br /&gt;
* {{item|Ultra Ball|size=28px}}&lt;br /&gt;
* {{item|Master Ball|size=28px}}&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width:33%; border:1px solid var(--border-color-base); border-radius:5px; margin:0; padding: 15px; vertical-align:top; background: var(--color-surface-2);&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;padding:4px 8px; border-radius: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align:center; font-size:130%; font-weight: var(--font-weight-semi-bold); color: var(--color-emphasized); margin:0;&amp;quot;&amp;gt;[[Evolutionary items]]&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* {{item|Rare Candy|size=28px}}&lt;br /&gt;
* {{item|Fire Stone|size=24px}}&lt;br /&gt;
* {{item|Water Stone|size=24px}}&lt;br /&gt;
* {{item|Thunder Stone|size=24px}}&lt;br /&gt;
* {{item|Leaf Stone|size=24px}}&lt;br /&gt;
* {{item|Moon Stone|size=28px}}&lt;br /&gt;
* {{item|Linking Cord}}&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width:33%; border:1px solid var(--border-color-base); border-radius:5px; margin:0; padding: 15px; vertical-align:top; background: var(--color-surface-2);&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;padding:4px 8px; border-radius: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align:center; font-size:130%; font-weight: var(--font-weight-semi-bold); color: var(--color-emphasized); margin:0;&amp;quot;&amp;gt;Misc.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* {{item|Pokémon|image=Pikachu.png|size=28px}}&lt;br /&gt;
* {{item|PC|image=PC (Red).png}}&lt;br /&gt;
* {{item|Poké Mart Clerk|image=Poké Mart Clerk Head.png}}&lt;br /&gt;
* {{item|Apricorns|image=Apricorns.gif}}&lt;br /&gt;
* {{item|Shiny Charm|size=26px}}&lt;br /&gt;
* {{item|Recipes|image=Work Bench.png|size=26px}}&lt;br /&gt;
* {{item|Vanity items|image=Pokemon Trainer Cap.png|size=24px}}&lt;br /&gt;
* {{item|Music|image=Music Box (Pokémon Center).png|size=26px}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>JamzOJamz</name></author>
	</entry>
	<entry>
		<id>https://wiki.terramonmod.com/index.php?title=Main_Page&amp;diff=18</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.terramonmod.com/index.php?title=Main_Page&amp;diff=18"/>
		<updated>2025-11-23T20:03:30Z</updated>

		<summary type="html">&lt;p&gt;JamzOJamz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#seo:&lt;br /&gt;
|title=The Terramon Wikia&lt;br /&gt;
}}&lt;br /&gt;
{| style=&amp;quot;width:100%; text-align:center; border:1px solid var(--border-color-base); border-radius:5px; margin:0; background: var(--color-surface-2);&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding:13px;&amp;quot; |&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:170%; font-weight:600; color: var(--color-emphasized); font-weight: var(--font-weight-semi-bold);&amp;quot;&amp;gt;&lt;br /&gt;
Welcome to the &amp;lt;span style=&amp;quot;font-weight:900;&amp;quot;&amp;gt;Official Terramon Mod Wiki&amp;lt;/span&amp;gt;,&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
the most comprehensive source of information about the mod.&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;padding:5px 8px; margin-top:8px; border-radius: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
[https://discord.gg/U8skDEA Official Discord] • [https://www.youtube.com/channel/UCU91hiBTfhZB5YBbQZlgCPg YouTube Channel]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Two side-by-side tables --&amp;gt;&lt;br /&gt;
{| style=&amp;quot;width:100%; border-spacing:0; margin:0;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:70%; border:1px solid var(--border-color-base); border-radius:5px; margin:0; padding: 15px; vertical-align:top; background: var(--color-surface-2);&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;padding:4px 8px; border-radius: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;float: right;&amp;quot;&amp;gt;[[File:Mod icon.png]]&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align:center; font-size:130%; font-weight: var(--font-weight-semi-bold); color: var(--color-emphasized); margin:0;&amp;quot;&amp;gt;The Mod&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Terramon Mod is a large and immersive mod for Terraria that seamlessly integrates the beloved world of Pokémon into the game. Dive into an adventure where you can explore, catch, and train over 150 Pokémon in the vast and diverse landscapes of Terraria. With refined mechanics and plenty to discover, Terramon is a fun experience for longtime Pokémon fans, casual players, and newcomers alike.&lt;br /&gt;
&lt;br /&gt;
You can download the mod from our [https://steamcommunity.com/sharedfiles/filedetails/?id=3435381419 Steam Workshop page] or directly from [https://github.com/JamzOJamz/Terramon/releases/download/0.1.3.2/Terramon.tmod here].&lt;br /&gt;
&lt;br /&gt;
Past versions of the mod can also be downloaded from our [[Version History]] page.&lt;br /&gt;
| style=&amp;quot;width:30%; border:1px solid var(--border-color-base); border-radius:5px; margin:0; padding: 15px; vertical-align:top; background: var(--color-surface-2);&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width:100%; text-align:center;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align: center; display: flex; flex-direction: column; gap: 4px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;padding:4px 8px; border-radius: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align:center; font-size:130%; font-weight: var(--font-weight-semi-bold); color: var(--color-emphasized); margin:0;&amp;quot;&amp;gt;Latest Supported Versions&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;font-size: 107%; border-radius: 5px;&amp;quot;&amp;gt;&#039;&#039;&#039;[[Version History|Terramon Mod]]&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;[[Beta 0.1.3.2]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;font-size: 107%; border-radius: 5px;&amp;quot;&amp;gt;&#039;&#039;&#039;[[tgc:TModLoader|tModLoader]]&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;2025.9.3.0&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;font-size: 107%; border-radius: 5px;&amp;quot;&amp;gt;&#039;&#039;&#039;[[tgc:Terraria|Terraria]]&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;1.4.4.9&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Three side-by-side tables --&amp;gt;&lt;br /&gt;
{| style=&amp;quot;width:100%; border-spacing:0; margin:0;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:33%; border:1px solid var(--border-color-base); border-radius:5px; margin:0; padding: 15px; vertical-align:top; background: var(--color-surface-2);&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;padding:4px 8px; border-radius: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align:center; font-size:130%; font-weight: var(--font-weight-semi-bold); color: var(--color-emphasized); margin:0;&amp;quot;&amp;gt;[[Poké Balls]]&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* {{item|Poké Ball|size=28px}}&lt;br /&gt;
* {{item|Premier Ball|size=28px}}&lt;br /&gt;
* {{item|Cherish Ball|size=28px}}&lt;br /&gt;
* {{item|Aether Ball|size=28px}}&lt;br /&gt;
* {{item|Great Ball|size=28px}}&lt;br /&gt;
* {{item|Ultra Ball|size=28px}}&lt;br /&gt;
* {{item|Master Ball|size=28px}}&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width:33%; border:1px solid var(--border-color-base); border-radius:5px; margin:0; padding: 15px; vertical-align:top; background: var(--color-surface-2);&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;padding:4px 8px; border-radius: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align:center; font-size:130%; font-weight: var(--font-weight-semi-bold); color: var(--color-emphasized); margin:0;&amp;quot;&amp;gt;[[Evolutionary items]]&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* {{item|Rare Candy|size=28px}}&lt;br /&gt;
* {{item|Fire Stone|size=24px}}&lt;br /&gt;
* {{item|Water Stone|size=24px}}&lt;br /&gt;
* {{item|Thunder Stone|size=24px}}&lt;br /&gt;
* {{item|Leaf Stone|size=24px}}&lt;br /&gt;
* {{item|Moon Stone|size=28px}}&lt;br /&gt;
* {{item|Linking Cord}}&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width:33%; border:1px solid var(--border-color-base); border-radius:5px; margin:0; padding: 15px; vertical-align:top; background: var(--color-surface-2);&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;padding:4px 8px; border-radius: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align:center; font-size:130%; font-weight: var(--font-weight-semi-bold); color: var(--color-emphasized); margin:0;&amp;quot;&amp;gt;Misc.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* {{item|Pokémon|image=Pikachu.png|size=28px}}&lt;br /&gt;
* {{item|PC|image=PC (Red).png}}&lt;br /&gt;
* {{item|Poké Mart Clerk|image=Poké Mart Clerk Head.png}}&lt;br /&gt;
* {{item|Apricorns|image=Apricorns.gif}}&lt;br /&gt;
* {{item|Shiny Charm|size=26px}}&lt;br /&gt;
* {{item|Recipes|image=Work Bench.png|size=26px}}&lt;br /&gt;
* {{item|Vanity items|image=Pokemon Trainer Cap.png|size=24px}}&lt;br /&gt;
* {{item|Music|image=Music Box (Pokémon Center).png|size=26px}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>JamzOJamz</name></author>
	</entry>
	<entry>
		<id>https://wiki.terramonmod.com/index.php?title=Module:Item&amp;diff=17</id>
		<title>Module:Item</title>
		<link rel="alternate" type="text/html" href="https://wiki.terramonmod.com/index.php?title=Module:Item&amp;diff=17"/>
		<updated>2025-11-23T20:00:40Z</updated>

		<summary type="html">&lt;p&gt;JamzOJamz: Created page with &amp;quot;------- l10n info -------------- local l10n_info = { 	[&amp;#039;en&amp;#039;] = { 		[&amp;#039;id_text_item&amp;#039;] = &amp;#039;Internal Item ID: &amp;#039;, 		[&amp;#039;id_text_tile&amp;#039;] = &amp;#039;Internal Tile ID: &amp;#039;, 		[&amp;#039;id_text_wall&amp;#039;] = &amp;#039;Internal Wall ID: &amp;#039;, 		[&amp;#039;id_text_npc&amp;#039;] = &amp;#039;Internal NPC ID: &amp;#039;, 		[&amp;#039;id_text_mount&amp;#039;] = &amp;#039;Internal Mount ID: &amp;#039;, 		[&amp;#039;id_text_buff&amp;#039;] = &amp;#039;Internal Buff ID: &amp;#039;, 		[&amp;#039;id_text_projectile&amp;#039;] = &amp;#039;Internal Projectile ID: &amp;#039;,...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;------- l10n info --------------&lt;br /&gt;
local l10n_info = {&lt;br /&gt;
	[&#039;en&#039;] = {&lt;br /&gt;
		[&#039;id_text_item&#039;] = &#039;Internal [[Item IDs|Item ID]]: &#039;,&lt;br /&gt;
		[&#039;id_text_tile&#039;] = &#039;Internal [[Tile IDs|Tile ID]]: &#039;,&lt;br /&gt;
		[&#039;id_text_wall&#039;] = &#039;Internal [[Wall IDs|Wall ID]]: &#039;,&lt;br /&gt;
		[&#039;id_text_npc&#039;] = &#039;Internal [[NPC IDs|NPC ID]]: &#039;,&lt;br /&gt;
		[&#039;id_text_mount&#039;] = &#039;Internal [[Mount IDs|Mount ID]]: &#039;,&lt;br /&gt;
		[&#039;id_text_buff&#039;] = &#039;Internal [[Buff IDs|Buff ID]]: &#039;,&lt;br /&gt;
		[&#039;id_text_projectile&#039;] = &#039;Internal [[Projectile IDs|Projectile ID]]: &#039;,&lt;br /&gt;
		[&#039;id_text_armor&#039;] = &#039;Internal [[Armor IDs|Armor ID]]: &#039;,&lt;br /&gt;
	},&lt;br /&gt;
	[&#039;de&#039;] = {&lt;br /&gt;
		[&#039;id_text_item&#039;] = &#039;Interne [[Gegenstands-IDs|Gegenstands-ID]]: &#039;,&lt;br /&gt;
		[&#039;id_text_tile&#039;] = &#039;Interne [[Feld-IDs|Feld-ID]]: &#039;,&lt;br /&gt;
		[&#039;id_text_wall&#039;] = &#039;Interne [[Wand-IDs|Wand-ID]]: &#039;,&lt;br /&gt;
		[&#039;id_text_npc&#039;] = &#039;Interne [[NPC-IDs|NPC-ID]]: &#039;,&lt;br /&gt;
		[&#039;id_text_mount&#039;] = &#039;Interne [[Reittier-IDs|Reittier-ID]]: &#039;,&lt;br /&gt;
		[&#039;id_text_buff&#039;] = &#039;Interne [[Statuseffekt-IDs|Statuseffekt-ID]]: &#039;,&lt;br /&gt;
		[&#039;id_text_projectile&#039;] = &#039;Interne [[Projektil-IDs|Projektil-ID]]: &#039;,&lt;br /&gt;
		[&#039;id_text_armor&#039;] = &#039;Interne [[Projektil-IDs|Projektil-ID]]: &#039;,&lt;br /&gt;
	},&lt;br /&gt;
	[&#039;fr&#039;] = {&lt;br /&gt;
		[&#039;id_text_item&#039;] = &#039;[[Item IDs|ID interne de l\&#039;objet]]&amp;amp;#32;: &#039;,&lt;br /&gt;
		[&#039;id_text_tile&#039;] = &#039;[[Tile IDs|ID interne de la tuile]]&amp;amp;#32;: &#039;,&lt;br /&gt;
		[&#039;id_text_wall&#039;] = &#039;[[Wall IDs|ID interne du mur]]&amp;amp;#32;: &#039;,&lt;br /&gt;
		[&#039;id_text_npc&#039;] = &#039;[[NPC IDs|ID interne du PNJ]]&amp;amp;#32;: &#039;,&lt;br /&gt;
		[&#039;id_text_mount&#039;] = &#039;[[Mount IDs|ID interne de la monture]]&amp;amp;#32;: &#039;,&lt;br /&gt;
		[&#039;id_text_buff&#039;] = &#039;[[Buff IDs|ID interne du buff]]&amp;amp;#32;: &#039;,&lt;br /&gt;
		[&#039;id_text_projectile&#039;] = &#039;[[Projectile IDs|ID interne du projectile]]&amp;amp;#32;: &#039;,&lt;br /&gt;
		[&#039;id_text_armor&#039;] = &#039;[[Armor IDs|ID interne de l\&#039;armure]]&amp;amp;#32;: &#039;,&lt;br /&gt;
	},&lt;br /&gt;
	[&#039;hu&#039;] = {&lt;br /&gt;
		[&#039;id_text_item&#039;] = &#039;[[Tárgyi adatértékek|Tárgyi]] adatértéke: &#039;,&lt;br /&gt;
		[&#039;id_text_tile&#039;] = &#039;[[Kockabeli adatértékek|Kockabeli]] adatértéke: &#039;,&lt;br /&gt;
		[&#039;id_text_wall&#039;] = &#039;[[Fali adatértékek|Fali]] adatértéke: &#039;,&lt;br /&gt;
		[&#039;id_text_npc&#039;] = &#039;[[Ellenféli adatértékek|Ellenféli]] adatértéke: &#039;,&lt;br /&gt;
		[&#039;id_text_mount&#039;] = &#039;[[Hátasbeli adatértékek|Hátasbeli]] adatértéke: &#039;,&lt;br /&gt;
		[&#039;id_text_buff&#039;] = &#039;[[Hatásbeli adatértékek|Hatásbeli]] adatértéke: &#039;,&lt;br /&gt;
		[&#039;id_text_projectile&#039;] = &#039;[[Lövedéki adatértékek|Lövedéki]] adatértéke: &#039;,&lt;br /&gt;
		[&#039;id_text_armor&#039;] = &#039;[[Páncélbeli adatértékek|Páncélbeli]] adatértéke: &#039;,&lt;br /&gt;
	},&lt;br /&gt;
	[&#039;it&#039;] = {&lt;br /&gt;
		[&#039;id_text_item&#039;] = &#039;[[Item IDs/it|ID Oggetto Interno]]: &#039;,&lt;br /&gt;
		[&#039;id_text_tile&#039;] = &#039;[[Tile IDs/it|ID Tile Interno]]: &#039;,&lt;br /&gt;
		[&#039;id_text_wall&#039;] = &#039;[[Wall IDs/it|ID Muro Interno]]: &#039;,&lt;br /&gt;
		[&#039;id_text_npc&#039;] = &#039;[[NPC IDs/it|ID PNG Interno]]: &#039;,&lt;br /&gt;
		[&#039;id_text_mount&#039;] = &#039;[[Mount IDs/it|ID Montatura Interna]]: &#039;,&lt;br /&gt;
		[&#039;id_text_buff&#039;] = &#039;[[Buff IDs/it|ID Buff Interno]]: &#039;,&lt;br /&gt;
		[&#039;id_text_projectile&#039;] = &#039;[[Projectile IDs/it|ID Proiettile Interno]]: &#039;,&lt;br /&gt;
		[&#039;id_text_armor&#039;] = &#039;[[Armor IDs/it|ID Armatura Interna]]: &#039;,&lt;br /&gt;
	},&lt;br /&gt;
	[&#039;ru&#039;] = {&lt;br /&gt;
		[&#039;id_text_item&#039;] = &#039;Внутренний [[Идентификаторы предметов|ID предмета]]: &#039;,&lt;br /&gt;
		[&#039;id_text_tile&#039;] = &#039;Внутренний [[Идентификаторы тайлов|ID тайла]]: &#039;,&lt;br /&gt;
		[&#039;id_text_wall&#039;] = &#039;Внутренний [[Идентификаторы стен|ID стены]]: &#039;,&lt;br /&gt;
		[&#039;id_text_npc&#039;] = &#039;Внутренний [[Идентификаторы существ|ID существа]]: &#039;,&lt;br /&gt;
		[&#039;id_text_mount&#039;] = &#039;Внутренний [[Идентификаторы средств передвижения|ID сред. передвиж.]]: &#039;,&lt;br /&gt;
		[&#039;id_text_buff&#039;] = &#039;Внутренний [[Идентификаторы бафов|ID бафа]]: &#039;,&lt;br /&gt;
		[&#039;id_text_projectile&#039;] = &#039;Внутренний [[Идентификаторы снарядов|ID снаряда]]: &#039;,&lt;br /&gt;
		[&#039;id_text_armor&#039;] = &#039;Внутренний [[Идентификаторы брони|ID брони]]: &#039;,&lt;br /&gt;
	},&lt;br /&gt;
	[&#039;zh&#039;] = {&lt;br /&gt;
		[&#039;id_text_item&#039;] = &#039;内部[[物品 ID]]：&#039;,&lt;br /&gt;
		[&#039;id_text_tile&#039;] = &#039;内部[[图格 ID]]：&#039;,&lt;br /&gt;
		[&#039;id_text_wall&#039;] = &#039;内部[[墙 ID]]：&#039;,&lt;br /&gt;
		[&#039;id_text_npc&#039;] = &#039;内部 [[NPC ID]]：&#039;,&lt;br /&gt;
		[&#039;id_text_mount&#039;] = &#039;内部[[坐骑 ID]]：&#039;,&lt;br /&gt;
		[&#039;id_text_buff&#039;] = &#039;内部[[增益 ID]]：&#039;,&lt;br /&gt;
		[&#039;id_text_projectile&#039;] = &#039;内部[[射弹 ID]]：&#039;,&lt;br /&gt;
		[&#039;id_text_armor&#039;] = &#039;内部[[盔甲 ID]]：&#039;,&lt;br /&gt;
	},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
------- The following is not related to l10n. --------------&lt;br /&gt;
&lt;br /&gt;
local trim = mw.text.trim&lt;br /&gt;
local cargo = mw.ext.cargo&lt;br /&gt;
&lt;br /&gt;
local tr = require(&#039;Module:Tr&#039;)&lt;br /&gt;
&lt;br /&gt;
local currentFrame&lt;br /&gt;
local args_table&lt;br /&gt;
local lang&lt;br /&gt;
local l10n_table&lt;br /&gt;
&lt;br /&gt;
local l10n = function(key)&lt;br /&gt;
	return l10n_table[key] or l10n_info[&#039;en&#039;][key]&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local getArg = function(key)&lt;br /&gt;
	local value = args_table[key]&lt;br /&gt;
	if not value then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	value = trim(value)&lt;br /&gt;
	if value == &#039;&#039; then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	return value&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function parse(str)&lt;br /&gt;
	local args = {}&lt;br /&gt;
	for s in string.gmatch(str, &#039;%b@^&#039;) do &lt;br /&gt;
		local k,v = string.match(s, &#039;^@(.-):(.*)^$&#039;)&lt;br /&gt;
		args[k] = v&lt;br /&gt;
	end&lt;br /&gt;
	args[1] = args[&#039;name&#039;]&lt;br /&gt;
	args[2] = args[&#039;text&#039;]&lt;br /&gt;
	return args&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- credit: http://richard.warburton.it&lt;br /&gt;
-- this version is with trim.&lt;br /&gt;
local function explode(div,str) &lt;br /&gt;
	if (div==&#039;&#039;) then return false end&lt;br /&gt;
	local pos,arr = 0,{}&lt;br /&gt;
	-- for each divider found&lt;br /&gt;
	for st,sp in function() return string.find(str,div,pos,true) end do&lt;br /&gt;
		arr[#arr + 1] = trim(string.sub(str,pos,st-1)) -- Attach chars left of current divider&lt;br /&gt;
		pos = sp + 1 -- Jump past current divider&lt;br /&gt;
	end&lt;br /&gt;
	arr[#arr + 1] = trim(string.sub(str,pos)) -- Attach chars right of last divider&lt;br /&gt;
	return arr&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function parseSize(size)&lt;br /&gt;
	if not size then return end&lt;br /&gt;
	local basescale, width, height&lt;br /&gt;
	size, basescale = unpack(explode(&#039;*&#039;, size))&lt;br /&gt;
	if size ~= &#039;&#039; then&lt;br /&gt;
		width, height = unpack(explode(&#039;x&#039;, string.gsub(size, &#039;px&#039;, &#039;&#039;)))&lt;br /&gt;
		width, height = tonumber(width), tonumber(height)&lt;br /&gt;
		if width == 0 then width = nil end&lt;br /&gt;
		if height == 0 then height = nil end&lt;br /&gt;
	end&lt;br /&gt;
	return basescale, width, height&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getInfoFromCargo(image)&lt;br /&gt;
	-- try to get from cargo cache&lt;br /&gt;
	local result = mw.ext.cargo.query(&#039;Imageinfo&#039;, &#039;width, height, cached&#039;, {&lt;br /&gt;
		where = &#039;image=&#039;.. &amp;quot;&#039;&amp;quot;..image:gsub(&amp;quot;&#039;&amp;quot;, &amp;quot;\\&#039;&amp;quot;):gsub(&amp;quot;&amp;amp;#39;&amp;quot;, &amp;quot;\\&#039;&amp;quot;)..&amp;quot;&#039;&amp;quot;,&lt;br /&gt;
		orderBy = &amp;quot;cached DESC&amp;quot;,&lt;br /&gt;
		limit = 1,&lt;br /&gt;
	})&lt;br /&gt;
	for _, row in ipairs(result) do&lt;br /&gt;
		return tonumber(row[&#039;width&#039;]), tonumber(row[&#039;height&#039;]), row[&#039;cached&#039;]&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function storeInfoToCargo(image)&lt;br /&gt;
	local width, height&lt;br /&gt;
	width = tonumber(currentFrame:callParserFunction( &#039;#imgw&#039;, image))&lt;br /&gt;
	if width and width ~= 0 then -- save one expensive call when the file is not a valid image.&lt;br /&gt;
		height = tonumber(currentFrame:callParserFunction( &#039;#imgh&#039;, image))&lt;br /&gt;
		if height and height ~= 0 then&lt;br /&gt;
			currentFrame:callParserFunction(&#039;#cargo_store:_table=Imageinfo&#039;,{&lt;br /&gt;
				image = image,&lt;br /&gt;
				width = width,&lt;br /&gt;
				height = height,&lt;br /&gt;
				cached = os.time(),&lt;br /&gt;
			})&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return width, height&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getSizeInfo(image)&lt;br /&gt;
	local width, height, cached = getInfoFromCargo(image)&lt;br /&gt;
	-- cache missed, init cache&lt;br /&gt;
	if not cached then&lt;br /&gt;
		width, height = storeInfoToCargo(image)&lt;br /&gt;
	end&lt;br /&gt;
	if width == 0 then width = nil end&lt;br /&gt;
	if height == 0 then height = nil end&lt;br /&gt;
	return width, height&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getImageSize(image, width, height, scale, maxwidth, maxheight)&lt;br /&gt;
	-- get size info from image file itself (may be expensive)&lt;br /&gt;
	local w, h = getSizeInfo(image) -- store data to cache&lt;br /&gt;
&lt;br /&gt;
	if not width and not height and (scale or maxwidth or maxheight) then&lt;br /&gt;
		width, height = w, h&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- apply scale to width/height if needed&lt;br /&gt;
	if scale then&lt;br /&gt;
		if width then width = width * scale end&lt;br /&gt;
		if height then height = height * scale end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- apply maxwidth/maxheight.&lt;br /&gt;
	if maxwidth then&lt;br /&gt;
		if width then&lt;br /&gt;
			if width &amp;gt; maxwidth then width = maxwidth end&lt;br /&gt;
		else&lt;br /&gt;
			if height then width = maxwidth end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if maxheight then&lt;br /&gt;
		if height then&lt;br /&gt;
			if height &amp;gt; maxheight then height = maxheight end&lt;br /&gt;
		else&lt;br /&gt;
			if width then height = maxheight end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- rounding&lt;br /&gt;
	if width then width = math.ceil(width) end&lt;br /&gt;
	if height then height = math.ceil(height) end&lt;br /&gt;
&lt;br /&gt;
	return width, height&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function parseMaxSize(maxsize)&lt;br /&gt;
	if not maxsize then return end&lt;br /&gt;
	local maxwidth, maxheight = unpack(explode(&#039;x&#039;, string.gsub(maxsize, &#039;px&#039;, &#039;&#039;)))&lt;br /&gt;
	maxwidth, maxheight = tonumber(maxwidth), tonumber(maxheight)&lt;br /&gt;
	if maxwidth == 0 then maxwidth = nil end&lt;br /&gt;
	if maxheight == 0 then maxheight = nil end&lt;br /&gt;
	return maxwidth, maxheight&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function imagecode(image, link, text, size, scale, maxsize)&lt;br /&gt;
	local image_output = &#039;[[File:&#039; .. image .. &#039;|link=&#039;.. link .. &#039;|&#039; .. text&lt;br /&gt;
	if size or scale or maxsize then&lt;br /&gt;
		local basescale, width, height = parseSize(size) -- width,height: number or nil&lt;br /&gt;
		scale = (tonumber(scale) or 1) * (tonumber(basescale) or 1)&lt;br /&gt;
		if scale == 0 or scale == 1 then&lt;br /&gt;
			scale = nil&lt;br /&gt;
		end&lt;br /&gt;
		local maxwidth, maxheight = parseMaxSize(maxsize)&lt;br /&gt;
		width, height = getImageSize(image, width, height, scale, maxwidth, maxheight) -- can be 0&lt;br /&gt;
		if width or height then&lt;br /&gt;
			return image_output .. &#039;|&#039; .. (width or &#039;&#039;) .. &#039;x&#039; .. (height or &#039;&#039;) .. &#039;px]]&#039;&lt;br /&gt;
		else&lt;br /&gt;
			return image_output .. &#039;]]&#039;&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		return image_output .. &#039;]]&#039;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function images(image, link, text, size, scale, maxsize)&lt;br /&gt;
	&lt;br /&gt;
	if not image:find(&#039;/&#039;) then&lt;br /&gt;
		return imagecode(image, link, text, size, scale, maxsize)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	image = explode(&#039;/&#039;, image)&lt;br /&gt;
	local result = &#039;&#039;&lt;br /&gt;
	if size and size:find(&#039;/&#039;) then&lt;br /&gt;
		size = explode(&#039;/&#039;, size)&lt;br /&gt;
		for i, v in ipairs(image) do&lt;br /&gt;
			result = result .. imagecode(v, link, text, size[i], scale, maxsize)&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		for i, v in ipairs(image) do&lt;br /&gt;
			result = result .. imagecode(v, link, text, size, scale, maxsize)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return result&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local getIdText = function(_type)&lt;br /&gt;
	local id_text&lt;br /&gt;
	if _type == &#039;item&#039; then -- a shortcut for faster&lt;br /&gt;
		id_text = l10n(&#039;id_text_item&#039;)&lt;br /&gt;
	elseif _type == &#039;tile&#039; then&lt;br /&gt;
		id_text = l10n(&#039;id_text_tile&#039;)&lt;br /&gt;
	elseif _type == &#039;wall&#039; then&lt;br /&gt;
		id_text = l10n(&#039;id_text_wall&#039;)&lt;br /&gt;
	elseif _type == &#039;npc&#039; then&lt;br /&gt;
		id_text = l10n(&#039;id_text_npc&#039;)&lt;br /&gt;
	elseif _type == &#039;mount&#039; then&lt;br /&gt;
		id_text = l10n(&#039;id_text_mount&#039;)&lt;br /&gt;
	elseif _type == &#039;buff&#039; or _type == &#039;debuff&#039; then&lt;br /&gt;
		id_text = l10n(&#039;id_text_buff&#039;)&lt;br /&gt;
	elseif _type == &#039;projectile&#039; then&lt;br /&gt;
		id_text = l10n(&#039;id_text_projectile&#039;)&lt;br /&gt;
	elseif _type == &#039;armor&#039; then&lt;br /&gt;
		id_text = l10n(&#039;id_text_armor&#039;)&lt;br /&gt;
	else&lt;br /&gt;
		id_text = l10n(&#039;id_text_item&#039;)&lt;br /&gt;
	end&lt;br /&gt;
	return id_text&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------&lt;br /&gt;
-- main return object&lt;br /&gt;
return {&lt;br /&gt;
parse = parse,		&lt;br /&gt;
go = function(frame, args)&lt;br /&gt;
	-- init cache&lt;br /&gt;
	currentFrame = frame&lt;br /&gt;
	args_table = args or parse(frame.args[1])&lt;br /&gt;
	lang = getArg(&#039;lang&#039;) or &#039;en&#039;&lt;br /&gt;
	l10n_table = l10n_info[lang] or l10n_info[&#039;en&#039;]&lt;br /&gt;
&lt;br /&gt;
	local _arg1 = getArg(1) or &#039;&#039;&lt;br /&gt;
	local _nolink = getArg(&#039;nolink&#039;)&lt;br /&gt;
	local _link = _nolink and &#039;&#039; or getArg(&#039;link&#039;) or tr.translateLink(_arg1, lang) -- now:  _link == &#039;&#039;  means nolink.&lt;br /&gt;
&lt;br /&gt;
	local text = getArg(2) or &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
	local hovertext&lt;br /&gt;
	if _arg1 ~= &#039;&#039; then&lt;br /&gt;
		hovertext = tr.translate(_arg1, lang)&lt;br /&gt;
	elseif text ~= &#039;&#039; then&lt;br /&gt;
		hovertext = text&lt;br /&gt;
	else&lt;br /&gt;
		hovertext = _link&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local class = &#039;i&#039;&lt;br /&gt;
&lt;br /&gt;
	local output_image, output_text, output_table, output_htmltable = true, true, false, false&lt;br /&gt;
	local _mode = getArg(&#039;mode&#039;)&lt;br /&gt;
	if _mode then&lt;br /&gt;
		if _mode == &#039;image&#039; or _mode == &#039;imageonly&#039; or _mode ==&#039;onlyimage&#039; then&lt;br /&gt;
			output_text = false&lt;br /&gt;
		elseif _mode == &#039;text&#039; or _mode == &#039;noimage&#039; then&lt;br /&gt;
			output_image = false&lt;br /&gt;
		elseif _mode == &#039;table&#039; or _mode == &#039;2-cell&#039; then&lt;br /&gt;
			output_table = true&lt;br /&gt;
		elseif _mode == &#039;htmltable&#039; or _mode == &#039;html-2-cell&#039; then&lt;br /&gt;
			output_htmltable = true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local image_output, text_output&lt;br /&gt;
	if output_image then&lt;br /&gt;
		local image_arg = string.gsub(_arg1, &amp;quot;:%s*&amp;quot;, &amp;quot; &amp;quot;)&lt;br /&gt;
		if _arg1 == &#039;1/2 Second Timer&#039; then&lt;br /&gt;
			image_arg = &#039;1 2 Second Timer&#039;&lt;br /&gt;
		elseif _arg1 == &#039;1/4 Second Timer&#039; then&lt;br /&gt;
			image_arg = &#039;1 4 Second Timer&#039;&lt;br /&gt;
		end&lt;br /&gt;
		image_arg = getArg(&#039;image&#039;) or image_arg .. &#039;.&#039; .. (getArg(&#039;ext&#039;) or &#039;png&#039;)&lt;br /&gt;
		image_output = images(image_arg, _link, hovertext, getArg(&#039;size&#039;), getArg(&#039;scale&#039;), getArg(&#039;maxsize&#039;))&lt;br /&gt;
	else&lt;br /&gt;
		image_output = &#039;&#039;&lt;br /&gt;
	end&lt;br /&gt;
	if output_text then&lt;br /&gt;
		local _note, _note2, _showid, _id = getArg(&#039;note&#039;), getArg(&#039;note2&#039;), getArg(&#039;showid&#039;), getArg(&#039;id&#039;)&lt;br /&gt;
&lt;br /&gt;
		if _id and not _showid then&lt;br /&gt;
			_showid = true&lt;br /&gt;
		end&lt;br /&gt;
		if _showid and (_showid == &#039;n&#039; or _showid == &#039;no&#039;) then&lt;br /&gt;
			_showid = false&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		local _wrap&lt;br /&gt;
		if _showid or _note2 then&lt;br /&gt;
			_wrap = false&lt;br /&gt;
		else&lt;br /&gt;
			_wrap = getArg(&#039;wrap&#039;)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if _link ~= &#039;&#039; then&lt;br /&gt;
			if text == _link then&lt;br /&gt;
				text = &#039;&amp;lt;span&amp;gt;[[&#039;..text..&#039;]]&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
			else&lt;br /&gt;
				text = &#039;&amp;lt;span&amp;gt;[[&#039;.._link..&#039;|&#039;..text..&#039;]]&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			text = &#039;&amp;lt;span title=&amp;quot;&#039;..hovertext..&#039;&amp;quot;&amp;gt;&#039;..text..&#039;&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		local content = text -- item name link text first.&lt;br /&gt;
		-- &#039;-w&#039; class means &#039;wrapmode&#039;, optimized for multiple lines of text. But it should be disabled for single line text.&lt;br /&gt;
		if _wrap then&lt;br /&gt;
			-- note in next line&lt;br /&gt;
			if _note then&lt;br /&gt;
				class = class .. &#039; -w&#039;&lt;br /&gt;
				content = content .. &#039;&amp;lt;span class=&amp;quot;note&amp;quot;&amp;gt;&#039; .. _note .. &#039;&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			-- note first&lt;br /&gt;
			if _note then&lt;br /&gt;
				content = content .. &#039;&amp;lt;span class=&amp;quot;note&amp;quot;&amp;gt;&#039; .. _note .. &#039;&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
			end&lt;br /&gt;
			if _note2 then&lt;br /&gt;
				class = class .. &#039; -w&#039;&lt;br /&gt;
				content = content .. &#039;&amp;lt;div class=&amp;quot;note&amp;quot;&amp;gt;&#039; .. _note2 .. &#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
			end&lt;br /&gt;
			if _showid then&lt;br /&gt;
				class = class .. &#039; -w&#039;&lt;br /&gt;
				local idtype = (getArg(&#039;type&#039;) or &#039;item&#039;):lower() &lt;br /&gt;
				if not _id then&lt;br /&gt;
					_id = frame:expandTemplate{ title = idtype .. &#039;IdFromName&#039;, args = {_arg1} }&lt;br /&gt;
				end&lt;br /&gt;
				local id_text = getIdText(idtype)&lt;br /&gt;
				content = content .. &#039;&amp;lt;div class=&amp;quot;id&amp;quot;&amp;gt;&#039; .. id_text .. _id .. &#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		text_output = &#039;&amp;lt;span&amp;gt;&#039; .. content .. &#039;&amp;lt;/span&amp;gt;&#039;&lt;br /&gt;
	else&lt;br /&gt;
		text_output = &#039;&#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local _class, _css = getArg(&#039;class&#039;), getArg(&#039;css&#039;)&lt;br /&gt;
	if _class then&lt;br /&gt;
		class = class .. &#039; &#039; .. _class&lt;br /&gt;
	end&lt;br /&gt;
	local attr = {class = class}&lt;br /&gt;
	if _css then&lt;br /&gt;
		attr.style = _css&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local anchor = &#039;&#039;&lt;br /&gt;
	if getArg(&#039;anchor&#039;) then&lt;br /&gt;
		anchor = mw.text.tag(&#039;div&#039;, {id=frame:callParserFunction(&#039;anchorencode&#039;, _arg1), class=&#039;anchor&#039;}, &#039;&#039;)&lt;br /&gt;
	end&lt;br /&gt;
	if output_table then&lt;br /&gt;
		attr.class = class .. &#039; block aligncenter&#039;&lt;br /&gt;
		local result = mw.text.tag(&#039;span&#039;, attr, image_output) .. &#039;||&#039;&lt;br /&gt;
		attr.class = class .. &#039; block alignleft&#039;&lt;br /&gt;
		return result .. mw.text.tag(&#039;span&#039;, attr, text_output .. anchor)&lt;br /&gt;
	elseif output_htmltable then&lt;br /&gt;
		attr.class = class .. &#039; block aligncenter&#039;&lt;br /&gt;
		local result = mw.text.tag(&#039;span&#039;, attr, image_output) .. &#039;&amp;lt;/td&amp;gt;&amp;lt;td&amp;gt;&#039;&lt;br /&gt;
		attr.class = class .. &#039; block alignleft&#039;&lt;br /&gt;
		return result .. mw.text.tag(&#039;span&#039;, attr, text_output .. anchor)&lt;br /&gt;
	else&lt;br /&gt;
		return mw.text.tag(&#039;span&#039;, attr, image_output .. text_output .. anchor)&lt;br /&gt;
	end&lt;br /&gt;
end,&lt;br /&gt;
	&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>JamzOJamz</name></author>
	</entry>
	<entry>
		<id>https://wiki.terramonmod.com/index.php?title=Template:Item&amp;diff=15</id>
		<title>Template:Item</title>
		<link rel="alternate" type="text/html" href="https://wiki.terramonmod.com/index.php?title=Template:Item&amp;diff=15"/>
		<updated>2025-11-23T19:49:55Z</updated>

		<summary type="html">&lt;p&gt;JamzOJamz: Created page with &amp;quot;&amp;lt;includeonly&amp;gt;&amp;lt;!--  // l10n content is in Module:item/l10n //  --&amp;gt;{{#vardefine:__lang|{{{lang|{{lang}}}}}}}&amp;lt;!--  --&amp;gt;&amp;lt;div class=&amp;quot;item-link&amp;quot;&amp;gt;{{#invoke:item|go|&amp;lt;!--  	//arg1: item (english) name. 	--&amp;gt;@name:{{#vardefineecho:__item:itemname|{{{1|}}}}}^&amp;lt;!-- en name 	//arg2: display text 	--&amp;gt;@text:{{#if:{{{2|}}}|{{{2}}}|{{{1}}}}}^&amp;lt;!-- 	--&amp;gt;@mode:{{{mode|{{#var:_item_flag_mode|}}}}}^&amp;lt;!--  	--&amp;gt;@rowspan:{{{rowspan|}}}^&amp;lt;!--  	--&amp;gt;@image:{{{image|}}}^&amp;lt;!--  	--&amp;gt;@scale:{{{scale|{{#var:_i...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;&amp;lt;!-- &lt;br /&gt;
// l10n content is in Module:item/l10n //&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;{{#vardefine:__lang|{{{lang|{{lang}}}}}}}&amp;lt;!-- &lt;br /&gt;
--&amp;gt;&amp;lt;div class=&amp;quot;item-link&amp;quot;&amp;gt;{{#invoke:item|go|&amp;lt;!-- &lt;br /&gt;
	//arg1: item (english) name.&lt;br /&gt;
	--&amp;gt;@name:{{#vardefineecho:__item:itemname|{{{1|}}}}}^&amp;lt;!-- en name&lt;br /&gt;
	//arg2: display text&lt;br /&gt;
	--&amp;gt;@text:{{#if:{{{2|}}}|{{{2}}}|{{{1}}}}}^&amp;lt;!--&lt;br /&gt;
	--&amp;gt;@mode:{{{mode|{{#var:_item_flag_mode|}}}}}^&amp;lt;!-- &lt;br /&gt;
	--&amp;gt;@rowspan:{{{rowspan|}}}^&amp;lt;!-- &lt;br /&gt;
	--&amp;gt;@image:{{{image|}}}^&amp;lt;!-- &lt;br /&gt;
	--&amp;gt;@scale:{{{scale|{{#var:_item_flag_scale|}}}}}^&amp;lt;!-- &lt;br /&gt;
	--&amp;gt;@size:{{{size|}}}^&amp;lt;!-- &lt;br /&gt;
	--&amp;gt;@maxsize:{{{maxsize|{{#var:_item_flag_maxsize|}}}}}^&amp;lt;!-- &lt;br /&gt;
	--&amp;gt;@ext:{{{ext|}}}^&amp;lt;!-- &lt;br /&gt;
	--&amp;gt;@nolink:{{#vardefineecho:_nl|{{{nolink|{{#var:_item_flag_nolink|{{#if:{{{link|-link-}}}||y}}}}}}}}}^&amp;lt;!--  if $nolink or $nolink_flag or $link == &#039;&#039;&lt;br /&gt;
	--&amp;gt;@link:{{{link|{{#if:{{#var:_nl|}}||{{tr|{{#var:__item:itemname}}|link=y|lang={{#var:__lang}}}}}}}}}^&amp;lt;!--&lt;br /&gt;
	--&amp;gt;@anchor:{{{anchor|{{#var:_item_flag_anchor|}}}}}^&amp;lt;!-- &lt;br /&gt;
	--&amp;gt;@note:{{{note|}}}^&amp;lt;!-- &lt;br /&gt;
	--&amp;gt;@note2:{{{note2|}}}^&amp;lt;!-- &lt;br /&gt;
	--&amp;gt;@id:{{{id|}}}^&amp;lt;!-- in module:item, {{&amp;lt;type&amp;gt;IdFromName}} will be called if needed.&lt;br /&gt;
	--&amp;gt;@showid:{{{showid|{{#var:_item_flag_showid|}}}}}^&amp;lt;!-- &lt;br /&gt;
	--&amp;gt;@type:{{{type|}}}^&amp;lt;!-- &lt;br /&gt;
	--&amp;gt;@wrap:{{{wrap|{{#var:_item_flag_wrap|}}}}}^&amp;lt;!-- &lt;br /&gt;
	--&amp;gt;@class:{{{class|{{#var:_item_flag_class|}}}}}^&amp;lt;!-- &lt;br /&gt;
	--&amp;gt;@css:{{{css|{{{style|{{#var:_item_flag_css|}}}}}}}}^&amp;lt;!-- &lt;br /&gt;
	--&amp;gt;@lang:{{#var:__lang}}^&amp;lt;!--  &lt;br /&gt;
--&amp;gt;}}&amp;lt;/div&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;{{lua}}{{i18n-ready}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;{{#cargo_attach:_table=Imageinfo}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;{{doc}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>JamzOJamz</name></author>
	</entry>
	<entry>
		<id>https://wiki.terramonmod.com/index.php?title=Main_Page&amp;diff=14</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.terramonmod.com/index.php?title=Main_Page&amp;diff=14"/>
		<updated>2025-11-23T05:13:45Z</updated>

		<summary type="html">&lt;p&gt;JamzOJamz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#seo:&lt;br /&gt;
|title=The Terramon Wiki&lt;br /&gt;
}}&lt;br /&gt;
{| style=&amp;quot;width:100%; text-align:center; border:1px solid var(--border-color-base); border-radius:5px; margin:0; background: var(--color-surface-2);&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding:13px;&amp;quot; |&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:170%; font-weight:600; color: var(--color-emphasized); font-weight: var(--font-weight-semi-bold);&amp;quot;&amp;gt;&lt;br /&gt;
Welcome to the &amp;lt;span style=&amp;quot;font-weight:900;&amp;quot;&amp;gt;Official Terramon Mod Wiki&amp;lt;/span&amp;gt;,&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
the most comprehensive source of information about the mod.&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;padding:5px 8px; margin-top:8px; border-radius: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
[https://discord.gg/U8skDEA Official Discord] • [https://www.youtube.com/channel/UCU91hiBTfhZB5YBbQZlgCPg YouTube Channel]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Two side-by-side tables --&amp;gt;&lt;br /&gt;
{| style=&amp;quot;width:100%; border-spacing:0; margin:0;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:70%; border:1px solid var(--border-color-base); border-radius:5px; margin:0; padding: 15px; vertical-align:top; background: var(--color-surface-2);&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;padding:4px 8px; border-radius: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;float: right;&amp;quot;&amp;gt;[[File:Mod icon.png]]&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align:center; font-size:130%; font-weight: var(--font-weight-semi-bold); color: var(--color-emphasized); margin:0;&amp;quot;&amp;gt;The Mod&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Terramon Mod is a large and immersive mod for Terraria that seamlessly integrates the beloved world of Pokémon into the game. Dive into an adventure where you can explore, catch, and train over 150 Pokémon in the vast and diverse landscapes of Terraria. With refined mechanics and plenty to discover, Terramon is a fun experience for longtime Pokémon fans, casual players, and newcomers alike.&lt;br /&gt;
&lt;br /&gt;
You can download the mod from our [https://steamcommunity.com/sharedfiles/filedetails/?id=3435381419 Steam Workshop page] or directly from [https://github.com/JamzOJamz/Terramon/releases/download/0.1.3.2/Terramon.tmod here].&lt;br /&gt;
&lt;br /&gt;
Past versions of the mod can also be downloaded from our [[Version History]] page.&lt;br /&gt;
| style=&amp;quot;width:30%; border:1px solid var(--border-color-base); border-radius:5px; margin:0; padding: 15px; vertical-align:top; background: var(--color-surface-2);&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width:100%; text-align:center;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align: center; display: flex; flex-direction: column; gap: 4px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;padding:4px 8px; border-radius: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align:center; font-size:130%; font-weight: var(--font-weight-semi-bold); color: var(--color-emphasized); margin:0;&amp;quot;&amp;gt;Latest Supported Versions&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;font-size: 107%; border-radius: 5px;&amp;quot;&amp;gt;&#039;&#039;&#039;[[Version History|Terramon Mod]]&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;[[Beta 0.1.3.2]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;font-size: 107%; border-radius: 5px;&amp;quot;&amp;gt;&#039;&#039;&#039;[[tgc:TModLoader|tModLoader]]&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;2025.9.3.0&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;font-size: 107%; border-radius: 5px;&amp;quot;&amp;gt;&#039;&#039;&#039;[[tgc:Terraria|Terraria]]&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;1.4.4.9&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Three side-by-side tables --&amp;gt;&lt;br /&gt;
{| style=&amp;quot;width:100%; border-spacing:0; margin:0;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:33%; border:1px solid var(--border-color-base); border-radius:5px; margin:0; padding: 15px; vertical-align:top; background: var(--color-surface-2);&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;padding:4px 8px; border-radius: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align:center; font-size:130%; font-weight: var(--font-weight-semi-bold); color: var(--color-emphasized); margin:0;&amp;quot;&amp;gt;[[Poké Balls]]&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* {{item|Poké Ball|size=28px}}&lt;br /&gt;
* {{item|Premier Ball|size=28px}}&lt;br /&gt;
* {{item|Cherish Ball|size=28px}}&lt;br /&gt;
* {{item|Aether Ball|size=28px}}&lt;br /&gt;
* {{item|Great Ball|size=28px}}&lt;br /&gt;
* {{item|Ultra Ball|size=28px}}&lt;br /&gt;
* {{item|Master Ball|size=28px}}&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width:33%; border:1px solid var(--border-color-base); border-radius:5px; margin:0; padding: 15px; vertical-align:top; background: var(--color-surface-2);&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;padding:4px 8px; border-radius: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align:center; font-size:130%; font-weight: var(--font-weight-semi-bold); color: var(--color-emphasized); margin:0;&amp;quot;&amp;gt;[[Evolutionary items]]&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* {{item|Rare Candy|size=28px}}&lt;br /&gt;
* {{item|Fire Stone|size=24px}}&lt;br /&gt;
* {{item|Water Stone|size=24px}}&lt;br /&gt;
* {{item|Thunder Stone|size=24px}}&lt;br /&gt;
* {{item|Leaf Stone|size=24px}}&lt;br /&gt;
* {{item|Moon Stone|size=28px}}&lt;br /&gt;
* {{item|Linking Cord}}&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width:33%; border:1px solid var(--border-color-base); border-radius:5px; margin:0; padding: 15px; vertical-align:top; background: var(--color-surface-2);&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;padding:4px 8px; border-radius: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align:center; font-size:130%; font-weight: var(--font-weight-semi-bold); color: var(--color-emphasized); margin:0;&amp;quot;&amp;gt;Misc.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* {{item|Pokémon|image=Pikachu.png|size=28px}}&lt;br /&gt;
* {{item|PC|image=PC (Red).png}}&lt;br /&gt;
* {{item|Poké Mart Clerk|image=Poké Mart Clerk Head.png}}&lt;br /&gt;
* {{item|Apricorns|image=Apricorns.gif}}&lt;br /&gt;
* {{item|Shiny Charm|size=26px}}&lt;br /&gt;
* {{item|Recipes|image=Work Bench.png|size=26px}}&lt;br /&gt;
* {{item|Vanity items|image=Pokemon Trainer Cap.png|size=24px}}&lt;br /&gt;
* {{item|Music|image=Music Box (Pokémon Center).png|size=26px}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>JamzOJamz</name></author>
	</entry>
	<entry>
		<id>https://wiki.terramonmod.com/index.php?title=Main_Page&amp;diff=13</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.terramonmod.com/index.php?title=Main_Page&amp;diff=13"/>
		<updated>2025-11-23T05:13:35Z</updated>

		<summary type="html">&lt;p&gt;JamzOJamz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#seo:&lt;br /&gt;
|title=Thee Terramon Wiki&lt;br /&gt;
}}&lt;br /&gt;
{| style=&amp;quot;width:100%; text-align:center; border:1px solid var(--border-color-base); border-radius:5px; margin:0; background: var(--color-surface-2);&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding:13px;&amp;quot; |&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:170%; font-weight:600; color: var(--color-emphasized); font-weight: var(--font-weight-semi-bold);&amp;quot;&amp;gt;&lt;br /&gt;
Welcome to the &amp;lt;span style=&amp;quot;font-weight:900;&amp;quot;&amp;gt;Official Terramon Mod Wiki&amp;lt;/span&amp;gt;,&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
the most comprehensive source of information about the mod.&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;padding:5px 8px; margin-top:8px; border-radius: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
[https://discord.gg/U8skDEA Official Discord] • [https://www.youtube.com/channel/UCU91hiBTfhZB5YBbQZlgCPg YouTube Channel]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Two side-by-side tables --&amp;gt;&lt;br /&gt;
{| style=&amp;quot;width:100%; border-spacing:0; margin:0;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:70%; border:1px solid var(--border-color-base); border-radius:5px; margin:0; padding: 15px; vertical-align:top; background: var(--color-surface-2);&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;padding:4px 8px; border-radius: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;float: right;&amp;quot;&amp;gt;[[File:Mod icon.png]]&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align:center; font-size:130%; font-weight: var(--font-weight-semi-bold); color: var(--color-emphasized); margin:0;&amp;quot;&amp;gt;The Mod&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Terramon Mod is a large and immersive mod for Terraria that seamlessly integrates the beloved world of Pokémon into the game. Dive into an adventure where you can explore, catch, and train over 150 Pokémon in the vast and diverse landscapes of Terraria. With refined mechanics and plenty to discover, Terramon is a fun experience for longtime Pokémon fans, casual players, and newcomers alike.&lt;br /&gt;
&lt;br /&gt;
You can download the mod from our [https://steamcommunity.com/sharedfiles/filedetails/?id=3435381419 Steam Workshop page] or directly from [https://github.com/JamzOJamz/Terramon/releases/download/0.1.3.2/Terramon.tmod here].&lt;br /&gt;
&lt;br /&gt;
Past versions of the mod can also be downloaded from our [[Version History]] page.&lt;br /&gt;
| style=&amp;quot;width:30%; border:1px solid var(--border-color-base); border-radius:5px; margin:0; padding: 15px; vertical-align:top; background: var(--color-surface-2);&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width:100%; text-align:center;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align: center; display: flex; flex-direction: column; gap: 4px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;padding:4px 8px; border-radius: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align:center; font-size:130%; font-weight: var(--font-weight-semi-bold); color: var(--color-emphasized); margin:0;&amp;quot;&amp;gt;Latest Supported Versions&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;font-size: 107%; border-radius: 5px;&amp;quot;&amp;gt;&#039;&#039;&#039;[[Version History|Terramon Mod]]&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;[[Beta 0.1.3.2]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;font-size: 107%; border-radius: 5px;&amp;quot;&amp;gt;&#039;&#039;&#039;[[tgc:TModLoader|tModLoader]]&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;2025.9.3.0&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;font-size: 107%; border-radius: 5px;&amp;quot;&amp;gt;&#039;&#039;&#039;[[tgc:Terraria|Terraria]]&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;1.4.4.9&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Three side-by-side tables --&amp;gt;&lt;br /&gt;
{| style=&amp;quot;width:100%; border-spacing:0; margin:0;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:33%; border:1px solid var(--border-color-base); border-radius:5px; margin:0; padding: 15px; vertical-align:top; background: var(--color-surface-2);&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;padding:4px 8px; border-radius: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align:center; font-size:130%; font-weight: var(--font-weight-semi-bold); color: var(--color-emphasized); margin:0;&amp;quot;&amp;gt;[[Poké Balls]]&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* {{item|Poké Ball|size=28px}}&lt;br /&gt;
* {{item|Premier Ball|size=28px}}&lt;br /&gt;
* {{item|Cherish Ball|size=28px}}&lt;br /&gt;
* {{item|Aether Ball|size=28px}}&lt;br /&gt;
* {{item|Great Ball|size=28px}}&lt;br /&gt;
* {{item|Ultra Ball|size=28px}}&lt;br /&gt;
* {{item|Master Ball|size=28px}}&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width:33%; border:1px solid var(--border-color-base); border-radius:5px; margin:0; padding: 15px; vertical-align:top; background: var(--color-surface-2);&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;padding:4px 8px; border-radius: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align:center; font-size:130%; font-weight: var(--font-weight-semi-bold); color: var(--color-emphasized); margin:0;&amp;quot;&amp;gt;[[Evolutionary items]]&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* {{item|Rare Candy|size=28px}}&lt;br /&gt;
* {{item|Fire Stone|size=24px}}&lt;br /&gt;
* {{item|Water Stone|size=24px}}&lt;br /&gt;
* {{item|Thunder Stone|size=24px}}&lt;br /&gt;
* {{item|Leaf Stone|size=24px}}&lt;br /&gt;
* {{item|Moon Stone|size=28px}}&lt;br /&gt;
* {{item|Linking Cord}}&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width:33%; border:1px solid var(--border-color-base); border-radius:5px; margin:0; padding: 15px; vertical-align:top; background: var(--color-surface-2);&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;padding:4px 8px; border-radius: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align:center; font-size:130%; font-weight: var(--font-weight-semi-bold); color: var(--color-emphasized); margin:0;&amp;quot;&amp;gt;Misc.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* {{item|Pokémon|image=Pikachu.png|size=28px}}&lt;br /&gt;
* {{item|PC|image=PC (Red).png}}&lt;br /&gt;
* {{item|Poké Mart Clerk|image=Poké Mart Clerk Head.png}}&lt;br /&gt;
* {{item|Apricorns|image=Apricorns.gif}}&lt;br /&gt;
* {{item|Shiny Charm|size=26px}}&lt;br /&gt;
* {{item|Recipes|image=Work Bench.png|size=26px}}&lt;br /&gt;
* {{item|Vanity items|image=Pokemon Trainer Cap.png|size=24px}}&lt;br /&gt;
* {{item|Music|image=Music Box (Pokémon Center).png|size=26px}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>JamzOJamz</name></author>
	</entry>
	<entry>
		<id>https://wiki.terramonmod.com/index.php?title=Main_Page&amp;diff=12</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.terramonmod.com/index.php?title=Main_Page&amp;diff=12"/>
		<updated>2025-11-23T04:51:10Z</updated>

		<summary type="html">&lt;p&gt;JamzOJamz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#seo:&lt;br /&gt;
|title=The Terramon Wiki&lt;br /&gt;
}}&lt;br /&gt;
{| style=&amp;quot;width:100%; text-align:center; border:1px solid var(--border-color-base); border-radius:5px; margin:0; background: var(--color-surface-2);&amp;quot;&lt;br /&gt;
| style=&amp;quot;padding:13px;&amp;quot; |&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size:170%; font-weight:600; color: var(--color-emphasized); font-weight: var(--font-weight-semi-bold);&amp;quot;&amp;gt;&lt;br /&gt;
Welcome to the &amp;lt;span style=&amp;quot;font-weight:900;&amp;quot;&amp;gt;Official Terramon Mod Wiki&amp;lt;/span&amp;gt;,&lt;br /&gt;
&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
the most comprehensive source of information about the mod.&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;padding:5px 8px; margin-top:8px; border-radius: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
[https://discord.gg/U8skDEA Official Discord] • [https://www.youtube.com/channel/UCU91hiBTfhZB5YBbQZlgCPg YouTube Channel]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Two side-by-side tables --&amp;gt;&lt;br /&gt;
{| style=&amp;quot;width:100%; border-spacing:0; margin:0;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:70%; border:1px solid var(--border-color-base); border-radius:5px; margin:0; padding: 15px; vertical-align:top; background: var(--color-surface-2);&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;padding:4px 8px; border-radius: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;float: right;&amp;quot;&amp;gt;[[File:Mod icon.png]]&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align:center; font-size:130%; font-weight: var(--font-weight-semi-bold); color: var(--color-emphasized); margin:0;&amp;quot;&amp;gt;The Mod&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Terramon Mod is a large and immersive mod for Terraria that seamlessly integrates the beloved world of Pokémon into the game. Dive into an adventure where you can explore, catch, and train over 150 Pokémon in the vast and diverse landscapes of Terraria. With refined mechanics and plenty to discover, Terramon is a fun experience for longtime Pokémon fans, casual players, and newcomers alike.&lt;br /&gt;
&lt;br /&gt;
You can download the mod from our [https://steamcommunity.com/sharedfiles/filedetails/?id=3435381419 Steam Workshop page] or directly from [https://github.com/JamzOJamz/Terramon/releases/download/0.1.3.2/Terramon.tmod here].&lt;br /&gt;
&lt;br /&gt;
Past versions of the mod can also be downloaded from our [[Version History]] page.&lt;br /&gt;
| style=&amp;quot;width:30%; border:1px solid var(--border-color-base); border-radius:5px; margin:0; padding: 15px; vertical-align:top; background: var(--color-surface-2);&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;width:100%; text-align:center;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align: center; display: flex; flex-direction: column; gap: 4px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;padding:4px 8px; border-radius: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align:center; font-size:130%; font-weight: var(--font-weight-semi-bold); color: var(--color-emphasized); margin:0;&amp;quot;&amp;gt;Latest Supported Versions&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;font-size: 107%; border-radius: 5px;&amp;quot;&amp;gt;&#039;&#039;&#039;[[Version History|Terramon Mod]]&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;[[Beta 0.1.3.2]]&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;font-size: 107%; border-radius: 5px;&amp;quot;&amp;gt;&#039;&#039;&#039;[[tgc:TModLoader|tModLoader]]&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;2025.9.3.0&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;font-size: 107%; border-radius: 5px;&amp;quot;&amp;gt;&#039;&#039;&#039;[[tgc:Terraria|Terraria]]&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div&amp;gt;1.4.4.9&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Three side-by-side tables --&amp;gt;&lt;br /&gt;
{| style=&amp;quot;width:100%; border-spacing:0; margin:0;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:33%; border:1px solid var(--border-color-base); border-radius:5px; margin:0; padding: 15px; vertical-align:top; background: var(--color-surface-2);&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;padding:4px 8px; border-radius: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align:center; font-size:130%; font-weight: var(--font-weight-semi-bold); color: var(--color-emphasized); margin:0;&amp;quot;&amp;gt;[[Poké Balls]]&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* {{item|Poké Ball|size=28px}}&lt;br /&gt;
* {{item|Premier Ball|size=28px}}&lt;br /&gt;
* {{item|Cherish Ball|size=28px}}&lt;br /&gt;
* {{item|Aether Ball|size=28px}}&lt;br /&gt;
* {{item|Great Ball|size=28px}}&lt;br /&gt;
* {{item|Ultra Ball|size=28px}}&lt;br /&gt;
* {{item|Master Ball|size=28px}}&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width:33%; border:1px solid var(--border-color-base); border-radius:5px; margin:0; padding: 15px; vertical-align:top; background: var(--color-surface-2);&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;padding:4px 8px; border-radius: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align:center; font-size:130%; font-weight: var(--font-weight-semi-bold); color: var(--color-emphasized); margin:0;&amp;quot;&amp;gt;[[Evolutionary items]]&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* {{item|Rare Candy|size=28px}}&lt;br /&gt;
* {{item|Fire Stone|size=24px}}&lt;br /&gt;
* {{item|Water Stone|size=24px}}&lt;br /&gt;
* {{item|Thunder Stone|size=24px}}&lt;br /&gt;
* {{item|Leaf Stone|size=24px}}&lt;br /&gt;
* {{item|Moon Stone|size=28px}}&lt;br /&gt;
* {{item|Linking Cord}}&lt;br /&gt;
&lt;br /&gt;
| style=&amp;quot;width:33%; border:1px solid var(--border-color-base); border-radius:5px; margin:0; padding: 15px; vertical-align:top; background: var(--color-surface-2);&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;linksbox&amp;quot; style=&amp;quot;padding:4px 8px; border-radius: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align:center; font-size:130%; font-weight: var(--font-weight-semi-bold); color: var(--color-emphasized); margin:0;&amp;quot;&amp;gt;Misc.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* {{item|Pokémon|image=Pikachu.png|size=28px}}&lt;br /&gt;
* {{item|PC|image=PC (Red).png}}&lt;br /&gt;
* {{item|Poké Mart Clerk|image=Poké Mart Clerk Head.png}}&lt;br /&gt;
* {{item|Apricorns|image=Apricorns.gif}}&lt;br /&gt;
* {{item|Shiny Charm|size=26px}}&lt;br /&gt;
* {{item|Recipes|image=Work Bench.png|size=26px}}&lt;br /&gt;
* {{item|Vanity items|image=Pokemon Trainer Cap.png|size=24px}}&lt;br /&gt;
* {{item|Music|image=Music Box (Pokémon Center).png|size=26px}}&lt;br /&gt;
&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>JamzOJamz</name></author>
	</entry>
	<entry>
		<id>https://wiki.terramonmod.com/index.php?title=Version_History&amp;diff=11</id>
		<title>Version History</title>
		<link rel="alternate" type="text/html" href="https://wiki.terramonmod.com/index.php?title=Version_History&amp;diff=11"/>
		<updated>2025-11-23T04:47:30Z</updated>

		<summary type="html">&lt;p&gt;JamzOJamz: Created page with &amp;quot;== Version == &amp;#039;&amp;#039;&amp;#039;Terramon&amp;#039;&amp;#039;&amp;#039; is available to players of the Desktop version of Terraria via tModLoader.  You can download the latest version of the mod on Steam Workshop [https://steamcommunity.com/sharedfiles/filedetails/?id=3435381419 here].  For assistance installing past versions of the mod manually, see Manual Install.  a  a  a  a  a a  a a a a a a   a   a   a    a   a  a a  a a a  a  aa   a a  a a  a a a   a a...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Version ==&lt;br /&gt;
&#039;&#039;&#039;Terramon&#039;&#039;&#039; is available to players of the [[tgc:Desktop version history|Desktop]] version of Terraria via [[tgc:TModLoader|tModLoader]].&lt;br /&gt;
&lt;br /&gt;
You can download the latest version of the mod on Steam Workshop [https://steamcommunity.com/sharedfiles/filedetails/?id=3435381419 here].&lt;br /&gt;
&lt;br /&gt;
For assistance installing past versions of the mod manually, see [[Manual Install]].&lt;br /&gt;
&lt;br /&gt;
a&lt;br /&gt;
&lt;br /&gt;
a&lt;br /&gt;
&lt;br /&gt;
a&lt;br /&gt;
&lt;br /&gt;
a&lt;br /&gt;
&lt;br /&gt;
a&lt;br /&gt;
a&lt;br /&gt;
&lt;br /&gt;
a&lt;br /&gt;
a&lt;br /&gt;
a&lt;br /&gt;
a&lt;br /&gt;
a&lt;br /&gt;
a&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a&lt;br /&gt;
&lt;br /&gt;
a&lt;br /&gt;
a&lt;br /&gt;
&lt;br /&gt;
a&lt;br /&gt;
a&lt;br /&gt;
a&lt;br /&gt;
&lt;br /&gt;
a&lt;br /&gt;
&lt;br /&gt;
aa&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a&lt;br /&gt;
a&lt;br /&gt;
&lt;br /&gt;
a&lt;br /&gt;
a&lt;br /&gt;
&lt;br /&gt;
a&lt;br /&gt;
a&lt;br /&gt;
a&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a&lt;br /&gt;
a&lt;br /&gt;
&lt;br /&gt;
a&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
a&lt;br /&gt;
&lt;br /&gt;
a&lt;br /&gt;
&lt;br /&gt;
a&lt;br /&gt;
&lt;br /&gt;
a&lt;br /&gt;
a&lt;br /&gt;
&lt;br /&gt;
a&lt;br /&gt;
a&lt;br /&gt;
&lt;br /&gt;
== Version History ==&lt;br /&gt;
Past versions of the mod can be downloaded by visiting their page on the wiki and clicking the link in the &amp;quot;&#039;&#039;&#039;Download&#039;&#039;&#039;&amp;quot; section.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;terraria lined&amp;quot; style=&amp;quot;width: 100%; border: 1px solid var(--border-color-base); padding: 3px; border-spacing: 0; border-radius: 3px;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;width:9%;&amp;quot; | Version&lt;br /&gt;
! style=&amp;quot;width:12%&amp;quot; | Release date&lt;br /&gt;
! style=&amp;quot;width:6%;&amp;quot; | Terraria&lt;br /&gt;
! class=unsortable | Highlights and Notes&lt;br /&gt;
|-&lt;br /&gt;
| [[Beta 0.1.3.1]]&lt;br /&gt;
| April 26, 2025&lt;br /&gt;
| 1.4.4.9&lt;br /&gt;
| Hotfixes.&lt;br /&gt;
|-&lt;br /&gt;
| [[Beta 0.1.3]]&lt;br /&gt;
| April 26, 2025&lt;br /&gt;
| 1.4.4.9&lt;br /&gt;
| Controller support, Korean localisation and misc. changes.&lt;br /&gt;
|-&lt;br /&gt;
| [[Beta 0.1.2]]&lt;br /&gt;
| March 11, 2025&lt;br /&gt;
| 1.4.4.9&lt;br /&gt;
| Bug fixes.&lt;br /&gt;
|-&lt;br /&gt;
| [[Beta 0.1.1]]&lt;br /&gt;
| March 3, 2025&lt;br /&gt;
| 1.4.4.9&lt;br /&gt;
| Minor balance changes and bug fixes.&lt;br /&gt;
|-&lt;br /&gt;
| [[Beta 0.1]]&lt;br /&gt;
| February 27, 2025&lt;br /&gt;
| 1.4.4.9&lt;br /&gt;
| First release on Steam Workshop - Mechanical overhaul including new [[Pokédex]] and [[PC]] interfaces.&lt;br /&gt;
|-&lt;br /&gt;
| [[Pre-release 0.1]]&lt;br /&gt;
| November 17, 2023&lt;br /&gt;
| 1.4.4.9&lt;br /&gt;
| Private release - Kanto [[Pokémon]], [[Poké Balls]], [[Poké Mart Clerk|Poké Mart Clerk NPC]].&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>JamzOJamz</name></author>
	</entry>
	<entry>
		<id>https://wiki.terramonmod.com/index.php?title=File:Mod_icon.png&amp;diff=10</id>
		<title>File:Mod icon.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.terramonmod.com/index.php?title=File:Mod_icon.png&amp;diff=10"/>
		<updated>2025-11-23T04:38:30Z</updated>

		<summary type="html">&lt;p&gt;JamzOJamz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>JamzOJamz</name></author>
	</entry>
	<entry>
		<id>https://wiki.terramonmod.com/index.php?title=MediaWiki:Citizen-footer-desc&amp;diff=9</id>
		<title>MediaWiki:Citizen-footer-desc</title>
		<link rel="alternate" type="text/html" href="https://wiki.terramonmod.com/index.php?title=MediaWiki:Citizen-footer-desc&amp;diff=9"/>
		<updated>2025-11-23T02:27:59Z</updated>

		<summary type="html">&lt;p&gt;JamzOJamz: Created page with &amp;quot;A fan mod that adds Pokémon into Terraria. [https://steamcommunity.com/sharedfiles/filedetails/?id=3435381419 Go play Terramon!]&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A fan mod that adds Pokémon into Terraria. [https://steamcommunity.com/sharedfiles/filedetails/?id=3435381419 Go play Terramon!]&lt;/div&gt;</summary>
		<author><name>JamzOJamz</name></author>
	</entry>
	<entry>
		<id>https://wiki.terramonmod.com/index.php?title=MediaWiki:Citizen-footer-tagline&amp;diff=8</id>
		<title>MediaWiki:Citizen-footer-tagline</title>
		<link rel="alternate" type="text/html" href="https://wiki.terramonmod.com/index.php?title=MediaWiki:Citizen-footer-tagline&amp;diff=8"/>
		<updated>2025-11-23T02:27:06Z</updated>

		<summary type="html">&lt;p&gt;JamzOJamz: Created page with &amp;quot;Maintained with ♥ by the developers and community&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Maintained with ♥ by the developers and community&lt;/div&gt;</summary>
		<author><name>JamzOJamz</name></author>
	</entry>
</feed>