<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.hoodedhorse.com/Against_the_Storm/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=76561197987591703</id>
	<title>Against the Storm Official Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.hoodedhorse.com/Against_the_Storm/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=76561197987591703"/>
	<link rel="alternate" type="text/html" href="https://wiki.hoodedhorse.com/Against_the_Storm/Special:Contributions/76561197987591703"/>
	<updated>2026-10-06T08:52:36Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.44.5</generator>
	<entry>
		<id>https://wiki.hoodedhorse.com/Against_the_Storm/index.php?title=Reputation&amp;diff=5249</id>
		<title>Reputation</title>
		<link rel="alternate" type="text/html" href="https://wiki.hoodedhorse.com/Against_the_Storm/index.php?title=Reputation&amp;diff=5249"/>
		<updated>2023-12-23T21:58:16Z</updated>

		<summary type="html">&lt;p&gt;76561197987591703: Fixed typos&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:ReputationBar.png|thumb|360px|The Reputation Bar]]&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
In all [[Biomes]] except the [[Sealed Forest]], a full Reputation Bar is required to secure the settlement and win. Viceroys fill up the bar by gaining Reputation Points, which rewards them with [[Blueprint]]s. Each Reputation Point gained, will lower the Queen&#039;s [[Impatience]]. The amount of [[Impatience]] lowered depends on the [[Difficulty]] of the game.&lt;br /&gt;
&lt;br /&gt;
== Gaining Reputation Points ==&lt;br /&gt;
&lt;br /&gt;
Viceroys can gain Reputation Points in three different ways, namely by:&lt;br /&gt;
* Successfully completing [[Orders]].&lt;br /&gt;
* Sending [[Abandoned Caches]] back to the Citadel.&lt;br /&gt;
* Completing certain [[Glade Events]]&lt;br /&gt;
* Reaching the &amp;quot;Reputation Threshold&amp;quot; with high Villager [[Resolve]]&lt;br /&gt;
&lt;br /&gt;
Orders are very simple - Viceroys always at least 1 Reputation Point for completing them. Sending [[Abandoned Caches]] back to the [[Citadel]] requires {{rl|Tools}}, and will grant Viceroys varying amounts of Reputation Points depending on the size of the [[Abandoned Cache]]. Only certain [[Glade Events]] will grant Reputation Points, this also depends on the choice you make when completing them, it is most often Loyalty decisions which grant Reputation Points. &lt;br /&gt;
&lt;br /&gt;
[[File:Repperminute.png|left|border|300x300px|Reputation per Minute]]To gain Reputation Points from [[Villagers]], Viceroys need to satisfy their [[Complex Food Need]]s and [[Services Need]]. The more [[Complex Food Need]]s and [[Services Need]] a Viceroy satisfies, the higher Villager [[Resolve]] will go, eventually reaching a &amp;quot;Reputation Threshold&amp;quot;, indicated by a blue ring around their portraits. Once this threshold is reached, Villagers start generating Reputation Points. Viceroys should aim to satisfy the needs of species who have the highest population to create more Reputation Point generation. To check how much Reputation is generated per minute, hover your cursor over the encircled location.&lt;br /&gt;
&lt;br /&gt;
There are also a few [[Perks]] and [[Cornerstones]] that can be bought from [[Traders]] and gained seasonally which will earn Viceroys Reputation Points.&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Strategy ==&lt;br /&gt;
&lt;br /&gt;
* Because [[Hostility]] and [[Impatience]] are connected, many Viceroys choose to wait before turning in [[Orders]], as gaining Reputation will lower [[Impatience]], but increase [[Hostility]]. This is the same with some [[Glade Events]], Viceroys can unassign scouts to &amp;quot;pause&amp;quot; the [[Glade Event]], effectively controlling when a Reputation point is earned.&lt;br /&gt;
&lt;br /&gt;
* Viceroys will often choose to favor the species with the lowest Reputation Threshold from the start of the game, thus getting an early start in Reputation generation.&lt;br /&gt;
&lt;br /&gt;
* In mid to late game, Viceroys will focus on raising the [[Resolve]] of the most populous species in their settlement. This is because the more individuals with high [[Resolve]], the faster Reputation point generation is.&lt;/div&gt;</summary>
		<author><name>76561197987591703</name></author>
	</entry>
	<entry>
		<id>https://wiki.hoodedhorse.com/Against_the_Storm/index.php?title=User:76561197987591703&amp;diff=4760</id>
		<title>User:76561197987591703</title>
		<link rel="alternate" type="text/html" href="https://wiki.hoodedhorse.com/Against_the_Storm/index.php?title=User:76561197987591703&amp;diff=4760"/>
		<updated>2023-12-13T06:00:06Z</updated>

		<summary type="html">&lt;p&gt;76561197987591703: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h1&amp;gt; Testing Ground &amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{PerkSearch|Fedora Hat|display=list}}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;float: right; clear: right; border-image-source: url(&#039;https://hoodedhorse.com/wiki/images/mbhh_ats/3/34/Infobox_Background.png&#039;); border-image-slice: 30 fill; border-image-outset: 30px; border-image-repeat: 30px stretch; color: #D5D5D5; max-width: 350px; font-family: EB Garamond; letter-spacing: 0.05rem&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border: none; background-color: transparent; font-size: 18px; font-variant: small-caps; font-weight: 400;&amp;quot; | Ancient Hearth&amp;lt;/span&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| style=&amp;quot;border: none; text-align: center&amp;quot; | The heart of the colony is protected by the Holy Flame. Villagers gather here to rest, eat, and receive clothing. If the fire goes out, people will lose hope.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border: none; text-align: center&amp;quot; | Specialization bonus: {{Specialization link|Warmth}}&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>76561197987591703</name></author>
	</entry>
	<entry>
		<id>https://wiki.hoodedhorse.com/Against_the_Storm/index.php?title=Module:PerkSearchResultsView&amp;diff=4759</id>
		<title>Module:PerkSearchResultsView</title>
		<link rel="alternate" type="text/html" href="https://wiki.hoodedhorse.com/Against_the_Storm/index.php?title=Module:PerkSearchResultsView&amp;diff=4759"/>
		<updated>2023-12-13T05:59:29Z</updated>

		<summary type="html">&lt;p&gt;76561197987591703: Fixed bug in previous edit&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;--- @module PerkSearchResultsView&lt;br /&gt;
local PerkSearchResultsView = {}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local PerksData = require(&amp;quot;Module:PerksData&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--region Private member variables&lt;br /&gt;
&lt;br /&gt;
beginning = &amp;quot;&amp;quot;&lt;br /&gt;
middle = &amp;quot;&amp;quot;&lt;br /&gt;
ending = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
local imgS = mw.getCurrentFrame():expandTemplate{ title = &amp;quot;ImgS&amp;quot; }&lt;br /&gt;
local imgM = mw.getCurrentFrame():expandTemplate{ title = &amp;quot;ImgM&amp;quot; }&lt;br /&gt;
local imgL = mw.getCurrentFrame():expandTemplate{ title = &amp;quot;ImgL&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
local amberIcon = mw.getCurrentFrame():expandTemplate{ title= &amp;quot;Amber&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
--endregion&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--region Private constants&lt;br /&gt;
&lt;br /&gt;
local PARAMETER_DISPLAY_OVERRIDE_LIST = &amp;quot;list&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- wikitable classes for tables&lt;br /&gt;
local CLASS_WIKITABLE_SORTABLE_COLLAPSIBLE = &amp;quot;wikitable sortable mw-collapsible&amp;quot;&lt;br /&gt;
local CSS_TD_SHRINK_TO_FIT = &amp;quot;max-width: 20em&amp;quot;&lt;br /&gt;
local CLASS_UNSORTABLE = &amp;quot;unsortable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
local RARITY_COLORS = {&lt;br /&gt;
	[PerksData.RARITY_UNCOMMON] = &amp;quot;#15cf00&amp;quot;,&lt;br /&gt;
	[PerksData.RARITY_RARE] = &amp;quot;#015db9&amp;quot;,&lt;br /&gt;
	[PerksData.RARITY_EPIC] = &amp;quot;#7f27b9&amp;quot;,&lt;br /&gt;
	[PerksData.RARITY_LEGENDARY] = &amp;quot;#da6d00&amp;quot;,&lt;br /&gt;
	[PerksData.NONE] = &amp;quot;#444444&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local BORDER_SIZES = {&lt;br /&gt;
	[imgS] = &amp;quot;1.5px&amp;quot;,&lt;br /&gt;
	[imgM] = &amp;quot;2px&amp;quot;,&lt;br /&gt;
	[imgL] = &amp;quot;4px&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- Shortcut markup that&#039;s easier for Lua string concatenations&lt;br /&gt;
local NBSP = &amp;quot;&amp;amp;nbsp;&amp;quot;&lt;br /&gt;
local BLANK = &amp;quot;—&amp;quot;&lt;br /&gt;
&lt;br /&gt;
--endregion&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--region Private methods&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
--- Formats a standard link to a perk. Does not invoke the template, but it&lt;br /&gt;
--- could be modified to do so in the future.&lt;br /&gt;
---&lt;br /&gt;
---@param perkName string the display name of the perk&lt;br /&gt;
---@param perkIcon string the filename for the icon&lt;br /&gt;
---@param iconSize string representing the desired size of the icon&lt;br /&gt;
---@param borderColor string the color of the border to put on the icon&lt;br /&gt;
---@return string an assembled link, with icon and text&lt;br /&gt;
local function perkLink(perkName, perkIcon, iconSize, borderColor)&lt;br /&gt;
&lt;br /&gt;
	if not perkName or not perkIcon or not iconSize then&lt;br /&gt;
		error(&amp;quot;Perk parameters cannot be nil.&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local displayStyle = &amp;quot;display: inline-block;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    --- Set absolute height of border span to stop it being bigger than the image&lt;br /&gt;
    if iconSize == imgS then&lt;br /&gt;
        displayStyle = displayStyle .. &amp;quot;height: 18px;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
	local startBorderSpan = &amp;quot;&amp;lt;span style=\&amp;quot; &amp;quot; .. displayStyle ..&lt;br /&gt;
			&amp;quot; border: &amp;quot; .. BORDER_SIZES[iconSize] .. &amp;quot; solid &amp;quot; .. borderColor .. &amp;quot;\&amp;quot;&amp;gt;&amp;quot;&lt;br /&gt;
	local endBorderSpan = &amp;quot;&amp;lt;/span&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    --- Hacky fix for weird image offset&lt;br /&gt;
    if iconSize == imgS then &lt;br /&gt;
        --- Add a second containing span to move the image into position&lt;br /&gt;
        startBorderSpan = startBorderSpan ..&lt;br /&gt;
          &amp;quot;&amp;lt;span style=\&amp;quot;display: block; transform: translateY(-4px)\&amp;quot;&amp;gt;&amp;quot;&lt;br /&gt;
        endBorderSpan = &amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
	local iconPart = &amp;quot;[[File:&amp;quot; .. perkIcon .. &amp;quot;|&amp;quot; .. iconSize ..&lt;br /&gt;
			&amp;quot;|alt=&amp;quot; .. perkName .. &amp;quot;|link=&amp;quot; .. perkName .. &amp;quot;]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	local linkPart = NBSP .. &amp;quot;[[&amp;quot; .. perkName .. &amp;quot;]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	return startBorderSpan .. iconPart .. endBorderSpan .. linkPart&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
--- Creates a header row under the provided MediaWiki HTML table entity.&lt;br /&gt;
---&lt;br /&gt;
---@param tableNode table MediaWiki HTML table entity&lt;br /&gt;
---@param needsPriceColumn boolean if the table need to include a price column&lt;br /&gt;
local function makeStandardPerkTableHeaderRow(tableNode, needsPriceColumn)&lt;br /&gt;
&lt;br /&gt;
	local row = tableNode:tag(&amp;quot;tr&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
	row:tag(&amp;quot;th&amp;quot;):wikitext(&amp;quot;Perk&amp;quot;):done()&lt;br /&gt;
	row:tag(&amp;quot;th&amp;quot;):wikitext(&amp;quot;Rarity&amp;quot;):done()&lt;br /&gt;
	row:tag(&amp;quot;th&amp;quot;):addClass(CLASS_UNSORTABLE):wikitext(&amp;quot;Description&amp;quot;):done()&lt;br /&gt;
	row:tag(&amp;quot;th&amp;quot;):addClass(CLASS_UNSORTABLE):wikitext(&amp;quot;Source(s)&amp;quot;):done()&lt;br /&gt;
	if needsPriceColumn then&lt;br /&gt;
		row:tag(&amp;quot;th&amp;quot;):wikitext(&amp;quot;Price&amp;quot;):done()&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	row:done():newline()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
--- Returns a standard MediaWiki HTML table entity created with standard&lt;br /&gt;
--- display and interactivity classes.&lt;br /&gt;
---&lt;br /&gt;
---@return table standard MediaWiki HTML table entity&lt;br /&gt;
local function startNewWikiTable()&lt;br /&gt;
&lt;br /&gt;
	return mw.html.create(&amp;quot;table&amp;quot;):addClass(CLASS_WIKITABLE_SORTABLE_COLLAPSIBLE):newline()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
--- Makes the content of the name column under the provided HTML table row&lt;br /&gt;
--- entity.&lt;br /&gt;
---&lt;br /&gt;
---@param htmlTableRow table MediaWiki HTML table row entity&lt;br /&gt;
---@param perkName string the name of the building&lt;br /&gt;
---@param perkIcon string the filename for the icon&lt;br /&gt;
---@param borderColor string the color of the border to put on the icon&lt;br /&gt;
local function makeNameColumn(htmlTableRow, perkName, perkIcon, borderColor)&lt;br /&gt;
&lt;br /&gt;
	htmlTableRow:tag(&amp;quot;td&amp;quot;):wikitext(perkLink(perkName, perkIcon, imgL, borderColor)):done():newline()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
--- Makes the content of the name column under the provided HTML table row&lt;br /&gt;
--- entity.&lt;br /&gt;
---&lt;br /&gt;
---@param htmlTableRow table MediaWiki HTML table row entity&lt;br /&gt;
---@param rarity string the rarity of the perk&lt;br /&gt;
local function makeRarityColumn(htmlTableRow, rarity)&lt;br /&gt;
&lt;br /&gt;
	htmlTableRow:tag(&amp;quot;td&amp;quot;):wikitext(rarity):done():newline()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
--- Makes the content of the description column under the provided HTML table&lt;br /&gt;
--- row node.&lt;br /&gt;
---&lt;br /&gt;
---@param htmlTableRow table MediaWiki HTML table row entity&lt;br /&gt;
---@param description string the long description&lt;br /&gt;
local function makeDescriptionColumn(htmlTableRow, description)&lt;br /&gt;
&lt;br /&gt;
	htmlTableRow:tag(&amp;quot;td&amp;quot;):cssText(CSS_TD_SHRINK_TO_FIT)&lt;br /&gt;
			:wikitext(description):done():newline()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
--- Builds an unordered bulleted list based on the specified perk&#039;s sources.&lt;br /&gt;
---&lt;br /&gt;
---@param htmlTableRow table the MediaWiki html node we&#039;re building on&lt;br /&gt;
---@param isFromCornerstone boolean whether the perk is a Cornerstone&lt;br /&gt;
---@param isFromEvent boolean whether the perk is a reward from an Event&lt;br /&gt;
---@param isFromOrder boolean whether the perk is a reward from an Order&lt;br /&gt;
---@param isFromTrader boolean whether the perk is purchasable from a Trader&lt;br /&gt;
local function makeSourcesColumn(htmlTableRow, isFromCornerstone, isFromEvent, isFromOrder, isFromTrader)&lt;br /&gt;
&lt;br /&gt;
	local td = htmlTableRow:tag(&amp;quot;td&amp;quot;)&lt;br /&gt;
	local list = td:tag(&amp;quot;ul&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
	if isFromCornerstone then&lt;br /&gt;
		list:tag(&amp;quot;li&amp;quot;):wikitext(&amp;quot;as a Cornerstone&amp;quot;):done()&lt;br /&gt;
	end&lt;br /&gt;
	if isFromEvent then&lt;br /&gt;
		list:tag(&amp;quot;li&amp;quot;):wikitext(&amp;quot;from Glade Event rewards&amp;quot;):done()&lt;br /&gt;
	end&lt;br /&gt;
	if isFromOrder then&lt;br /&gt;
		list:tag(&amp;quot;li&amp;quot;):wikitext(&amp;quot;from Order rewards&amp;quot;):done()&lt;br /&gt;
	end&lt;br /&gt;
	if isFromTrader then&lt;br /&gt;
		list:tag(&amp;quot;li&amp;quot;):wikitext(&amp;quot;purchased from a Trader&amp;quot;):done()&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	list:done()&lt;br /&gt;
	td:done()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
--- Adds a table cell containing the price and the amber icon&lt;br /&gt;
---&lt;br /&gt;
---@param htmlTableRow table the Mediawiki HTML node we&#039;re building on&lt;br /&gt;
---@param price number value in amber&lt;br /&gt;
local function makePriceColumn(htmlTableRow, price)&lt;br /&gt;
&lt;br /&gt;
	htmlTableRow:tag(&amp;quot;td&amp;quot;):wikitext(price .. NBSP .. amberIcon):done()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--endregion&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--region Public methods&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
--- Initializes the table, populates the caption, and writes and header row,&lt;br /&gt;
--- all appropriate for a table focusing on one perk.&lt;br /&gt;
---&lt;br /&gt;
--- The default is a wikitable output. With the displayOverride flag, this&lt;br /&gt;
--- method will instead make a list.&lt;br /&gt;
---&lt;br /&gt;
---@param perkName string the name of the perk this table is built for&lt;br /&gt;
---@param displayOverride string a flag for the output type if not the default&lt;br /&gt;
---@param needsPriceColumn boolean whether this perk needs a price column&lt;br /&gt;
function PerkSearchResultsView.startViewForPerk(perkName, displayOverride, needsPriceColumn)&lt;br /&gt;
&lt;br /&gt;
	-- These should never be nil at runtime.&lt;br /&gt;
	if not perkName then&lt;br /&gt;
		error(&amp;quot;Parameter is invalid for perk name.&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local newNode&lt;br /&gt;
	if displayOverride == PARAMETER_DISPLAY_OVERRIDE_LIST then&lt;br /&gt;
		newNode = mw.html.create(&amp;quot;ul&amp;quot;)&lt;br /&gt;
	else&lt;br /&gt;
		newNode = startNewWikiTable()&lt;br /&gt;
		newNode:tag(&amp;quot;caption&amp;quot;):wikitext(&amp;quot;Perk: &amp;quot; .. perkName .. &amp;quot;.&amp;quot;):done():newline()&lt;br /&gt;
&lt;br /&gt;
		makeStandardPerkTableHeaderRow(newNode, needsPriceColumn)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	beginning = newNode&lt;br /&gt;
	-- Return value is not used by the Controller, but for debugging.&lt;br /&gt;
	return newNode&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
--- Initializes the table, populates the caption, and writes and header row,&lt;br /&gt;
--- all appropriate for a table focusing on one perk.&lt;br /&gt;
---&lt;br /&gt;
--- The default is a wikitable output. With the displayOverride flag, this&lt;br /&gt;
--- method will instead make a list.&lt;br /&gt;
---&lt;br /&gt;
---@param perkName string the name of the perk this table is built for&lt;br /&gt;
---@param displayOverride string a flag for the output type if not the default&lt;br /&gt;
---@param numPerks number of perks that will be shown&lt;br /&gt;
---@param needsPriceColumn boolean whether this perk needs a price column&lt;br /&gt;
function PerkSearchResultsView.startViewForName(perkName, displayOverride, numPerks, needsPriceColumn)&lt;br /&gt;
&lt;br /&gt;
	-- These should never be nil at runtime.&lt;br /&gt;
	if not perkName then&lt;br /&gt;
		error(&amp;quot;Parameter is invalid for perk name.&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	if not numPerks then&lt;br /&gt;
		error(&amp;quot;Parameter is invalid for number of perks.&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local number = tonumber(numPerks)&lt;br /&gt;
	if not number then&lt;br /&gt;
		error(&amp;quot;Number of perks could not be converted to a number: &amp;quot; .. numPerks)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local newNode&lt;br /&gt;
	if displayOverride == PARAMETER_DISPLAY_OVERRIDE_LIST then&lt;br /&gt;
		newNode = mw.html.create(&amp;quot;ul&amp;quot;)&lt;br /&gt;
	else&lt;br /&gt;
		newNode = startNewWikiTable()&lt;br /&gt;
		newNode:tag(&amp;quot;caption&amp;quot;):wikitext(number .. &amp;quot; perks named &amp;quot; .. perkName .. &amp;quot;.&amp;quot;):done():newline()&lt;br /&gt;
&lt;br /&gt;
		makeStandardPerkTableHeaderRow(newNode, needsPriceColumn)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	beginning = newNode&lt;br /&gt;
	-- Return value is not used by the Controller, but for debugging.&lt;br /&gt;
	return newNode&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function PerkSearchResultsView.startViewForSearchResults(searchTerm, source, rarity,&lt;br /&gt;
														 displayOverride, numPerks, needsPriceColumn)&lt;br /&gt;
&lt;br /&gt;
	-- These should never be nil at runtime&lt;br /&gt;
	if not searchTerm then&lt;br /&gt;
		error(&amp;quot;Parameter is invalid for search term.&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	if not numPerks then&lt;br /&gt;
		error(&amp;quot;Parameter is invalid for number of perks.&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local number = tonumber(numPerks)&lt;br /&gt;
	if not number then&lt;br /&gt;
		error(&amp;quot;Number of perks could not be converted to a number: &amp;quot; .. numPerks)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local newNode&lt;br /&gt;
	if displayOverride == PARAMETER_DISPLAY_OVERRIDE_LIST then&lt;br /&gt;
		newNode = mw.html.create(&amp;quot;ul&amp;quot;)&lt;br /&gt;
	else&lt;br /&gt;
		local header = number .. NBSP&lt;br /&gt;
		if rarity then&lt;br /&gt;
			header = header .. rarity .. NBSP&lt;br /&gt;
		end&lt;br /&gt;
		header = header .. &amp;quot;Perks mentioning &#039;&amp;quot; .. searchTerm .. &amp;quot;&#039;&amp;quot;&lt;br /&gt;
		if source then&lt;br /&gt;
			header = header .. &amp;quot; from &amp;quot; .. source&lt;br /&gt;
		end&lt;br /&gt;
		header = header .. &amp;quot;.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
		newNode = startNewWikiTable()&lt;br /&gt;
		newNode:tag(&amp;quot;caption&amp;quot;):wikitext(header):done():newline()&lt;br /&gt;
&lt;br /&gt;
		makeStandardPerkTableHeaderRow(newNode, needsPriceColumn)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	beginning = newNode&lt;br /&gt;
	-- Return value is not used by the Controller, but for debugging.&lt;br /&gt;
	return newNode&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
--- Adds a new row to the content being built. This is typically called from a&lt;br /&gt;
--- Controller that knows how many rows to add. PerkSearchResultsView maintains&lt;br /&gt;
--- the output in-progress while rows are added, so that layout and formatting&lt;br /&gt;
--- can be owned by this module instead of the Controller.&lt;br /&gt;
---&lt;br /&gt;
---@param displayOverride string a flag for the output type if not the default&lt;br /&gt;
---@param perkName string the name of the perk&lt;br /&gt;
---@param description string the flavor text description&lt;br /&gt;
---@param iconFilename string the icon of the perk&lt;br /&gt;
---@param rarity string the rarity&lt;br /&gt;
---@param price number price of the perk at a trader&lt;br /&gt;
---@param isFromCornerstone boolean whether this perk is earned as a Cornerstone&lt;br /&gt;
---@param isFromEvent boolean whether this perk is rewarded from an event&lt;br /&gt;
---@param isFromOrder boolean whether this perk is earned from an Order&lt;br /&gt;
---@param isFromTrader boolean whether this perk is purchasable&lt;br /&gt;
---@param hasLastColumn boolean whether to render the last column (regardless of isFromTrader)&lt;br /&gt;
function PerkSearchResultsView.addRowForPerk(displayOverride, perkName,&lt;br /&gt;
											 description, iconFilename, rarity, price,&lt;br /&gt;
											 isFromCornerstone, isFromEvent, isFromOrder, isFromTrader,&lt;br /&gt;
											 hasLastColumn)&lt;br /&gt;
&lt;br /&gt;
	local newNode&lt;br /&gt;
	if displayOverride == PARAMETER_DISPLAY_OVERRIDE_LIST then&lt;br /&gt;
		-- List version.&lt;br /&gt;
		newNode = mw.html.create(&amp;quot;li&amp;quot;):wikitext(perkLink(perkName, iconFilename, imgS, RARITY_COLORS[rarity]))&lt;br /&gt;
	else&lt;br /&gt;
		-- Table version.&lt;br /&gt;
		newNode = mw.html.create(&amp;quot;tr&amp;quot;):newline()&lt;br /&gt;
		makeNameColumn(newNode, perkName, iconFilename, RARITY_COLORS[rarity])&lt;br /&gt;
		makeRarityColumn(newNode, rarity)&lt;br /&gt;
		makeDescriptionColumn(newNode, description)&lt;br /&gt;
		makeSourcesColumn(newNode, isFromCornerstone, isFromEvent, isFromOrder, isFromTrader)&lt;br /&gt;
		if hasLastColumn then&lt;br /&gt;
			if isFromTrader then&lt;br /&gt;
				makePriceColumn(newNode, price)&lt;br /&gt;
			else&lt;br /&gt;
				newNode:tag(&amp;quot;td&amp;quot;):wikitext(BLANK):done()&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	newNode:done()&lt;br /&gt;
	middle = middle .. tostring(newNode)&lt;br /&gt;
&lt;br /&gt;
	return newNode&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
--- Wraps up anything outstanding for the view, then returns the entire&lt;br /&gt;
--- MediaWiki entity originally started in the respective method.&lt;br /&gt;
---&lt;br /&gt;
---@return string the HTML markup of the completed view&lt;br /&gt;
function PerkSearchResultsView.endView()&lt;br /&gt;
&lt;br /&gt;
	beginning:node(middle)&lt;br /&gt;
	beginning:done()&lt;br /&gt;
&lt;br /&gt;
	middle = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	return beginning&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--endregion&lt;br /&gt;
&lt;br /&gt;
return PerkSearchResultsView&lt;/div&gt;</summary>
		<author><name>76561197987591703</name></author>
	</entry>
	<entry>
		<id>https://wiki.hoodedhorse.com/Against_the_Storm/index.php?title=Module:PerkSearchResultsView&amp;diff=4758</id>
		<title>Module:PerkSearchResultsView</title>
		<link rel="alternate" type="text/html" href="https://wiki.hoodedhorse.com/Against_the_Storm/index.php?title=Module:PerkSearchResultsView&amp;diff=4758"/>
		<updated>2023-12-13T05:58:32Z</updated>

		<summary type="html">&lt;p&gt;76561197987591703: Fix: changed perkLink function to correctly render the image inside its containing border when smaller than line height&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;--- @module PerkSearchResultsView&lt;br /&gt;
local PerkSearchResultsView = {}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local PerksData = require(&amp;quot;Module:PerksData&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--region Private member variables&lt;br /&gt;
&lt;br /&gt;
beginning = &amp;quot;&amp;quot;&lt;br /&gt;
middle = &amp;quot;&amp;quot;&lt;br /&gt;
ending = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
local imgS = mw.getCurrentFrame():expandTemplate{ title = &amp;quot;ImgS&amp;quot; }&lt;br /&gt;
local imgM = mw.getCurrentFrame():expandTemplate{ title = &amp;quot;ImgM&amp;quot; }&lt;br /&gt;
local imgL = mw.getCurrentFrame():expandTemplate{ title = &amp;quot;ImgL&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
local amberIcon = mw.getCurrentFrame():expandTemplate{ title= &amp;quot;Amber&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
--endregion&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--region Private constants&lt;br /&gt;
&lt;br /&gt;
local PARAMETER_DISPLAY_OVERRIDE_LIST = &amp;quot;list&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- wikitable classes for tables&lt;br /&gt;
local CLASS_WIKITABLE_SORTABLE_COLLAPSIBLE = &amp;quot;wikitable sortable mw-collapsible&amp;quot;&lt;br /&gt;
local CSS_TD_SHRINK_TO_FIT = &amp;quot;max-width: 20em&amp;quot;&lt;br /&gt;
local CLASS_UNSORTABLE = &amp;quot;unsortable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
local RARITY_COLORS = {&lt;br /&gt;
	[PerksData.RARITY_UNCOMMON] = &amp;quot;#15cf00&amp;quot;,&lt;br /&gt;
	[PerksData.RARITY_RARE] = &amp;quot;#015db9&amp;quot;,&lt;br /&gt;
	[PerksData.RARITY_EPIC] = &amp;quot;#7f27b9&amp;quot;,&lt;br /&gt;
	[PerksData.RARITY_LEGENDARY] = &amp;quot;#da6d00&amp;quot;,&lt;br /&gt;
	[PerksData.NONE] = &amp;quot;#444444&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local BORDER_SIZES = {&lt;br /&gt;
	[imgS] = &amp;quot;1.5px&amp;quot;,&lt;br /&gt;
	[imgM] = &amp;quot;2px&amp;quot;,&lt;br /&gt;
	[imgL] = &amp;quot;4px&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- Shortcut markup that&#039;s easier for Lua string concatenations&lt;br /&gt;
local NBSP = &amp;quot;&amp;amp;nbsp;&amp;quot;&lt;br /&gt;
local BLANK = &amp;quot;—&amp;quot;&lt;br /&gt;
&lt;br /&gt;
--endregion&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--region Private methods&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
--- Formats a standard link to a perk. Does not invoke the template, but it&lt;br /&gt;
--- could be modified to do so in the future.&lt;br /&gt;
---&lt;br /&gt;
---@param perkName string the display name of the perk&lt;br /&gt;
---@param perkIcon string the filename for the icon&lt;br /&gt;
---@param iconSize string representing the desired size of the icon&lt;br /&gt;
---@param borderColor string the color of the border to put on the icon&lt;br /&gt;
---@return string an assembled link, with icon and text&lt;br /&gt;
local function perkLink(perkName, perkIcon, iconSize, borderColor)&lt;br /&gt;
&lt;br /&gt;
	if not perkName or not perkIcon or not iconSize then&lt;br /&gt;
		error(&amp;quot;Perk parameters cannot be nil.&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local displayStyle = &amp;quot;display: inline-block;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    --- Set absolute height of border span to stop it being bigger than the image&lt;br /&gt;
    if iconSize == imgS then&lt;br /&gt;
        displayStyle = displayStyle .. &amp;quot;height:&amp;quot; .. imgS .. &amp;quot;;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
	local startBorderSpan = &amp;quot;&amp;lt;span style=\&amp;quot; &amp;quot; .. displayStyle ..&lt;br /&gt;
			&amp;quot; border: &amp;quot; .. BORDER_SIZES[iconSize] .. &amp;quot; solid &amp;quot; .. borderColor .. &amp;quot;\&amp;quot;&amp;gt;&amp;quot;&lt;br /&gt;
	local endBorderSpan = &amp;quot;&amp;lt;/span&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    --- Hacky fix for weird image offset&lt;br /&gt;
    if iconSize == imgS then &lt;br /&gt;
        --- Add a second containing span to move the image into position&lt;br /&gt;
        startBorderSpan = startBorderSpan ..&lt;br /&gt;
          &amp;quot;&amp;lt;span style=\&amp;quot;display: block; transform: translateY(-4px)\&amp;quot;&amp;gt;&amp;quot;&lt;br /&gt;
        endBorderSpan = &amp;quot;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
	local iconPart = &amp;quot;[[File:&amp;quot; .. perkIcon .. &amp;quot;|&amp;quot; .. iconSize ..&lt;br /&gt;
			&amp;quot;|alt=&amp;quot; .. perkName .. &amp;quot;|link=&amp;quot; .. perkName .. &amp;quot;]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	local linkPart = NBSP .. &amp;quot;[[&amp;quot; .. perkName .. &amp;quot;]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	return startBorderSpan .. iconPart .. endBorderSpan .. linkPart&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
--- Creates a header row under the provided MediaWiki HTML table entity.&lt;br /&gt;
---&lt;br /&gt;
---@param tableNode table MediaWiki HTML table entity&lt;br /&gt;
---@param needsPriceColumn boolean if the table need to include a price column&lt;br /&gt;
local function makeStandardPerkTableHeaderRow(tableNode, needsPriceColumn)&lt;br /&gt;
&lt;br /&gt;
	local row = tableNode:tag(&amp;quot;tr&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
	row:tag(&amp;quot;th&amp;quot;):wikitext(&amp;quot;Perk&amp;quot;):done()&lt;br /&gt;
	row:tag(&amp;quot;th&amp;quot;):wikitext(&amp;quot;Rarity&amp;quot;):done()&lt;br /&gt;
	row:tag(&amp;quot;th&amp;quot;):addClass(CLASS_UNSORTABLE):wikitext(&amp;quot;Description&amp;quot;):done()&lt;br /&gt;
	row:tag(&amp;quot;th&amp;quot;):addClass(CLASS_UNSORTABLE):wikitext(&amp;quot;Source(s)&amp;quot;):done()&lt;br /&gt;
	if needsPriceColumn then&lt;br /&gt;
		row:tag(&amp;quot;th&amp;quot;):wikitext(&amp;quot;Price&amp;quot;):done()&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	row:done():newline()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
--- Returns a standard MediaWiki HTML table entity created with standard&lt;br /&gt;
--- display and interactivity classes.&lt;br /&gt;
---&lt;br /&gt;
---@return table standard MediaWiki HTML table entity&lt;br /&gt;
local function startNewWikiTable()&lt;br /&gt;
&lt;br /&gt;
	return mw.html.create(&amp;quot;table&amp;quot;):addClass(CLASS_WIKITABLE_SORTABLE_COLLAPSIBLE):newline()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
--- Makes the content of the name column under the provided HTML table row&lt;br /&gt;
--- entity.&lt;br /&gt;
---&lt;br /&gt;
---@param htmlTableRow table MediaWiki HTML table row entity&lt;br /&gt;
---@param perkName string the name of the building&lt;br /&gt;
---@param perkIcon string the filename for the icon&lt;br /&gt;
---@param borderColor string the color of the border to put on the icon&lt;br /&gt;
local function makeNameColumn(htmlTableRow, perkName, perkIcon, borderColor)&lt;br /&gt;
&lt;br /&gt;
	htmlTableRow:tag(&amp;quot;td&amp;quot;):wikitext(perkLink(perkName, perkIcon, imgL, borderColor)):done():newline()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
--- Makes the content of the name column under the provided HTML table row&lt;br /&gt;
--- entity.&lt;br /&gt;
---&lt;br /&gt;
---@param htmlTableRow table MediaWiki HTML table row entity&lt;br /&gt;
---@param rarity string the rarity of the perk&lt;br /&gt;
local function makeRarityColumn(htmlTableRow, rarity)&lt;br /&gt;
&lt;br /&gt;
	htmlTableRow:tag(&amp;quot;td&amp;quot;):wikitext(rarity):done():newline()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
--- Makes the content of the description column under the provided HTML table&lt;br /&gt;
--- row node.&lt;br /&gt;
---&lt;br /&gt;
---@param htmlTableRow table MediaWiki HTML table row entity&lt;br /&gt;
---@param description string the long description&lt;br /&gt;
local function makeDescriptionColumn(htmlTableRow, description)&lt;br /&gt;
&lt;br /&gt;
	htmlTableRow:tag(&amp;quot;td&amp;quot;):cssText(CSS_TD_SHRINK_TO_FIT)&lt;br /&gt;
			:wikitext(description):done():newline()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
--- Builds an unordered bulleted list based on the specified perk&#039;s sources.&lt;br /&gt;
---&lt;br /&gt;
---@param htmlTableRow table the MediaWiki html node we&#039;re building on&lt;br /&gt;
---@param isFromCornerstone boolean whether the perk is a Cornerstone&lt;br /&gt;
---@param isFromEvent boolean whether the perk is a reward from an Event&lt;br /&gt;
---@param isFromOrder boolean whether the perk is a reward from an Order&lt;br /&gt;
---@param isFromTrader boolean whether the perk is purchasable from a Trader&lt;br /&gt;
local function makeSourcesColumn(htmlTableRow, isFromCornerstone, isFromEvent, isFromOrder, isFromTrader)&lt;br /&gt;
&lt;br /&gt;
	local td = htmlTableRow:tag(&amp;quot;td&amp;quot;)&lt;br /&gt;
	local list = td:tag(&amp;quot;ul&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
	if isFromCornerstone then&lt;br /&gt;
		list:tag(&amp;quot;li&amp;quot;):wikitext(&amp;quot;as a Cornerstone&amp;quot;):done()&lt;br /&gt;
	end&lt;br /&gt;
	if isFromEvent then&lt;br /&gt;
		list:tag(&amp;quot;li&amp;quot;):wikitext(&amp;quot;from Glade Event rewards&amp;quot;):done()&lt;br /&gt;
	end&lt;br /&gt;
	if isFromOrder then&lt;br /&gt;
		list:tag(&amp;quot;li&amp;quot;):wikitext(&amp;quot;from Order rewards&amp;quot;):done()&lt;br /&gt;
	end&lt;br /&gt;
	if isFromTrader then&lt;br /&gt;
		list:tag(&amp;quot;li&amp;quot;):wikitext(&amp;quot;purchased from a Trader&amp;quot;):done()&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	list:done()&lt;br /&gt;
	td:done()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
--- Adds a table cell containing the price and the amber icon&lt;br /&gt;
---&lt;br /&gt;
---@param htmlTableRow table the Mediawiki HTML node we&#039;re building on&lt;br /&gt;
---@param price number value in amber&lt;br /&gt;
local function makePriceColumn(htmlTableRow, price)&lt;br /&gt;
&lt;br /&gt;
	htmlTableRow:tag(&amp;quot;td&amp;quot;):wikitext(price .. NBSP .. amberIcon):done()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--endregion&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--region Public methods&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
--- Initializes the table, populates the caption, and writes and header row,&lt;br /&gt;
--- all appropriate for a table focusing on one perk.&lt;br /&gt;
---&lt;br /&gt;
--- The default is a wikitable output. With the displayOverride flag, this&lt;br /&gt;
--- method will instead make a list.&lt;br /&gt;
---&lt;br /&gt;
---@param perkName string the name of the perk this table is built for&lt;br /&gt;
---@param displayOverride string a flag for the output type if not the default&lt;br /&gt;
---@param needsPriceColumn boolean whether this perk needs a price column&lt;br /&gt;
function PerkSearchResultsView.startViewForPerk(perkName, displayOverride, needsPriceColumn)&lt;br /&gt;
&lt;br /&gt;
	-- These should never be nil at runtime.&lt;br /&gt;
	if not perkName then&lt;br /&gt;
		error(&amp;quot;Parameter is invalid for perk name.&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local newNode&lt;br /&gt;
	if displayOverride == PARAMETER_DISPLAY_OVERRIDE_LIST then&lt;br /&gt;
		newNode = mw.html.create(&amp;quot;ul&amp;quot;)&lt;br /&gt;
	else&lt;br /&gt;
		newNode = startNewWikiTable()&lt;br /&gt;
		newNode:tag(&amp;quot;caption&amp;quot;):wikitext(&amp;quot;Perk: &amp;quot; .. perkName .. &amp;quot;.&amp;quot;):done():newline()&lt;br /&gt;
&lt;br /&gt;
		makeStandardPerkTableHeaderRow(newNode, needsPriceColumn)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	beginning = newNode&lt;br /&gt;
	-- Return value is not used by the Controller, but for debugging.&lt;br /&gt;
	return newNode&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
--- Initializes the table, populates the caption, and writes and header row,&lt;br /&gt;
--- all appropriate for a table focusing on one perk.&lt;br /&gt;
---&lt;br /&gt;
--- The default is a wikitable output. With the displayOverride flag, this&lt;br /&gt;
--- method will instead make a list.&lt;br /&gt;
---&lt;br /&gt;
---@param perkName string the name of the perk this table is built for&lt;br /&gt;
---@param displayOverride string a flag for the output type if not the default&lt;br /&gt;
---@param numPerks number of perks that will be shown&lt;br /&gt;
---@param needsPriceColumn boolean whether this perk needs a price column&lt;br /&gt;
function PerkSearchResultsView.startViewForName(perkName, displayOverride, numPerks, needsPriceColumn)&lt;br /&gt;
&lt;br /&gt;
	-- These should never be nil at runtime.&lt;br /&gt;
	if not perkName then&lt;br /&gt;
		error(&amp;quot;Parameter is invalid for perk name.&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	if not numPerks then&lt;br /&gt;
		error(&amp;quot;Parameter is invalid for number of perks.&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local number = tonumber(numPerks)&lt;br /&gt;
	if not number then&lt;br /&gt;
		error(&amp;quot;Number of perks could not be converted to a number: &amp;quot; .. numPerks)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local newNode&lt;br /&gt;
	if displayOverride == PARAMETER_DISPLAY_OVERRIDE_LIST then&lt;br /&gt;
		newNode = mw.html.create(&amp;quot;ul&amp;quot;)&lt;br /&gt;
	else&lt;br /&gt;
		newNode = startNewWikiTable()&lt;br /&gt;
		newNode:tag(&amp;quot;caption&amp;quot;):wikitext(number .. &amp;quot; perks named &amp;quot; .. perkName .. &amp;quot;.&amp;quot;):done():newline()&lt;br /&gt;
&lt;br /&gt;
		makeStandardPerkTableHeaderRow(newNode, needsPriceColumn)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	beginning = newNode&lt;br /&gt;
	-- Return value is not used by the Controller, but for debugging.&lt;br /&gt;
	return newNode&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function PerkSearchResultsView.startViewForSearchResults(searchTerm, source, rarity,&lt;br /&gt;
														 displayOverride, numPerks, needsPriceColumn)&lt;br /&gt;
&lt;br /&gt;
	-- These should never be nil at runtime&lt;br /&gt;
	if not searchTerm then&lt;br /&gt;
		error(&amp;quot;Parameter is invalid for search term.&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	if not numPerks then&lt;br /&gt;
		error(&amp;quot;Parameter is invalid for number of perks.&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local number = tonumber(numPerks)&lt;br /&gt;
	if not number then&lt;br /&gt;
		error(&amp;quot;Number of perks could not be converted to a number: &amp;quot; .. numPerks)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local newNode&lt;br /&gt;
	if displayOverride == PARAMETER_DISPLAY_OVERRIDE_LIST then&lt;br /&gt;
		newNode = mw.html.create(&amp;quot;ul&amp;quot;)&lt;br /&gt;
	else&lt;br /&gt;
		local header = number .. NBSP&lt;br /&gt;
		if rarity then&lt;br /&gt;
			header = header .. rarity .. NBSP&lt;br /&gt;
		end&lt;br /&gt;
		header = header .. &amp;quot;Perks mentioning &#039;&amp;quot; .. searchTerm .. &amp;quot;&#039;&amp;quot;&lt;br /&gt;
		if source then&lt;br /&gt;
			header = header .. &amp;quot; from &amp;quot; .. source&lt;br /&gt;
		end&lt;br /&gt;
		header = header .. &amp;quot;.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
		newNode = startNewWikiTable()&lt;br /&gt;
		newNode:tag(&amp;quot;caption&amp;quot;):wikitext(header):done():newline()&lt;br /&gt;
&lt;br /&gt;
		makeStandardPerkTableHeaderRow(newNode, needsPriceColumn)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	beginning = newNode&lt;br /&gt;
	-- Return value is not used by the Controller, but for debugging.&lt;br /&gt;
	return newNode&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
--- Adds a new row to the content being built. This is typically called from a&lt;br /&gt;
--- Controller that knows how many rows to add. PerkSearchResultsView maintains&lt;br /&gt;
--- the output in-progress while rows are added, so that layout and formatting&lt;br /&gt;
--- can be owned by this module instead of the Controller.&lt;br /&gt;
---&lt;br /&gt;
---@param displayOverride string a flag for the output type if not the default&lt;br /&gt;
---@param perkName string the name of the perk&lt;br /&gt;
---@param description string the flavor text description&lt;br /&gt;
---@param iconFilename string the icon of the perk&lt;br /&gt;
---@param rarity string the rarity&lt;br /&gt;
---@param price number price of the perk at a trader&lt;br /&gt;
---@param isFromCornerstone boolean whether this perk is earned as a Cornerstone&lt;br /&gt;
---@param isFromEvent boolean whether this perk is rewarded from an event&lt;br /&gt;
---@param isFromOrder boolean whether this perk is earned from an Order&lt;br /&gt;
---@param isFromTrader boolean whether this perk is purchasable&lt;br /&gt;
---@param hasLastColumn boolean whether to render the last column (regardless of isFromTrader)&lt;br /&gt;
function PerkSearchResultsView.addRowForPerk(displayOverride, perkName,&lt;br /&gt;
											 description, iconFilename, rarity, price,&lt;br /&gt;
											 isFromCornerstone, isFromEvent, isFromOrder, isFromTrader,&lt;br /&gt;
											 hasLastColumn)&lt;br /&gt;
&lt;br /&gt;
	local newNode&lt;br /&gt;
	if displayOverride == PARAMETER_DISPLAY_OVERRIDE_LIST then&lt;br /&gt;
		-- List version.&lt;br /&gt;
		newNode = mw.html.create(&amp;quot;li&amp;quot;):wikitext(perkLink(perkName, iconFilename, imgS, RARITY_COLORS[rarity]))&lt;br /&gt;
	else&lt;br /&gt;
		-- Table version.&lt;br /&gt;
		newNode = mw.html.create(&amp;quot;tr&amp;quot;):newline()&lt;br /&gt;
		makeNameColumn(newNode, perkName, iconFilename, RARITY_COLORS[rarity])&lt;br /&gt;
		makeRarityColumn(newNode, rarity)&lt;br /&gt;
		makeDescriptionColumn(newNode, description)&lt;br /&gt;
		makeSourcesColumn(newNode, isFromCornerstone, isFromEvent, isFromOrder, isFromTrader)&lt;br /&gt;
		if hasLastColumn then&lt;br /&gt;
			if isFromTrader then&lt;br /&gt;
				makePriceColumn(newNode, price)&lt;br /&gt;
			else&lt;br /&gt;
				newNode:tag(&amp;quot;td&amp;quot;):wikitext(BLANK):done()&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	newNode:done()&lt;br /&gt;
	middle = middle .. tostring(newNode)&lt;br /&gt;
&lt;br /&gt;
	return newNode&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
--- Wraps up anything outstanding for the view, then returns the entire&lt;br /&gt;
--- MediaWiki entity originally started in the respective method.&lt;br /&gt;
---&lt;br /&gt;
---@return string the HTML markup of the completed view&lt;br /&gt;
function PerkSearchResultsView.endView()&lt;br /&gt;
&lt;br /&gt;
	beginning:node(middle)&lt;br /&gt;
	beginning:done()&lt;br /&gt;
&lt;br /&gt;
	middle = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	return beginning&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--endregion&lt;br /&gt;
&lt;br /&gt;
return PerkSearchResultsView&lt;/div&gt;</summary>
		<author><name>76561197987591703</name></author>
	</entry>
	<entry>
		<id>https://wiki.hoodedhorse.com/Against_the_Storm/index.php?title=User:76561197987591703&amp;diff=4724</id>
		<title>User:76561197987591703</title>
		<link rel="alternate" type="text/html" href="https://wiki.hoodedhorse.com/Against_the_Storm/index.php?title=User:76561197987591703&amp;diff=4724"/>
		<updated>2023-12-12T04:14:08Z</updated>

		<summary type="html">&lt;p&gt;76561197987591703: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h1&amp;gt; Testing Ground &amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;float: right; clear: right; border-image-source: url(&#039;https://hoodedhorse.com/wiki/images/mbhh_ats/3/34/Infobox_Background.png&#039;); border-image-slice: 30 fill; border-image-outset: 30px; border-image-repeat: 30px stretch; color: #D5D5D5; max-width: 350px; font-family: EB Garamond; letter-spacing: 0.05rem&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border: none; background-color: transparent; font-size: 18px; font-variant: small-caps; font-weight: 400;&amp;quot; | Ancient Hearth&amp;lt;/span&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| style=&amp;quot;border: none; text-align: center&amp;quot; | The heart of the colony is protected by the Holy Flame. Villagers gather here to rest, eat, and receive clothing. If the fire goes out, people will lose hope.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border: none; text-align: center&amp;quot; | Specialization bonus: {{Specialization link|Warmth}}&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>76561197987591703</name></author>
	</entry>
	<entry>
		<id>https://wiki.hoodedhorse.com/Against_the_Storm/index.php?title=User:76561197987591703&amp;diff=4723</id>
		<title>User:76561197987591703</title>
		<link rel="alternate" type="text/html" href="https://wiki.hoodedhorse.com/Against_the_Storm/index.php?title=User:76561197987591703&amp;diff=4723"/>
		<updated>2023-12-12T04:13:02Z</updated>

		<summary type="html">&lt;p&gt;76561197987591703: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h1&amp;gt; Testing Ground &amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;padding: 5px; float: right; clear: right; border-image: url(&#039;https://hoodedhorse.com/wiki/images/mbhh_ats/3/34/Infobox_Background.png&#039;) 30 fill / 30px / 30px stretch; color: #D5D5D5; max-width: 350px; font-family: EB Garamond; letter-spacing: 0.05rem&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border: none; background-color: transparent; font-size: 18px; font-variant: small-caps; font-weight: 400;&amp;quot; | Ancient Hearth&amp;lt;/span&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| style=&amp;quot;border: none; text-align: center&amp;quot; | The heart of the colony is protected by the Holy Flame. Villagers gather here to rest, eat, and receive clothing. If the fire goes out, people will lose hope.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border: none; text-align: center&amp;quot; | Specialization bonus: {{Specialization link|Warmth}}&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>76561197987591703</name></author>
	</entry>
	<entry>
		<id>https://wiki.hoodedhorse.com/Against_the_Storm/index.php?title=User:76561197987591703&amp;diff=4722</id>
		<title>User:76561197987591703</title>
		<link rel="alternate" type="text/html" href="https://wiki.hoodedhorse.com/Against_the_Storm/index.php?title=User:76561197987591703&amp;diff=4722"/>
		<updated>2023-12-12T04:12:20Z</updated>

		<summary type="html">&lt;p&gt;76561197987591703: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h1&amp;gt; Testing Ground &amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;padding: 5px; float: right; clear: right; border-image: url(&#039;https://hoodedhorse.com/wiki/images/mbhh_ats/3/34/Infobox_Background.png&#039;) 30 fill / 30px / 30px stretch; border: 3px solid #4D4432; border-radius: 3px; color: #D5D5D5; max-width: 350px; font-family: EB Garamond; letter-spacing: 0.05rem&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border: none; background-color: transparent; font-size: 18px; font-variant: small-caps; font-weight: 400;&amp;quot; | Ancient Hearth&amp;lt;/span&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| style=&amp;quot;border: none; text-align: center&amp;quot; | The heart of the colony is protected by the Holy Flame. Villagers gather here to rest, eat, and receive clothing. If the fire goes out, people will lose hope.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border: none; text-align: center&amp;quot; | Specialization bonus: {{Specialization link|Warmth}}&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>76561197987591703</name></author>
	</entry>
	<entry>
		<id>https://wiki.hoodedhorse.com/Against_the_Storm/index.php?title=File:Infobox_Background.png&amp;diff=4721</id>
		<title>File:Infobox Background.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.hoodedhorse.com/Against_the_Storm/index.php?title=File:Infobox_Background.png&amp;diff=4721"/>
		<updated>2023-12-12T04:10:33Z</updated>

		<summary type="html">&lt;p&gt;76561197987591703: Background for infoboxes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
Background for infoboxes&lt;/div&gt;</summary>
		<author><name>76561197987591703</name></author>
	</entry>
	<entry>
		<id>https://wiki.hoodedhorse.com/Against_the_Storm/index.php?title=User:76561197987591703&amp;diff=4720</id>
		<title>User:76561197987591703</title>
		<link rel="alternate" type="text/html" href="https://wiki.hoodedhorse.com/Against_the_Storm/index.php?title=User:76561197987591703&amp;diff=4720"/>
		<updated>2023-12-12T03:21:32Z</updated>

		<summary type="html">&lt;p&gt;76561197987591703: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h1&amp;gt; Testing Ground &amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;padding: 5px; float: right; clear: right; background-image: linear-gradient(to bottom, #000003, #091005); background-size: cover; border: 3px solid #4D4432; border-radius: 3px; color: #D5D5D5; max-width: 350px; font-family: EB Garamond; letter-spacing: 0.05rem&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border: none; background-color: transparent; font-size: 18px; font-variant: small-caps; font-weight: 400;&amp;quot; | Ancient Hearth&amp;lt;/span&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| style=&amp;quot;border: none; text-align: center&amp;quot; | The heart of the colony is protected by the Holy Flame. Villagers gather here to rest, eat, and receive clothing. If the fire goes out, people will lose hope.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border: none; text-align: center&amp;quot; | Specialization bonus: {{Specialization link|Warmth}}&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>76561197987591703</name></author>
	</entry>
	<entry>
		<id>https://wiki.hoodedhorse.com/Against_the_Storm/index.php?title=User:76561197987591703&amp;diff=4719</id>
		<title>User:76561197987591703</title>
		<link rel="alternate" type="text/html" href="https://wiki.hoodedhorse.com/Against_the_Storm/index.php?title=User:76561197987591703&amp;diff=4719"/>
		<updated>2023-12-12T03:10:09Z</updated>

		<summary type="html">&lt;p&gt;76561197987591703: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h1&amp;gt; Testing Ground &amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;padding: 5px; float: right; clear: right; background-image: linear-gradient(to bottom, #000003, #091005); background-size: cover; border: 3px solid #4D4432; border-radius: 3px; color: #D5D5D5; max-width: 350px; font-family: EB Garamond; letter-spacing: 0.05rem&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;border: none; background-color: transparent; font-size: 18px; text-transform: uppercase&amp;quot; | A&amp;lt;span style=&amp;quot;font-size: 12px&amp;quot;&amp;gt;ncient&amp;lt;/span&amp;gt; H&amp;lt;span style=&amp;quot;font-size: 12px&amp;quot;&amp;gt;earth&amp;lt;/span&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| style=&amp;quot;border: none; text-align: center&amp;quot; | The heart of the colony is protected by the Holy Flame. Villagers gather here to rest, eat, and receive clothing. If the fire goes out, people will lose hope.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;border: none; text-align: center&amp;quot; | Specialization bonus: 🔥&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>76561197987591703</name></author>
	</entry>
	<entry>
		<id>https://wiki.hoodedhorse.com/Against_the_Storm/index.php?title=User:76561197987591703&amp;diff=4718</id>
		<title>User:76561197987591703</title>
		<link rel="alternate" type="text/html" href="https://wiki.hoodedhorse.com/Against_the_Storm/index.php?title=User:76561197987591703&amp;diff=4718"/>
		<updated>2023-12-12T02:57:04Z</updated>

		<summary type="html">&lt;p&gt;76561197987591703: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h1&amp;gt; Testing Ground &amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;padding: 5px; float: right; clear: right; background-image: linear-gradient(to bottom, #000, #080C04); background-size: cover; display: flex; flex-direction: column; justify-content: space-between; align-items: center; border: 5px solid #4D4432; border-radius: 2px; color: #D5D5D5; max-width: 350px;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;background-color: transparent; font-size: 16px;&amp;quot; | Ancient Hearth&lt;br /&gt;
|- &lt;br /&gt;
| style=&amp;quot;text-align: center&amp;quot; | The heart of the colony is protected by the Holy Flame. Villagers gather here to rest, eat, and receive clothing. If the fire goes out, people will lose hope.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: center&amp;quot; | Specialization bonus: 🔥&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>76561197987591703</name></author>
	</entry>
	<entry>
		<id>https://wiki.hoodedhorse.com/Against_the_Storm/index.php?title=User:76561197987591703&amp;diff=4717</id>
		<title>User:76561197987591703</title>
		<link rel="alternate" type="text/html" href="https://wiki.hoodedhorse.com/Against_the_Storm/index.php?title=User:76561197987591703&amp;diff=4717"/>
		<updated>2023-12-12T02:56:41Z</updated>

		<summary type="html">&lt;p&gt;76561197987591703: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h1&amp;gt; Testing Ground &amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;float: right; clear: right; background-image: linear-gradient(to bottom, #000, #080C04); background-size: cover; display: flex; flex-direction: column; justify-content: space-between; align-items: center; border: 5px solid #4D4432; border-radius: 2px; color: #D5D5D5; max-width: 350px;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! style=&amp;quot;background-color: transparent; font-size: 16px;&amp;quot; | Ancient Hearth&lt;br /&gt;
|- &lt;br /&gt;
| style=&amp;quot;text-align: center&amp;quot; | The heart of the colony is protected by the Holy Flame. Villagers gather here to rest, eat, and receive clothing. If the fire goes out, people will lose hope.&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;text-align: center&amp;quot; | Specialization bonus: 🔥&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>76561197987591703</name></author>
	</entry>
	<entry>
		<id>https://wiki.hoodedhorse.com/Against_the_Storm/index.php?title=User:76561197987591703&amp;diff=4716</id>
		<title>User:76561197987591703</title>
		<link rel="alternate" type="text/html" href="https://wiki.hoodedhorse.com/Against_the_Storm/index.php?title=User:76561197987591703&amp;diff=4716"/>
		<updated>2023-12-12T02:53:33Z</updated>

		<summary type="html">&lt;p&gt;76561197987591703: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h1&amp;gt; Testing Ground &amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;float: right; clear: right; background-image: linear-gradient(to bottom, #000, #080C04); background-size: cover; display: flex; flex-direction: column; justify-content: space-between; align-items: center; border: 2px solid #4D4432; border-radius: 1px; color: #D5D5D5; max-width: 300px;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Ancient Hearth&lt;br /&gt;
|- &lt;br /&gt;
| The heart of the colony is protected by the Holy Flame. Villagers gather here to rest, eat, and receive clothing. If the fire goes out, people will lose hope.&lt;br /&gt;
|-&lt;br /&gt;
| Specialization bonus: 🔥&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>76561197987591703</name></author>
	</entry>
	<entry>
		<id>https://wiki.hoodedhorse.com/Against_the_Storm/index.php?title=User:76561197987591703&amp;diff=4715</id>
		<title>User:76561197987591703</title>
		<link rel="alternate" type="text/html" href="https://wiki.hoodedhorse.com/Against_the_Storm/index.php?title=User:76561197987591703&amp;diff=4715"/>
		<updated>2023-12-12T02:51:52Z</updated>

		<summary type="html">&lt;p&gt;76561197987591703: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h1&amp;gt; Testing Ground &amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;height: 120px; width: 500px; background-image: linear-gradient(to bottom, #000, #080C04); background-size: cover; display: flex; flex-direction: column; justify-content: space-between; align-items: center; border: 2px solid #4D4432; border-radius: 1px; color: #D5D5D5&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Ancient Hearth&lt;br /&gt;
|- &lt;br /&gt;
| The heart of the colony is protected by the Holy Flame. Villagers gather here to rest, eat, and receive clothing. If the fire goes out, people will lose hope.&lt;br /&gt;
|-&lt;br /&gt;
| Specialization bonus: {{🔥|Warmth}}&lt;/div&gt;</summary>
		<author><name>76561197987591703</name></author>
	</entry>
	<entry>
		<id>https://wiki.hoodedhorse.com/Against_the_Storm/index.php?title=User:76561197987591703&amp;diff=4714</id>
		<title>User:76561197987591703</title>
		<link rel="alternate" type="text/html" href="https://wiki.hoodedhorse.com/Against_the_Storm/index.php?title=User:76561197987591703&amp;diff=4714"/>
		<updated>2023-12-12T02:50:05Z</updated>

		<summary type="html">&lt;p&gt;76561197987591703: Created page with &amp;quot;&amp;lt;h1&amp;gt; Testing Ground &amp;lt;/h1&amp;gt;  &amp;lt;div style=&amp;quot;height: 120px; width: 500px; background-image: linear-gradient(to bottom, #000, #080C04); background-size: cover; display: flex; flex-direction: column; justify-content: space-between; align-items: center; border: 2px solid #4D4432; border-radius: 1px; color: #D5D5D5&amp;quot;&amp;gt;   &amp;lt;span style=&amp;quot;text-align: center;&amp;quot;&amp;gt;Ancient Hearth&amp;lt;/span&amp;gt;   &amp;lt;span&amp;gt;The heart of the colony is protected by the Holy Flame. Villagers gather here to rest, eat, and rece...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h1&amp;gt; Testing Ground &amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;height: 120px; width: 500px; background-image: linear-gradient(to bottom, #000, #080C04); background-size: cover; display: flex; flex-direction: column; justify-content: space-between; align-items: center; border: 2px solid #4D4432; border-radius: 1px; color: #D5D5D5&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;span style=&amp;quot;text-align: center;&amp;quot;&amp;gt;Ancient Hearth&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;span&amp;gt;The heart of the colony is protected by the Holy Flame. Villagers gather here to rest, eat, and receive clothing. If the fire goes out, people will lose hope.&lt;br /&gt;
  &amp;lt;span&amp;gt;Specialization bonus: 🔥&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>76561197987591703</name></author>
	</entry>
</feed>