<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://hna.wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Valaerys</id>
	<title>Honkai: Nexus Anima Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://hna.wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Valaerys"/>
	<link rel="alternate" type="text/html" href="https://hna.wiki/Special:Contributions/Valaerys"/>
	<updated>2026-08-29T01:23:41Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.46.0</generator>
	<entry>
		<id>https://hna.wiki/Puddlipup/Change_History?diff=9948</id>
		<title>Puddlipup/Change History</title>
		<link rel="alternate" type="text/html" href="https://hna.wiki/Puddlipup/Change_History?diff=9948"/>
		<updated>2026-07-20T16:11:49Z</updated>

		<summary type="html">&lt;p&gt;Valaerys: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Change History/Header}}&lt;br /&gt;
[[Version 0.60.0]]&lt;br /&gt;
* Trait was changed from [[Striker]] to [[Protector]].&lt;br /&gt;
* Height was changed from 68 cm to 64 Units.&lt;br /&gt;
* Description was updated:&lt;br /&gt;
** {{Color|Old:}} &amp;quot;This soft, bouncy pudding-pup Anima often gets flattened {{Highlight|under}} the pressures of life. Clever humans use this fact to give themselves a bit of a boost, bouncing high into the sky.&amp;quot;&lt;br /&gt;
** {{Color|New:}} &amp;quot;This soft, bouncy pudding-pup Anima often gets flattened {{Highlight|by}} the pressures of life. Clever humans use this fact to give themselves a bit of a boost, bouncing high into the sky.&amp;quot;&lt;br /&gt;
* Story description was updated:&lt;br /&gt;
** {{Color|Old:}} &amp;quot;Puddlipup was confused. Eggnok often {{Highlight|shared its}} stories of {{Highlight|a}} rebellious, scrappy childhood with {{Highlight|Puddlipup}}, hoping to encourage Puddlipup to be tougher against those awful humans who pushed it around. &amp;quot;Woof?&amp;quot; {{Highlight|What&#039;s tough?}} But I was born all soft and squishy, wasn&#039;t I!? &amp;quot;Woof...&amp;quot; Sometimes, it did feel like humans could be {{Highlight|a little...}} too enthusiastic, and it wasn&#039;t {{Highlight|great}} at handling that {{Highlight|kind of}} attention. {{Highlight|In fact, it was even a bit introverted.}}&amp;quot;Woof!&amp;quot; Puddlipup {{Highlight|suddenly seemed to understand}} what tough meant{{Highlight|... After all, it knew some}} humans preferred hard, {{Highlight|coarse bread}}... {{Highlight|But it was born all soft and squishy, wasn&#039;t it!? Whaddaya want it to do!?}}&lt;br /&gt;
** {{Color|New:}} &amp;quot;Puddlipup was confused. Eggnok {{Highlight|would}} often {{Highlight|share}} stories of {{Highlight|its own}} rebellious, scrappy childhood with {{Highlight|it}}, hoping to encourage Puddlipup to be tougher against those awful humans who pushed it around. &amp;quot;Woof?&amp;quot; {{Highlight|Tougher?}} {{Highlight|Puddlipup looked confused.}} But I was born all soft and squishy, {{Highlight|right?}} &amp;quot;Woof...&amp;quot; Sometimes, it did feel like humans could be {{Highlight|somewhat}}... too enthusiastic, and it wasn&#039;t {{Highlight|really good}} at handling {{Highlight|such}} attention {{Highlight|as an introvert.}} &amp;quot;Woof!&amp;quot; Puddlipup seemingly understood what tough meant{{Highlight|! Some humans}} {{Highlight|like their bread}} hard {{Highlight|and crusty. Puddlipup got it.}}&amp;quot;&lt;br /&gt;
----&lt;br /&gt;
[[Version 0.3.0]]&lt;br /&gt;
* Puddlipup was added as a 4-Star Anima.&lt;br /&gt;
----&lt;br /&gt;
Pre-Release&lt;br /&gt;
* Puddlipup was introduced in the &#039;&#039;Honkai: Nexus Anima&#039;&#039; teaser trailer.&lt;/div&gt;</summary>
		<author><name>Valaerys</name></author>
	</entry>
	<entry>
		<id>https://hna.wiki/Template:Card_List/doc?diff=9233</id>
		<title>Template:Card List/doc</title>
		<link rel="alternate" type="text/html" href="https://hna.wiki/Template:Card_List/doc?diff=9233"/>
		<updated>2026-07-15T04:32:15Z</updated>

		<summary type="html">&lt;p&gt;Valaerys: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Documentation/Header}}&lt;br /&gt;
{{High Risk|pagetype=Main}}&lt;br /&gt;
{{Lua|Card List}}&lt;br /&gt;
Creates a list of {{T|Card}}.&lt;br /&gt;
&lt;br /&gt;
==Syntax==&lt;br /&gt;
* {{F|1}} &amp;amp;mdash; List of items.&lt;br /&gt;
** {{F|*((amount))}} &amp;amp;mdash; Indicate amount exclusive to the item.&lt;br /&gt;
** {{F|/((note))}} &amp;amp;mdash; Indicate note exclusive to the item.&lt;br /&gt;
** {{F|1={ ((param1)) = ((value1)) $ ((param2)) = ((value2)) $ ((value 3)) } }} &amp;amp;mdash; indicate parameters exclusive to the item, allows unnamed parameters.&lt;br /&gt;
* {{F|amount}} &amp;amp;mdash; Default amount of items if not stated. Default {{F|&amp;amp;mdash;|nw=1}}.&lt;br /&gt;
* {{F|delim}} &amp;amp;mdash; Delimiter of the list in {{F|1}}. Default {{F|;}}.&lt;br /&gt;
* {{F|amount_delim}} &amp;amp;mdash; Delimiter of amount in {{F|1}}. Default {{F|*}}.&lt;br /&gt;
* {{F|note_delim}} &amp;amp;mdash; Delimiter of the notes in {{F|1}}. Default {{F|/}}.&lt;br /&gt;
* {{F|param_delim}} &amp;amp;mdash; Delimiter of the parameters in {{F|1}}. Default {{F|$}}.&lt;br /&gt;
* {{F|autosort}} &amp;amp;mdash; Boolean to automatically sort the cards as they would appear in-game. Default {{F|0}}.&lt;br /&gt;
* The following arguments of {{T|Card}} can be set to apply to all items by including them as normal parameters.&lt;br /&gt;
** {{F|text}}&lt;br /&gt;
** {{F|caption}}&lt;br /&gt;
** {{F|show_caption}}&lt;br /&gt;
** {{F|caption_width}}&lt;br /&gt;
** {{F|stars}}&lt;br /&gt;
** {{F|type}}&lt;br /&gt;
** {{F|set}}&lt;br /&gt;
** {{F|mini}}&lt;br /&gt;
** {{F|element}}&lt;br /&gt;
** {{F|link}}&lt;br /&gt;
** {{F|nolink}}&lt;br /&gt;
** {{F|path}}&lt;br /&gt;
** {{F|multiline_text}}&lt;br /&gt;
** {{F|suffix}}&lt;br /&gt;
** {{F|notext}}&lt;br /&gt;
&lt;br /&gt;
==Examples==&lt;br /&gt;
{{T|Card List|Popsicle; Lucky Star; Genius Lollipop|p2=show_caption=1|_Ybr_=1}}&amp;lt;br /&amp;gt;&lt;br /&gt;
{{T|Card List|Aspect Gems; Azure Mood; Ramen Cup|_Ybr_=1}}&amp;lt;br /&amp;gt;&lt;br /&gt;
{{T|Card List|_Ybr_=1|block=1&lt;br /&gt;
|p1=delim=,&lt;br /&gt;
|p2=show_caption=1&lt;br /&gt;
|p3=1=Sopot/Drink?,&lt;br /&gt;
{ name = Lucky Star $ link = Food $ show_caption = 1 },&lt;br /&gt;
Mighty Pork Sausages*3{ note = Not Food }&lt;br /&gt;
}}&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Template Data==&lt;br /&gt;
&amp;lt;templatedata&amp;gt;{&lt;br /&gt;
	&amp;quot;params&amp;quot;: {&lt;br /&gt;
		&amp;quot;1&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Input List&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;\&amp;quot;delim\&amp;quot; delimited list of items. Within each item, delimited by \&amp;quot;amount_delim\&amp;quot;, \&amp;quot;note_delim\&amp;quot;, and \&amp;quot;param_delim\&amp;quot;.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: true&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;amount&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Default Amount&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Default amount of items if not stated.&amp;quot;,&lt;br /&gt;
			&amp;quot;example&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
			&amp;quot;default&amp;quot;: &amp;quot;—&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;delim&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Input Delimiter&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Character(s) to split input items by.&amp;quot;,&lt;br /&gt;
			&amp;quot;example&amp;quot;: &amp;quot;,&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;default&amp;quot;: &amp;quot;;&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;amount_delim&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Amount Delimiter&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Character(s) to separate item name from amount.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;default&amp;quot;: &amp;quot;*&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;note_delim&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Note Delimiter&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Character(s) to separate item from note.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;default&amp;quot;: &amp;quot;/&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;param_delim&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Parameter Delimiter&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Character(s) to split item from Card parameters.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;default&amp;quot;: &amp;quot;$&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;autosort&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Auto-Sort&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Automatically sorts the cards as they would appear in-game, based on rarity and ID. Does not work for certain card types, such as Enemy.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	&amp;quot;format&amp;quot;: &amp;quot;inline&amp;quot;,&lt;br /&gt;
	&amp;quot;description&amp;quot;: &amp;quot;Creates a list of {{Card}}.&amp;quot;,&lt;br /&gt;
	&amp;quot;paramOrder&amp;quot;: [&lt;br /&gt;
		&amp;quot;1&amp;quot;,&lt;br /&gt;
		&amp;quot;amount&amp;quot;,&lt;br /&gt;
		&amp;quot;delim&amp;quot;,&lt;br /&gt;
		&amp;quot;amount_delim&amp;quot;,&lt;br /&gt;
		&amp;quot;note_delim&amp;quot;,&lt;br /&gt;
		&amp;quot;param_delim&amp;quot;,&lt;br /&gt;
		&amp;quot;autosort&amp;quot;&lt;br /&gt;
	]&lt;br /&gt;
}&amp;lt;/templatedata&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Valaerys</name></author>
	</entry>
	<entry>
		<id>https://hna.wiki/Module:Card/items?diff=9230</id>
		<title>Module:Card/items</title>
		<link rel="alternate" type="text/html" href="https://hna.wiki/Module:Card/items?diff=9230"/>
		<updated>2026-07-14T23:03:23Z</updated>

		<summary type="html">&lt;p&gt;Valaerys: Created page with &amp;quot;return { 	[&amp;#039;Lucky Star&amp;#039;] = { rarity = &amp;#039;5&amp;#039; }, 	[&amp;#039;Coffee Bag&amp;#039;] = { rarity = &amp;#039;3&amp;#039; }, 	[&amp;#039;Mighty Pork Sausages&amp;#039;] = { rarity = &amp;#039;4&amp;#039; }, }&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;return {&lt;br /&gt;
	[&#039;Lucky Star&#039;] = { rarity = &#039;5&#039; },&lt;br /&gt;
	[&#039;Coffee Bag&#039;] = { rarity = &#039;3&#039; },&lt;br /&gt;
	[&#039;Mighty Pork Sausages&#039;] = { rarity = &#039;4&#039; },&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Valaerys</name></author>
	</entry>
	<entry>
		<id>https://hna.wiki/Module:Icon?diff=9229</id>
		<title>Module:Icon</title>
		<link rel="alternate" type="text/html" href="https://hna.wiki/Module:Icon?diff=9229"/>
		<updated>2026-07-14T22:59:44Z</updated>

		<summary type="html">&lt;p&gt;Valaerys: testing&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- Module copied from the Genshin Impact wiki&lt;br /&gt;
-- Revision as of 4-29-2023&lt;br /&gt;
&lt;br /&gt;
--- A library that other modules can use to create icon images with automatic prefix/suffix settings for items, characters, and weapons.&lt;br /&gt;
--  (Other icon types must have their types/suffixes specified manually.)&lt;br /&gt;
--&lt;br /&gt;
--  &#039;&#039;&#039;Note:&#039;&#039;&#039; this module is (currently) NOT related to [[Template:Icon]].&lt;br /&gt;
--&lt;br /&gt;
--  @script Icon&lt;br /&gt;
&lt;br /&gt;
local TemplateData = require(&#039;Module:TemplateData&#039;)&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
-- icon arg defaults for template data&lt;br /&gt;
-- uses list format to ensure that the order is the same when added to another list of args using `p.addIconArgs`&lt;br /&gt;
local ICON_ARGS = {&lt;br /&gt;
	{name=&#039;name&#039;,&lt;br /&gt;
		label=&#039;Name&#039;,&lt;br /&gt;
		description=&#039;The name of the {labelPrefix}image.&#039;,&lt;br /&gt;
		example={&#039;Fire&#039;}&lt;br /&gt;
	},&lt;br /&gt;
	{name=&#039;link&#039;, displayType=&#039;wiki-page-name&#039;, defaultFrom=&#039;name&#039;,&lt;br /&gt;
		label=&#039;Link&#039;,&lt;br /&gt;
		description=&#039;The page that the {labelPrefix}image links to.&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{name=&#039;extension&#039;, alias=&#039;ext&#039;, default=&#039;png&#039;,&lt;br /&gt;
		label=&#039;File Extension&#039;,&lt;br /&gt;
		description=&#039;The file extension for the {labelPrefix}image.&#039;,&lt;br /&gt;
		example={&#039;png&#039;, &#039;jpg&#039;, &#039;jpeg&#039;, &#039;gif&#039;},&lt;br /&gt;
	},&lt;br /&gt;
	{name=&#039;type&#039;, displayDefault=&#039;determined based on {labelPrefix}Name; \&#039;Item\&#039; if unknown&#039;,&lt;br /&gt;
		label=&#039;File Prefix&#039;,&lt;br /&gt;
		description=&#039;The file prefix to prepend to {labelPrefix}Name.&#039;,&lt;br /&gt;
		example={&#039;Item&#039;, &#039;Nexus Strand&#039;, &#039;Relic&#039;, &#039;Icon&#039;}&lt;br /&gt;
	},&lt;br /&gt;
	{name=&#039;suffix&#039;, displayDefault=&#039;determined based on {labelPrefix}Name/{labelPrefix}Type&#039;,&lt;br /&gt;
		label=&#039;File Suffix&#039;,&lt;br /&gt;
		description=&#039;The file suffix to append to {labelPrefix}Name.&#039;,&lt;br /&gt;
		example={&#039;Icon&#039;, &#039;Thumb&#039;, &#039;2nd&#039;, &#039;White&#039;}&lt;br /&gt;
	},&lt;br /&gt;
	{name=&#039;size&#039;, default=&#039;20&#039;,&lt;br /&gt;
		label=&#039;Size&#039;,&lt;br /&gt;
		description=&#039;The height and width of the {labelPrefix}image in pixels. A single number will be used for both height and width; to specify them separately, use &amp;quot;wxh&amp;quot; format.&#039;,&lt;br /&gt;
		example={&#039;20&#039;, &#039;20x10&#039;, &#039;20x&#039;, &#039;x20&#039;}&lt;br /&gt;
	},&lt;br /&gt;
	{name=&#039;alt&#039;, defaultFrom=&#039;name&#039;, displayDefault=&#039;determined based on {labelPrefix}Name&#039;,&lt;br /&gt;
		label=&#039;Alt Text&#039;,&lt;br /&gt;
		description=&#039;The alt text of the {labelPrefix}image.&#039;,&lt;br /&gt;
	},&lt;br /&gt;
	{name=&#039;class&#039;, default=&#039;&#039;, displayDefault=&#039;N/A&#039;,&lt;br /&gt;
		label=&#039;Additional Classes&#039;,&lt;br /&gt;
		description=&#039;Additional CSS classes to apply to the resulting img element.&#039;,&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
--- Returns a table version of the input.&lt;br /&gt;
--  @param v A table or an item that belongs in a table.&lt;br /&gt;
--  @return {table}&lt;br /&gt;
local function ensureTable(v)&lt;br /&gt;
	if type(v) == &#039;table&#039; then return v end&lt;br /&gt;
	return {v}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- A special constant that can be used as a value in the `overrides` parameter for `addIconArgs`&lt;br /&gt;
--  to disable the given base config or TemplateData key.&lt;br /&gt;
p.EXCLUDE = {};&lt;br /&gt;
&lt;br /&gt;
--- Copy entries from b into a, excluding values that are `p.EXCLUDE`.&lt;br /&gt;
--  @param {table} a Table to insert into.&lt;br /&gt;
--  @param {table} b Table to copy from.&lt;br /&gt;
local function copyTable(a, b)&lt;br /&gt;
	for k, v in pairs(b) do &lt;br /&gt;
		if v == p.EXCLUDE then&lt;br /&gt;
			v = nil&lt;br /&gt;
		end&lt;br /&gt;
		a[k] = v&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- A function that other modules can use to append Icon arguments to their template data.&lt;br /&gt;
--  @param {TemplateData#ArgumentConfigList} base The template data to append to.&lt;br /&gt;
--         If any configs have a `name` that matches an Icon argument&#039;s (with `namePrefix`)&lt;br /&gt;
--         and a property `placeholderFor` set to `&#039;Module:Icon&#039;`, then the&lt;br /&gt;
--         corresponding Icon argument will replace it instead of being appended.&lt;br /&gt;
--         (This allows argument order to be changed for [[Module:TemplateData]]&#039;s&lt;br /&gt;
--         documentation generation.)&lt;br /&gt;
--  @param {string} namePrefix A string to prepend to all parameter names.&lt;br /&gt;
--  @param {string} labelPrefix A string to prepend to all parameter labels&lt;br /&gt;
--    (the names displayed in documentation).&lt;br /&gt;
--  @param {TemplateData#ArgumentConfigMap} overrides A table of overrides to configure the template data.&lt;br /&gt;
--    Keys should be parameter names, and values are tables of TemplateData&lt;br /&gt;
--    configuration objects to merge with the default configuration.&lt;br /&gt;
--    These configuration objects can use @{Icon.EXCLUDE} as values to disable&lt;br /&gt;
--    the corresponding default configuration key (e.g., to disable a default value&lt;br /&gt;
--    or alias without adding a new one).&lt;br /&gt;
function p.addIconArgs(baseConfigs, namePrefix, labelPrefix, overrides)&lt;br /&gt;
	-- preprocessing: save position of each placeholder config&lt;br /&gt;
	local argLocations = {}&lt;br /&gt;
	for i, config in ipairs(baseConfigs) do&lt;br /&gt;
		if config.placeholderFor == &#039;Module:Icon&#039; then&lt;br /&gt;
			argLocations[config.name] = i&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- main loop: prepend namePrefix and labelPrefix where needed&lt;br /&gt;
	-- and add configs to baseConfigs&lt;br /&gt;
	for _, config in ipairs(ICON_ARGS) do&lt;br /&gt;
		local override = overrides[config.name]&lt;br /&gt;
		if override ~= false and override ~= p.EXCLUDE then&lt;br /&gt;
			local c = {}&lt;br /&gt;
			copyTable(c, config)&lt;br /&gt;
			c.name = namePrefix .. c.name&lt;br /&gt;
			c.label = labelPrefix .. c.label&lt;br /&gt;
			if c.defaultFrom then&lt;br /&gt;
				c.defaultFrom = namePrefix .. c.defaultFrom&lt;br /&gt;
			end&lt;br /&gt;
			if c.alias then&lt;br /&gt;
				local aliases = {}&lt;br /&gt;
				for _, a in ipairs(ensureTable(c.alias)) do&lt;br /&gt;
					table.insert(aliases, namePrefix .. a)&lt;br /&gt;
				end&lt;br /&gt;
				c.alias = aliases&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			if override then&lt;br /&gt;
				copyTable(c, override)&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			if c.description then&lt;br /&gt;
				c.description = c.description:gsub(&#039;{labelPrefix}&#039;, labelPrefix)&lt;br /&gt;
			end&lt;br /&gt;
			if c.displayDefault then&lt;br /&gt;
				c.displayDefault = c.displayDefault:gsub(&#039;{labelPrefix}&#039;, labelPrefix)&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			local placeholderIndex = argLocations[c.name]&lt;br /&gt;
			if placeholderIndex then&lt;br /&gt;
				baseConfigs[placeholderIndex] = c&lt;br /&gt;
			else&lt;br /&gt;
				table.insert(baseConfigs, c)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function extendTable(base, extra)&lt;br /&gt;
	out = {}&lt;br /&gt;
	setmetatable(out, {&lt;br /&gt;
		__index = function(t, key)&lt;br /&gt;
			local val = base[key]&lt;br /&gt;
			if val ~= nil then return val else return extra[key] end&lt;br /&gt;
		end&lt;br /&gt;
	})&lt;br /&gt;
	return out&lt;br /&gt;
end&lt;br /&gt;
--local characters = mw.loadData(&#039;Module:Card/items&#039;)&lt;br /&gt;
local ALL_DATA = {-- list of {type, data} in the order that untyped items should get checked&lt;br /&gt;
	-- {&#039;Character&#039;, mw.loadData(&#039;Module:Card/characters&#039;)},&lt;br /&gt;
	-- {&#039;Anima&#039;, mw.loadData(&#039;Module:Card/animas&#039;)},&lt;br /&gt;
	-- {&#039;Relic&#039;, mw.loadData(&#039;Module:Card/relics&#039;)},&lt;br /&gt;
	-- {&#039;Nexus Strand&#039;, mw.loadData(&#039;Module:Card/nexusstrands&#039;)},&lt;br /&gt;
	{&#039;Item&#039;, mw.loadData(&#039;Module:Card/items&#039;)} -- Always leave this one as the last in this list&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
--- A basic image type with filename prefix/suffix support.&lt;br /&gt;
--  Extends @{TemplateData#TableWithDefaults} with image-related properties,&lt;br /&gt;
--  allowing default property values to be customized after creation.&lt;br /&gt;
--&lt;br /&gt;
--  Image objects are created by @{Icon.createIcon}.&lt;br /&gt;
--  Use @{Image:buildString} to convert to wikitext.&lt;br /&gt;
--  @type Image&lt;br /&gt;
local IMAGE_ARGS = {&lt;br /&gt;
	size = {default=&#039;&#039;},&lt;br /&gt;
	name = {default=&#039;&#039;, alias=1},&lt;br /&gt;
	prefix = {default=&#039;&#039;},&lt;br /&gt;
	prefixSeparator = {default=&#039; &#039;},&lt;br /&gt;
	suffix = {default=&#039;&#039;},&lt;br /&gt;
	suffixSeparator = {default=&#039; &#039;},&lt;br /&gt;
	extension = {default=&#039;png&#039;, alias=&#039;ext&#039;},&lt;br /&gt;
	link = {defaultFrom=&#039;name&#039;},&lt;br /&gt;
	alt = {defaultFrom=&#039;name&#039;},&lt;br /&gt;
	class = {default=&#039;&#039;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local function buildImageFullPrefix(img)&lt;br /&gt;
	local prefix = img.prefix&lt;br /&gt;
	if prefix ~= &#039;&#039; then&lt;br /&gt;
		return prefix .. img.prefixSeparator&lt;br /&gt;
	end&lt;br /&gt;
	return &#039;&#039;&lt;br /&gt;
end&lt;br /&gt;
local function buildImageFullSuffix(img)&lt;br /&gt;
	local suffix = img.suffix&lt;br /&gt;
	if suffix ~= &#039;&#039; then&lt;br /&gt;
		return img.suffixSeparator .. suffix&lt;br /&gt;
	end&lt;br /&gt;
	return &#039;&#039;&lt;br /&gt;
end&lt;br /&gt;
local function buildImageFilename(img)&lt;br /&gt;
	if img.name == &#039;&#039; then return &#039;&#039; end&lt;br /&gt;
	return &#039;File:&#039; .. buildImageFullPrefix(img) .. img.name .. buildImageFullSuffix(img) .. &#039;.&#039; .. img.extension&lt;br /&gt;
end&lt;br /&gt;
local function buildImageSizeString(img)&lt;br /&gt;
	local size = img.size&lt;br /&gt;
	if size == nil or size == &#039;&#039; then&lt;br /&gt;
		return &#039;&#039;&lt;br /&gt;
	end&lt;br /&gt;
	size = tostring(size)&lt;br /&gt;
	if size:find(&#039;x&#039;, 1, true) then&lt;br /&gt;
		return size .. &#039;px&#039;&lt;br /&gt;
	end&lt;br /&gt;
	return size .. &#039;x&#039; .. size .. &#039;px&#039;&lt;br /&gt;
end&lt;br /&gt;
--[[&lt;br /&gt;
Returns wikitext that will display this image.&lt;br /&gt;
@return {string} Wikitext&lt;br /&gt;
@function Image:buildString&lt;br /&gt;
--]]&lt;br /&gt;
local function buildImageString(img)&lt;br /&gt;
	local filename = buildImageFilename(img)&lt;br /&gt;
	if filename == &#039;&#039; then return &#039;&#039; end&lt;br /&gt;
	return &#039;[[&#039; .. filename .. &#039;|&#039; .. buildImageSizeString(img) .. &#039;|link=&#039; .. img.link .. &#039;|alt=&#039; .. img.alt .. &#039;|class=&#039; .. img.class .. &#039;]]&#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
Creates an `Image` object with the given properties.&lt;br /&gt;
@param {table} args A table of `Image` properties that to assign to the new `Image`.&lt;br /&gt;
@see @{Image} for property documentation&lt;br /&gt;
@return {Image} The new `Image` object.&lt;br /&gt;
@constructor&lt;br /&gt;
--]]&lt;br /&gt;
local function createImage(args)&lt;br /&gt;
	local out&lt;br /&gt;
	if type(args) == &#039;table&#039; then&lt;br /&gt;
		out = TemplateData.processArgs(args, IMAGE_ARGS, {preserveDefaults=true})&lt;br /&gt;
	else&lt;br /&gt;
		out = {name = args}&lt;br /&gt;
	end&lt;br /&gt;
	-- add buildString function to image directly, not to image.nonDefaults&lt;br /&gt;
	&lt;br /&gt;
	rawset(out, &#039;buildString&#039;, buildImageString)&lt;br /&gt;
	return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- The name of the image. Used to determine filename.&lt;br /&gt;
--  @property {string} Image.name&lt;br /&gt;
&lt;br /&gt;
--- Maximum image size using wiki image syntax.&lt;br /&gt;
--  Unlike regular wiki image syntax, a single number specifies both height and width.&lt;br /&gt;
--  @property {string} Image.size&lt;br /&gt;
&lt;br /&gt;
--- Image file prefix.&lt;br /&gt;
--  @property {string} Image.prefix&lt;br /&gt;
&lt;br /&gt;
--- Appended to `prefix` if `prefix` is not empty. Defaults to a single space.&lt;br /&gt;
--  @property[opt] {string} Image.prefixSeparator&lt;br /&gt;
&lt;br /&gt;
--- Image file suffix.&lt;br /&gt;
--  @property {string} Image.suffix&lt;br /&gt;
&lt;br /&gt;
--- Prepended to `suffix` if `suffix` is not empty. Defaults to a single space.&lt;br /&gt;
--  @property {string} Image.suffixSeparator&lt;br /&gt;
&lt;br /&gt;
--- Image file extension. (Alias: `ext`.)&lt;br /&gt;
--  @property {string} Image.extension&lt;br /&gt;
&lt;br /&gt;
--- Image link. Also sets title (hover tooltip). Defaults to `name`.&lt;br /&gt;
--  @property {string} Image.link&lt;br /&gt;
&lt;br /&gt;
--- Image alt text. Defaults to `name`.&lt;br /&gt;
--  @property {string} Image.alt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--- A helper function for other modules to get icon args with a prefix from the given table.&lt;br /&gt;
--  @param {table} args A table containing icon args (and probably other args).&lt;br /&gt;
--  @param {string} prefix Prefix for keys to use when looking up entries from `args`.&lt;br /&gt;
--    If not specified, no prefix is used.&lt;br /&gt;
--  @return {table} A table containing only the extracted args, with the prefix removed from its keys.&lt;br /&gt;
function p.extractIconArgs(args, prefix)&lt;br /&gt;
	prefix = prefix or &#039;&#039;&lt;br /&gt;
	local out = TemplateData.createObjectWithDefaults()&lt;br /&gt;
	for _, config in pairs(ICON_ARGS) do&lt;br /&gt;
		out.defaults[config.name] = args.defaults[prefix .. config.name]&lt;br /&gt;
		out.nonDefaults[config.name] = args.nonDefaults[prefix .. config.name]&lt;br /&gt;
	end&lt;br /&gt;
	return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- A helper function that removes one of the given prefixes from the given string.&lt;br /&gt;
--  @param {string} str The string from which to strip a prefix&lt;br /&gt;
--  @param {table} prefixes A table whose keys are the possible prefixes to strip from `str`&lt;br /&gt;
--  @return {string} The string with the prefix removed.&lt;br /&gt;
--  @return[opt] {string} The prefix that was removed, or `nil` if no prefix was found.&lt;br /&gt;
function p.stripPrefixes(str, prefixes)&lt;br /&gt;
	for prefix, _ in pairs(prefixes) do&lt;br /&gt;
		if string.sub(str, 1, string.len(prefix)) == prefix then&lt;br /&gt;
			return string.sub(str, string.len(prefix) + 1), prefix&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return str&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
    The main entry point for other modules.&lt;br /&gt;
    Creates and returns an Image object with the given arguments.&lt;br /&gt;
    Infers `args.type` if `args.name` matches a known item/character/relic.&lt;br /&gt;
    @param {table} args Table containing the arguments:&lt;br /&gt;
    @param[opt] {string} args.name The name of the image.&lt;br /&gt;
                         Used to determine file name and set the default link and alt text.&lt;br /&gt;
                         If not specified, the output `Image` will produce empty wikitext.&lt;br /&gt;
    @param[opt] {string} args.link Image link. Also sets title (hover tooltip).&lt;br /&gt;
                         Defaults to `name`.&lt;br /&gt;
    @param[opt] {string} args.extension (alias: `ext`) Image file extension.&lt;br /&gt;
                         Defaults to &#039;png&#039;.&lt;br /&gt;
    @param[opt] {string} args.type Image type. Used to determine file prefix and default file suffix.&lt;br /&gt;
                         If not specified, type will be inferred if `args.name`&lt;br /&gt;
                         is a known item; otherwise, defaults to &#039;Item&#039;.&lt;br /&gt;
    @param[opt] {string} args.suffix File suffix override.&lt;br /&gt;
    @param[opt] {string} args.size Maximum image size using wiki image syntax.&lt;br /&gt;
                         Unlike regular wiki image syntax, specifying a single number will&lt;br /&gt;
                         set both height and width.&lt;br /&gt;
    @param[opt] {string} args.alt Image alt text. Defaults to `args.name`.&lt;br /&gt;
    @param[opt] {string} args.outfit Character outfit. Only applies to character images.&lt;br /&gt;
    @param[opt] {string} prefix Prefix to use when looking up arguments in `args`.&lt;br /&gt;
    @return {Image} The image for given arguments.&lt;br /&gt;
      Use `Image:buildString()` to get the wikitext for the image.&lt;br /&gt;
    @return {string} The image type.&lt;br /&gt;
    @return {TableWithDefaults} Associated data for given item (e.g., rarity, display name).&lt;br /&gt;
--]]&lt;br /&gt;
function p.createIcon(args, prefix)&lt;br /&gt;
	if prefix then&lt;br /&gt;
		args = p.extractIconArgs(args, prefix)&lt;br /&gt;
	end&lt;br /&gt;
	args = TemplateData.processArgs(args, ICON_ARGS, {preserveDefaults=true})&lt;br /&gt;
	--local baseName, prefix = p.stripPrefixes(args.name or &#039;&#039;, FOOD_PREFIXES)&lt;br /&gt;
	-- for now, there are no items that need special prefixes&lt;br /&gt;
	local baseName = args.name or &#039;&#039;&lt;br /&gt;
	local prefix = &#039;&#039;&lt;br /&gt;
	&lt;br /&gt;
	-- determine type by checking for data&lt;br /&gt;
	local image_type, data&lt;br /&gt;
	for i, v in ipairs(ALL_DATA) do&lt;br /&gt;
		image_type = v[1]&lt;br /&gt;
		if args.type == nil or args.type == image_type then&lt;br /&gt;
			data = v[2][baseName]&lt;br /&gt;
			if (not data) then data = v[2][baseName .. &#039; (&#039; .. image_type .. &#039;)&#039;] end&lt;br /&gt;
			if data then break end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	image_type = args.type or image_type -- in case args.type isn&#039;t in ALL_DATA (e.g., Enemy, Wildlife)&lt;br /&gt;
	&lt;br /&gt;
	local image = createImage(args)&lt;br /&gt;
	image.prefix = image_type&lt;br /&gt;
    &lt;br /&gt;
    -- set defaults and load data based on type&lt;br /&gt;
    if image_type == &#039;Character&#039; then&lt;br /&gt;
		image.defaults.suffix = &#039;Character Icon&#039;&lt;br /&gt;
    elseif image_type == &#039;Anima&#039; then&lt;br /&gt;
		image.defaults.suffix = &#039;Anima Icon&#039;&lt;br /&gt;
	elseif image_type == &#039;Item&#039; then&lt;br /&gt;
		image.prefix = &#039;Item&#039;&lt;br /&gt;
	elseif image_type == &#039;Relic&#039; then&lt;br /&gt;
		image.prefix = &#039;Relic&#039;&lt;br /&gt;
	elseif image_type == &#039;Nexus Strand&#039; then&lt;br /&gt;
		image.prefix = &#039;Nexus Strand&#039;&lt;br /&gt;
	end&lt;br /&gt;
	return image, image_type, data&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Valaerys</name></author>
	</entry>
	<entry>
		<id>https://hna.wiki/Module:Icon?diff=9228</id>
		<title>Module:Icon</title>
		<link rel="alternate" type="text/html" href="https://hna.wiki/Module:Icon?diff=9228"/>
		<updated>2026-07-14T22:52:21Z</updated>

		<summary type="html">&lt;p&gt;Valaerys: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- Module copied from the Genshin Impact wiki&lt;br /&gt;
-- Revision as of 4-29-2023&lt;br /&gt;
&lt;br /&gt;
--- A library that other modules can use to create icon images with automatic prefix/suffix settings for items, characters, and weapons.&lt;br /&gt;
--  (Other icon types must have their types/suffixes specified manually.)&lt;br /&gt;
--&lt;br /&gt;
--  &#039;&#039;&#039;Note:&#039;&#039;&#039; this module is (currently) NOT related to [[Template:Icon]].&lt;br /&gt;
--&lt;br /&gt;
--  @script Icon&lt;br /&gt;
&lt;br /&gt;
local TemplateData = require(&#039;Module:TemplateData&#039;)&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
-- icon arg defaults for template data&lt;br /&gt;
-- uses list format to ensure that the order is the same when added to another list of args using `p.addIconArgs`&lt;br /&gt;
local ICON_ARGS = {&lt;br /&gt;
	{name=&#039;name&#039;,&lt;br /&gt;
		label=&#039;Name&#039;,&lt;br /&gt;
		description=&#039;The name of the {labelPrefix}image.&#039;,&lt;br /&gt;
		example={&#039;Fire&#039;}&lt;br /&gt;
	},&lt;br /&gt;
	{name=&#039;link&#039;, displayType=&#039;wiki-page-name&#039;, defaultFrom=&#039;name&#039;,&lt;br /&gt;
		label=&#039;Link&#039;,&lt;br /&gt;
		description=&#039;The page that the {labelPrefix}image links to.&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{name=&#039;extension&#039;, alias=&#039;ext&#039;, default=&#039;png&#039;,&lt;br /&gt;
		label=&#039;File Extension&#039;,&lt;br /&gt;
		description=&#039;The file extension for the {labelPrefix}image.&#039;,&lt;br /&gt;
		example={&#039;png&#039;, &#039;jpg&#039;, &#039;jpeg&#039;, &#039;gif&#039;},&lt;br /&gt;
	},&lt;br /&gt;
	{name=&#039;type&#039;, displayDefault=&#039;determined based on {labelPrefix}Name; \&#039;Item\&#039; if unknown&#039;,&lt;br /&gt;
		label=&#039;File Prefix&#039;,&lt;br /&gt;
		description=&#039;The file prefix to prepend to {labelPrefix}Name.&#039;,&lt;br /&gt;
		example={&#039;Item&#039;, &#039;Nexus Strand&#039;, &#039;Relic&#039;, &#039;Icon&#039;}&lt;br /&gt;
	},&lt;br /&gt;
	{name=&#039;suffix&#039;, displayDefault=&#039;determined based on {labelPrefix}Name/{labelPrefix}Type&#039;,&lt;br /&gt;
		label=&#039;File Suffix&#039;,&lt;br /&gt;
		description=&#039;The file suffix to append to {labelPrefix}Name.&#039;,&lt;br /&gt;
		example={&#039;Icon&#039;, &#039;Thumb&#039;, &#039;2nd&#039;, &#039;White&#039;}&lt;br /&gt;
	},&lt;br /&gt;
	{name=&#039;size&#039;, default=&#039;20&#039;,&lt;br /&gt;
		label=&#039;Size&#039;,&lt;br /&gt;
		description=&#039;The height and width of the {labelPrefix}image in pixels. A single number will be used for both height and width; to specify them separately, use &amp;quot;wxh&amp;quot; format.&#039;,&lt;br /&gt;
		example={&#039;20&#039;, &#039;20x10&#039;, &#039;20x&#039;, &#039;x20&#039;}&lt;br /&gt;
	},&lt;br /&gt;
	{name=&#039;alt&#039;, defaultFrom=&#039;name&#039;, displayDefault=&#039;determined based on {labelPrefix}Name&#039;,&lt;br /&gt;
		label=&#039;Alt Text&#039;,&lt;br /&gt;
		description=&#039;The alt text of the {labelPrefix}image.&#039;,&lt;br /&gt;
	},&lt;br /&gt;
	{name=&#039;class&#039;, default=&#039;&#039;, displayDefault=&#039;N/A&#039;,&lt;br /&gt;
		label=&#039;Additional Classes&#039;,&lt;br /&gt;
		description=&#039;Additional CSS classes to apply to the resulting img element.&#039;,&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
--- Returns a table version of the input.&lt;br /&gt;
--  @param v A table or an item that belongs in a table.&lt;br /&gt;
--  @return {table}&lt;br /&gt;
local function ensureTable(v)&lt;br /&gt;
	if type(v) == &#039;table&#039; then return v end&lt;br /&gt;
	return {v}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- A special constant that can be used as a value in the `overrides` parameter for `addIconArgs`&lt;br /&gt;
--  to disable the given base config or TemplateData key.&lt;br /&gt;
p.EXCLUDE = {};&lt;br /&gt;
&lt;br /&gt;
--- Copy entries from b into a, excluding values that are `p.EXCLUDE`.&lt;br /&gt;
--  @param {table} a Table to insert into.&lt;br /&gt;
--  @param {table} b Table to copy from.&lt;br /&gt;
local function copyTable(a, b)&lt;br /&gt;
	for k, v in pairs(b) do &lt;br /&gt;
		if v == p.EXCLUDE then&lt;br /&gt;
			v = nil&lt;br /&gt;
		end&lt;br /&gt;
		a[k] = v&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- A function that other modules can use to append Icon arguments to their template data.&lt;br /&gt;
--  @param {TemplateData#ArgumentConfigList} base The template data to append to.&lt;br /&gt;
--         If any configs have a `name` that matches an Icon argument&#039;s (with `namePrefix`)&lt;br /&gt;
--         and a property `placeholderFor` set to `&#039;Module:Icon&#039;`, then the&lt;br /&gt;
--         corresponding Icon argument will replace it instead of being appended.&lt;br /&gt;
--         (This allows argument order to be changed for [[Module:TemplateData]]&#039;s&lt;br /&gt;
--         documentation generation.)&lt;br /&gt;
--  @param {string} namePrefix A string to prepend to all parameter names.&lt;br /&gt;
--  @param {string} labelPrefix A string to prepend to all parameter labels&lt;br /&gt;
--    (the names displayed in documentation).&lt;br /&gt;
--  @param {TemplateData#ArgumentConfigMap} overrides A table of overrides to configure the template data.&lt;br /&gt;
--    Keys should be parameter names, and values are tables of TemplateData&lt;br /&gt;
--    configuration objects to merge with the default configuration.&lt;br /&gt;
--    These configuration objects can use @{Icon.EXCLUDE} as values to disable&lt;br /&gt;
--    the corresponding default configuration key (e.g., to disable a default value&lt;br /&gt;
--    or alias without adding a new one).&lt;br /&gt;
function p.addIconArgs(baseConfigs, namePrefix, labelPrefix, overrides)&lt;br /&gt;
	-- preprocessing: save position of each placeholder config&lt;br /&gt;
	local argLocations = {}&lt;br /&gt;
	for i, config in ipairs(baseConfigs) do&lt;br /&gt;
		if config.placeholderFor == &#039;Module:Icon&#039; then&lt;br /&gt;
			argLocations[config.name] = i&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- main loop: prepend namePrefix and labelPrefix where needed&lt;br /&gt;
	-- and add configs to baseConfigs&lt;br /&gt;
	for _, config in ipairs(ICON_ARGS) do&lt;br /&gt;
		local override = overrides[config.name]&lt;br /&gt;
		if override ~= false and override ~= p.EXCLUDE then&lt;br /&gt;
			local c = {}&lt;br /&gt;
			copyTable(c, config)&lt;br /&gt;
			c.name = namePrefix .. c.name&lt;br /&gt;
			c.label = labelPrefix .. c.label&lt;br /&gt;
			if c.defaultFrom then&lt;br /&gt;
				c.defaultFrom = namePrefix .. c.defaultFrom&lt;br /&gt;
			end&lt;br /&gt;
			if c.alias then&lt;br /&gt;
				local aliases = {}&lt;br /&gt;
				for _, a in ipairs(ensureTable(c.alias)) do&lt;br /&gt;
					table.insert(aliases, namePrefix .. a)&lt;br /&gt;
				end&lt;br /&gt;
				c.alias = aliases&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			if override then&lt;br /&gt;
				copyTable(c, override)&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			if c.description then&lt;br /&gt;
				c.description = c.description:gsub(&#039;{labelPrefix}&#039;, labelPrefix)&lt;br /&gt;
			end&lt;br /&gt;
			if c.displayDefault then&lt;br /&gt;
				c.displayDefault = c.displayDefault:gsub(&#039;{labelPrefix}&#039;, labelPrefix)&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			local placeholderIndex = argLocations[c.name]&lt;br /&gt;
			if placeholderIndex then&lt;br /&gt;
				baseConfigs[placeholderIndex] = c&lt;br /&gt;
			else&lt;br /&gt;
				table.insert(baseConfigs, c)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function extendTable(base, extra)&lt;br /&gt;
	out = {}&lt;br /&gt;
	setmetatable(out, {&lt;br /&gt;
		__index = function(t, key)&lt;br /&gt;
			local val = base[key]&lt;br /&gt;
			if val ~= nil then return val else return extra[key] end&lt;br /&gt;
		end&lt;br /&gt;
	})&lt;br /&gt;
	return out&lt;br /&gt;
end&lt;br /&gt;
--local characters = mw.loadData(&#039;Module:Card/items&#039;)&lt;br /&gt;
local ALL_DATA = {-- list of {type, data} in the order that untyped items should get checked&lt;br /&gt;
	{&#039;Character&#039;, mw.loadData(&#039;Module:Card/characters&#039;)},&lt;br /&gt;
	{&#039;Anima&#039;, mw.loadData(&#039;Module:Card/animas&#039;)},&lt;br /&gt;
	{&#039;Relic&#039;, mw.loadData(&#039;Module:Card/relics&#039;)},&lt;br /&gt;
	{&#039;Nexus Strand&#039;, mw.loadData(&#039;Module:Card/nexusstrands&#039;)},&lt;br /&gt;
	{&#039;Item&#039;, mw.loadData(&#039;Module:Card/items&#039;)} -- Always leave this one as the last in this list&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
--- A basic image type with filename prefix/suffix support.&lt;br /&gt;
--  Extends @{TemplateData#TableWithDefaults} with image-related properties,&lt;br /&gt;
--  allowing default property values to be customized after creation.&lt;br /&gt;
--&lt;br /&gt;
--  Image objects are created by @{Icon.createIcon}.&lt;br /&gt;
--  Use @{Image:buildString} to convert to wikitext.&lt;br /&gt;
--  @type Image&lt;br /&gt;
local IMAGE_ARGS = {&lt;br /&gt;
	size = {default=&#039;&#039;},&lt;br /&gt;
	name = {default=&#039;&#039;, alias=1},&lt;br /&gt;
	prefix = {default=&#039;&#039;},&lt;br /&gt;
	prefixSeparator = {default=&#039; &#039;},&lt;br /&gt;
	suffix = {default=&#039;&#039;},&lt;br /&gt;
	suffixSeparator = {default=&#039; &#039;},&lt;br /&gt;
	extension = {default=&#039;png&#039;, alias=&#039;ext&#039;},&lt;br /&gt;
	link = {defaultFrom=&#039;name&#039;},&lt;br /&gt;
	alt = {defaultFrom=&#039;name&#039;},&lt;br /&gt;
	class = {default=&#039;&#039;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local function buildImageFullPrefix(img)&lt;br /&gt;
	local prefix = img.prefix&lt;br /&gt;
	if prefix ~= &#039;&#039; then&lt;br /&gt;
		return prefix .. img.prefixSeparator&lt;br /&gt;
	end&lt;br /&gt;
	return &#039;&#039;&lt;br /&gt;
end&lt;br /&gt;
local function buildImageFullSuffix(img)&lt;br /&gt;
	local suffix = img.suffix&lt;br /&gt;
	if suffix ~= &#039;&#039; then&lt;br /&gt;
		return img.suffixSeparator .. suffix&lt;br /&gt;
	end&lt;br /&gt;
	return &#039;&#039;&lt;br /&gt;
end&lt;br /&gt;
local function buildImageFilename(img)&lt;br /&gt;
	if img.name == &#039;&#039; then return &#039;&#039; end&lt;br /&gt;
	return &#039;File:&#039; .. buildImageFullPrefix(img) .. img.name .. buildImageFullSuffix(img) .. &#039;.&#039; .. img.extension&lt;br /&gt;
end&lt;br /&gt;
local function buildImageSizeString(img)&lt;br /&gt;
	local size = img.size&lt;br /&gt;
	if size == nil or size == &#039;&#039; then&lt;br /&gt;
		return &#039;&#039;&lt;br /&gt;
	end&lt;br /&gt;
	size = tostring(size)&lt;br /&gt;
	if size:find(&#039;x&#039;, 1, true) then&lt;br /&gt;
		return size .. &#039;px&#039;&lt;br /&gt;
	end&lt;br /&gt;
	return size .. &#039;x&#039; .. size .. &#039;px&#039;&lt;br /&gt;
end&lt;br /&gt;
--[[&lt;br /&gt;
Returns wikitext that will display this image.&lt;br /&gt;
@return {string} Wikitext&lt;br /&gt;
@function Image:buildString&lt;br /&gt;
--]]&lt;br /&gt;
local function buildImageString(img)&lt;br /&gt;
	local filename = buildImageFilename(img)&lt;br /&gt;
	if filename == &#039;&#039; then return &#039;&#039; end&lt;br /&gt;
	return &#039;[[&#039; .. filename .. &#039;|&#039; .. buildImageSizeString(img) .. &#039;|link=&#039; .. img.link .. &#039;|alt=&#039; .. img.alt .. &#039;|class=&#039; .. img.class .. &#039;]]&#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
Creates an `Image` object with the given properties.&lt;br /&gt;
@param {table} args A table of `Image` properties that to assign to the new `Image`.&lt;br /&gt;
@see @{Image} for property documentation&lt;br /&gt;
@return {Image} The new `Image` object.&lt;br /&gt;
@constructor&lt;br /&gt;
--]]&lt;br /&gt;
local function createImage(args)&lt;br /&gt;
	local out&lt;br /&gt;
	if type(args) == &#039;table&#039; then&lt;br /&gt;
		out = TemplateData.processArgs(args, IMAGE_ARGS, {preserveDefaults=true})&lt;br /&gt;
	else&lt;br /&gt;
		out = {name = args}&lt;br /&gt;
	end&lt;br /&gt;
	-- add buildString function to image directly, not to image.nonDefaults&lt;br /&gt;
	&lt;br /&gt;
	rawset(out, &#039;buildString&#039;, buildImageString)&lt;br /&gt;
	return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- The name of the image. Used to determine filename.&lt;br /&gt;
--  @property {string} Image.name&lt;br /&gt;
&lt;br /&gt;
--- Maximum image size using wiki image syntax.&lt;br /&gt;
--  Unlike regular wiki image syntax, a single number specifies both height and width.&lt;br /&gt;
--  @property {string} Image.size&lt;br /&gt;
&lt;br /&gt;
--- Image file prefix.&lt;br /&gt;
--  @property {string} Image.prefix&lt;br /&gt;
&lt;br /&gt;
--- Appended to `prefix` if `prefix` is not empty. Defaults to a single space.&lt;br /&gt;
--  @property[opt] {string} Image.prefixSeparator&lt;br /&gt;
&lt;br /&gt;
--- Image file suffix.&lt;br /&gt;
--  @property {string} Image.suffix&lt;br /&gt;
&lt;br /&gt;
--- Prepended to `suffix` if `suffix` is not empty. Defaults to a single space.&lt;br /&gt;
--  @property {string} Image.suffixSeparator&lt;br /&gt;
&lt;br /&gt;
--- Image file extension. (Alias: `ext`.)&lt;br /&gt;
--  @property {string} Image.extension&lt;br /&gt;
&lt;br /&gt;
--- Image link. Also sets title (hover tooltip). Defaults to `name`.&lt;br /&gt;
--  @property {string} Image.link&lt;br /&gt;
&lt;br /&gt;
--- Image alt text. Defaults to `name`.&lt;br /&gt;
--  @property {string} Image.alt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--- A helper function for other modules to get icon args with a prefix from the given table.&lt;br /&gt;
--  @param {table} args A table containing icon args (and probably other args).&lt;br /&gt;
--  @param {string} prefix Prefix for keys to use when looking up entries from `args`.&lt;br /&gt;
--    If not specified, no prefix is used.&lt;br /&gt;
--  @return {table} A table containing only the extracted args, with the prefix removed from its keys.&lt;br /&gt;
function p.extractIconArgs(args, prefix)&lt;br /&gt;
	prefix = prefix or &#039;&#039;&lt;br /&gt;
	local out = TemplateData.createObjectWithDefaults()&lt;br /&gt;
	for _, config in pairs(ICON_ARGS) do&lt;br /&gt;
		out.defaults[config.name] = args.defaults[prefix .. config.name]&lt;br /&gt;
		out.nonDefaults[config.name] = args.nonDefaults[prefix .. config.name]&lt;br /&gt;
	end&lt;br /&gt;
	return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- A helper function that removes one of the given prefixes from the given string.&lt;br /&gt;
--  @param {string} str The string from which to strip a prefix&lt;br /&gt;
--  @param {table} prefixes A table whose keys are the possible prefixes to strip from `str`&lt;br /&gt;
--  @return {string} The string with the prefix removed.&lt;br /&gt;
--  @return[opt] {string} The prefix that was removed, or `nil` if no prefix was found.&lt;br /&gt;
function p.stripPrefixes(str, prefixes)&lt;br /&gt;
	for prefix, _ in pairs(prefixes) do&lt;br /&gt;
		if string.sub(str, 1, string.len(prefix)) == prefix then&lt;br /&gt;
			return string.sub(str, string.len(prefix) + 1), prefix&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return str&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
    The main entry point for other modules.&lt;br /&gt;
    Creates and returns an Image object with the given arguments.&lt;br /&gt;
    Infers `args.type` if `args.name` matches a known item/character/relic.&lt;br /&gt;
    @param {table} args Table containing the arguments:&lt;br /&gt;
    @param[opt] {string} args.name The name of the image.&lt;br /&gt;
                         Used to determine file name and set the default link and alt text.&lt;br /&gt;
                         If not specified, the output `Image` will produce empty wikitext.&lt;br /&gt;
    @param[opt] {string} args.link Image link. Also sets title (hover tooltip).&lt;br /&gt;
                         Defaults to `name`.&lt;br /&gt;
    @param[opt] {string} args.extension (alias: `ext`) Image file extension.&lt;br /&gt;
                         Defaults to &#039;png&#039;.&lt;br /&gt;
    @param[opt] {string} args.type Image type. Used to determine file prefix and default file suffix.&lt;br /&gt;
                         If not specified, type will be inferred if `args.name`&lt;br /&gt;
                         is a known item; otherwise, defaults to &#039;Item&#039;.&lt;br /&gt;
    @param[opt] {string} args.suffix File suffix override.&lt;br /&gt;
    @param[opt] {string} args.size Maximum image size using wiki image syntax.&lt;br /&gt;
                         Unlike regular wiki image syntax, specifying a single number will&lt;br /&gt;
                         set both height and width.&lt;br /&gt;
    @param[opt] {string} args.alt Image alt text. Defaults to `args.name`.&lt;br /&gt;
    @param[opt] {string} args.outfit Character outfit. Only applies to character images.&lt;br /&gt;
    @param[opt] {string} prefix Prefix to use when looking up arguments in `args`.&lt;br /&gt;
    @return {Image} The image for given arguments.&lt;br /&gt;
      Use `Image:buildString()` to get the wikitext for the image.&lt;br /&gt;
    @return {string} The image type.&lt;br /&gt;
    @return {TableWithDefaults} Associated data for given item (e.g., rarity, display name).&lt;br /&gt;
--]]&lt;br /&gt;
function p.createIcon(args, prefix)&lt;br /&gt;
	if prefix then&lt;br /&gt;
		args = p.extractIconArgs(args, prefix)&lt;br /&gt;
	end&lt;br /&gt;
	args = TemplateData.processArgs(args, ICON_ARGS, {preserveDefaults=true})&lt;br /&gt;
	--local baseName, prefix = p.stripPrefixes(args.name or &#039;&#039;, FOOD_PREFIXES)&lt;br /&gt;
	-- for now, there are no items that need special prefixes&lt;br /&gt;
	local baseName = args.name or &#039;&#039;&lt;br /&gt;
	local prefix = &#039;&#039;&lt;br /&gt;
	&lt;br /&gt;
	-- determine type by checking for data&lt;br /&gt;
	local image_type, data&lt;br /&gt;
	for i, v in ipairs(ALL_DATA) do&lt;br /&gt;
		image_type = v[1]&lt;br /&gt;
		if args.type == nil or args.type == image_type then&lt;br /&gt;
			data = v[2][baseName]&lt;br /&gt;
			if (not data) then data = v[2][baseName .. &#039; (&#039; .. image_type .. &#039;)&#039;] end&lt;br /&gt;
			if data then break end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	image_type = args.type or image_type -- in case args.type isn&#039;t in ALL_DATA (e.g., Enemy, Wildlife)&lt;br /&gt;
	&lt;br /&gt;
	local image = createImage(args)&lt;br /&gt;
	image.prefix = image_type&lt;br /&gt;
    &lt;br /&gt;
    -- set defaults and load data based on type&lt;br /&gt;
    if image_type == &#039;Character&#039; then&lt;br /&gt;
		image.defaults.suffix = &#039;Character Icon&#039;&lt;br /&gt;
    elseif image_type == &#039;Anima&#039; then&lt;br /&gt;
		image.defaults.suffix = &#039;Anima Icon&#039;&lt;br /&gt;
	elseif image_type == &#039;Item&#039; then&lt;br /&gt;
		image.prefix = &#039;Item&#039;&lt;br /&gt;
	elseif image_type == &#039;Relic&#039; then&lt;br /&gt;
		image.prefix = &#039;Relic&#039;&lt;br /&gt;
	elseif image_type == &#039;Nexus Strand&#039; then&lt;br /&gt;
		image.prefix = &#039;Nexus Strand&#039;&lt;br /&gt;
	end&lt;br /&gt;
	return image, image_type, data&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Valaerys</name></author>
	</entry>
	<entry>
		<id>https://hna.wiki/Module:TemplateData?diff=9227</id>
		<title>Module:TemplateData</title>
		<link rel="alternate" type="text/html" href="https://hna.wiki/Module:TemplateData?diff=9227"/>
		<updated>2026-07-14T22:41:37Z</updated>

		<summary type="html">&lt;p&gt;Valaerys: Created page with &amp;quot;-- Module copied from the Genshin Impact wiki -- Revision as of 5-1-2023  --- A library used to process other modules&amp;#039; arguments and to output matching  --  template data. --  @script TemplateData  local p = {}  -- general helper functions local function quote(s) 	return string.format(&amp;#039;&amp;quot;%s&amp;quot;&amp;#039;, s) end  local function ensureTable(v) 	if type(v) == &amp;quot;table&amp;quot; then return v end 	return {v} end  -- metatable helper functions  --- Try getting from non...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- Module copied from the Genshin Impact wiki&lt;br /&gt;
-- Revision as of 5-1-2023&lt;br /&gt;
&lt;br /&gt;
--- A library used to process other modules&#039; arguments and to output matching &lt;br /&gt;
--  [[mw:Extension:TemplateData|template data]].&lt;br /&gt;
--  @script TemplateData&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
-- general helper functions&lt;br /&gt;
local function quote(s)&lt;br /&gt;
	return string.format(&#039;&amp;quot;%s&amp;quot;&#039;, s)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function ensureTable(v)&lt;br /&gt;
	if type(v) == &amp;quot;table&amp;quot; then return v end&lt;br /&gt;
	return {v}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- metatable helper functions&lt;br /&gt;
&lt;br /&gt;
--- Try getting from nonDefaults, then from defaults.&lt;br /&gt;
local function getWithDefault(tbl, k)&lt;br /&gt;
	local value = tbl.nonDefaults[k]&lt;br /&gt;
	if value ~= nil then return value end&lt;br /&gt;
	return tbl.defaults[k]&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Main generator function for pairs.&lt;br /&gt;
local function pairsWithDefaultGenerator(data)&lt;br /&gt;
	local tbl, params, i = unpack(data)&lt;br /&gt;
	i = i + 1&lt;br /&gt;
	if i &amp;gt; #params then&lt;br /&gt;
		return&lt;br /&gt;
	end&lt;br /&gt;
	local k = params[i]&lt;br /&gt;
	local v = getWithDefault(tbl, k)&lt;br /&gt;
	data[3] = i&lt;br /&gt;
	return k, v&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Main generator function for ipairs.&lt;br /&gt;
local function ipairsWithDefaultGenerator(tbl, i)&lt;br /&gt;
	i = i + 1&lt;br /&gt;
    local v = getWithDefault(tbl, i)&lt;br /&gt;
    if v ~= nil then&lt;br /&gt;
    	return i, v&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local METATABLE = {&lt;br /&gt;
	__name = &amp;quot;ArgsWithDefault&amp;quot;,&lt;br /&gt;
	__index = getWithDefault,&lt;br /&gt;
	__newindex = function(self, k, v)&lt;br /&gt;
		self.nonDefaults[k] = v&lt;br /&gt;
	end,&lt;br /&gt;
	__pairs = function(self)&lt;br /&gt;
		local paramSet = {}&lt;br /&gt;
		for k, _ in pairs(self.nonDefaults) do&lt;br /&gt;
			paramSet[k] = true&lt;br /&gt;
		end&lt;br /&gt;
		for k, _ in pairs(self.defaults) do&lt;br /&gt;
			paramSet[k] = true&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		local params = {}&lt;br /&gt;
		for k, _ in pairs(paramSet) do&lt;br /&gt;
			table.insert(params, k)&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		return pairsWithDefaultGenerator, {self, params, 0}&lt;br /&gt;
	end,&lt;br /&gt;
	__ipairs = function(self)&lt;br /&gt;
		return ipairsWithDefaultGenerator, self, 0&lt;br /&gt;
	end,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
	A table with configurable default values for properties.&lt;br /&gt;
	@{TemplateData.processArgs} returns objects of this type.&lt;br /&gt;
	&lt;br /&gt;
	In addition to acting as a regular map-style table, these tables include two&lt;br /&gt;
	sub-tables that allow access to default value and explicitly-set values, respectively.&lt;br /&gt;
	@type TableWithDefaults&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
	@factory TableWithDefaults&lt;br /&gt;
	@return {TableWithDefaults} A new table with defaults.&lt;br /&gt;
--]]&lt;br /&gt;
function p.createObjectWithDefaults()&lt;br /&gt;
	-- @export&lt;br /&gt;
	local out = {&lt;br /&gt;
		--[[&lt;br /&gt;
			A table of default entries.&lt;br /&gt;
			Initially, defaults come from the argument configuration, but they can be&lt;br /&gt;
			changed retroactively after the table has been created.&lt;br /&gt;
			&lt;br /&gt;
			Not included in `pairs(TableWithDefaults)` or `ipairs(TableWithDefaults)`.&lt;br /&gt;
		]]&lt;br /&gt;
		defaults={},&lt;br /&gt;
		--[[&lt;br /&gt;
			A table of manually-assigned entries.&lt;br /&gt;
			Useful for checking whether a property was set explicitly.&lt;br /&gt;
			(Assinging to the `TableWithDefaults` directly will update this table.)&lt;br /&gt;
			&lt;br /&gt;
			Not included in `pairs(TableWithDefaults)` or `ipairs(TableWithDefaults)`.&lt;br /&gt;
		]]&lt;br /&gt;
		nonDefaults={}&lt;br /&gt;
	}&lt;br /&gt;
	setmetatable(out, METATABLE)&lt;br /&gt;
	return out&lt;br /&gt;
end&lt;br /&gt;
--- @type end&lt;br /&gt;
&lt;br /&gt;
local CONFIG_DEFAULTS = {}&lt;br /&gt;
local CONFIG_TRANSFORMS = {}&lt;br /&gt;
-- note: self.name is set in `p.wrapConfig`, so it doesn&#039;t need a default&lt;br /&gt;
function CONFIG_DEFAULTS:displayName()&lt;br /&gt;
	return self.name&lt;br /&gt;
end&lt;br /&gt;
function CONFIG_TRANSFORMS:displayName(value)&lt;br /&gt;
	return tostring(value)&lt;br /&gt;
end&lt;br /&gt;
function CONFIG_TRANSFORMS:alias(value)&lt;br /&gt;
	return ensureTable(value)&lt;br /&gt;
end&lt;br /&gt;
function CONFIG_DEFAULTS:displayAlias()&lt;br /&gt;
	if self.alias then&lt;br /&gt;
		local name = tostring(self.name)&lt;br /&gt;
		if self.displayName ~= name then&lt;br /&gt;
			-- swap name and displayName if displayName is an alias&lt;br /&gt;
			local output = {}&lt;br /&gt;
			for i, v in ipairs(self.alias) do&lt;br /&gt;
				v = tostring(v)&lt;br /&gt;
				if v == self.displayName then&lt;br /&gt;
					output[i] = name&lt;br /&gt;
				else&lt;br /&gt;
					output[i] = v&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			return output&lt;br /&gt;
		else&lt;br /&gt;
			return self.alias&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
function CONFIG_DEFAULTS:description()&lt;br /&gt;
	if self.type == &amp;quot;1&amp;quot; then&lt;br /&gt;
		return &amp;quot;Set to 1 to &amp;quot; .. self.config.trueDescription&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
function CONFIG_DEFAULTS:summary()&lt;br /&gt;
	if self.description then&lt;br /&gt;
		-- take everything up to (and including) the first period&lt;br /&gt;
		return self.description:match(&#039;^.-%.&#039;) or self.description&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
function CONFIG_DEFAULTS:example()&lt;br /&gt;
	if self.type == &amp;quot;1&amp;quot; then&lt;br /&gt;
		return 1&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
function CONFIG_TRANSFORMS:example(value)&lt;br /&gt;
	if type(value) == &amp;quot;table&amp;quot; then&lt;br /&gt;
		return quote(table.concat(value, &#039;&amp;quot;, &amp;quot;&#039;))&lt;br /&gt;
	else&lt;br /&gt;
		return quote(value)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
function CONFIG_DEFAULTS:displayDefault()&lt;br /&gt;
	if self.default then&lt;br /&gt;
		return quote(self.default)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
function CONFIG_DEFAULTS:displayType()&lt;br /&gt;
	if self.type == &amp;quot;1&amp;quot; then&lt;br /&gt;
		return &amp;quot;boolean&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	if self.type == &amp;quot;number&amp;quot; then&lt;br /&gt;
		return &amp;quot;number&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	return &amp;quot;line&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local CONFIG_WRAPPER_METATABLE = {&lt;br /&gt;
	__index = function(self, key)&lt;br /&gt;
		-- use value from config if present&lt;br /&gt;
		local value = self.config[key]&lt;br /&gt;
		&lt;br /&gt;
		-- else try to generate a default value&lt;br /&gt;
		if not value then&lt;br /&gt;
			local getter = CONFIG_DEFAULTS[key]&lt;br /&gt;
			if getter then&lt;br /&gt;
				value = getter(self)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if not value then&lt;br /&gt;
			return nil&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		-- if value is present (and not false), run transform if needed&lt;br /&gt;
		local transform = CONFIG_TRANSFORMS[key]&lt;br /&gt;
		if transform then&lt;br /&gt;
			value = transform(self, value)&lt;br /&gt;
		end&lt;br /&gt;
		-- memoize and return&lt;br /&gt;
		self[key] = value&lt;br /&gt;
		return value&lt;br /&gt;
	end&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function p.wrapConfig(config, key)&lt;br /&gt;
	local output = {config = config, name = config.name or key}&lt;br /&gt;
	setmetatable(output, CONFIG_WRAPPER_METATABLE)&lt;br /&gt;
	return output&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Processes arguments based on given argument configs.&lt;br /&gt;
--  @param      {table} args The table of arguments to process.&lt;br /&gt;
--  @param      {ArgumentConfigTable} argConfigs The argument configs to use when processing `args`.&lt;br /&gt;
--  @param[opt] {table} options Extra options&lt;br /&gt;
--  @param[opt] {boolean} options.preserveDefaults Set true to treat `args` as a `TableWithDefaults`&lt;br /&gt;
--              and use its `defaults` and `nonDefaults` to set default/non-default values for&lt;br /&gt;
--              arguments that use the same name in both `args` and `argConfigs`&lt;br /&gt;
--              (i.e., this currently does not work with aliases).&lt;br /&gt;
--  @return     {TableWithDefaults} The processed version of the arguments.&lt;br /&gt;
function p.processArgs(args, paramConfigs, options)&lt;br /&gt;
	local preserveDefaults = false&lt;br /&gt;
	if type(options) == &amp;quot;table&amp;quot; and options.preserveDefaults and type(args.defaults) == &amp;quot;table&amp;quot; and type(args.nonDefaults) == &amp;quot;table&amp;quot; then&lt;br /&gt;
		preserveDefaults = true&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local out = p.createObjectWithDefaults()&lt;br /&gt;
	for key, config in pairs(paramConfigs) do&lt;br /&gt;
		key = config.name or key&lt;br /&gt;
		local value, default&lt;br /&gt;
		if preserveDefaults then&lt;br /&gt;
			value = args.nonDefaults[key]&lt;br /&gt;
			default = args.defaults[key] or config.default&lt;br /&gt;
		else&lt;br /&gt;
			value = args[key]&lt;br /&gt;
			default = config.default&lt;br /&gt;
		end&lt;br /&gt;
		if value == nil and config.alias then&lt;br /&gt;
			for _, alias in ipairs(ensureTable(config.alias)) do&lt;br /&gt;
				value = args[alias]&lt;br /&gt;
				if value ~= nil then break end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		if config.type == &amp;quot;1&amp;quot; then&lt;br /&gt;
			if value ~= nil then&lt;br /&gt;
				value = value == &amp;quot;1&amp;quot; or value == 1 or value == true&lt;br /&gt;
			end&lt;br /&gt;
			default = default or false&lt;br /&gt;
		elseif config.type == &amp;quot;number&amp;quot; then&lt;br /&gt;
			value = tonumber(value)&lt;br /&gt;
		end&lt;br /&gt;
		out.nonDefaults[key] = value&lt;br /&gt;
		-- note that default values will not be processed by type&lt;br /&gt;
		out.defaults[key] = default&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- note that multiple layers of defaultFrom are not supported&lt;br /&gt;
	for key, config in pairs(paramConfigs) do&lt;br /&gt;
		key = config.name or key&lt;br /&gt;
		if config.defaultFrom then&lt;br /&gt;
			local to = key&lt;br /&gt;
			local from = config.defaultFrom&lt;br /&gt;
			-- allow defaulting from params that won&#039;t appear in output&lt;br /&gt;
			-- use explicit default if param not found&lt;br /&gt;
			out.defaults[to] = out.nonDefaults[from] or out.defaults[from] or args[from] or out.defaults[to]&lt;br /&gt;
		end&lt;br /&gt;
		if config.error and out[key] == nil then&lt;br /&gt;
			local message = config.error&lt;br /&gt;
			if type(message) == &amp;quot;boolean&amp;quot; then&lt;br /&gt;
				message = &amp;quot;Please specify a value for the required argument \&amp;quot;&amp;quot; .. key .. &amp;quot;\&amp;quot;&amp;quot;&lt;br /&gt;
			end&lt;br /&gt;
			error(message, -1)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Creates and returns template data for display on a page.&lt;br /&gt;
--  @param      {ArgumentConfigList} argConfigs Argument configs to base the template data on.&lt;br /&gt;
--              Must use list form in order for parameter order to be predictable.&lt;br /&gt;
--  @param      {table} options Any other top-level keys to add to the template data.&lt;br /&gt;
--              Usually used to add `description` and `format`.&lt;br /&gt;
--  @param[opt] {Frame} frame Current frame. If not supplied, template data will be returned as a raw string,&lt;br /&gt;
--              which is useful for previewing in console, but will not display properly when output to wiki articles.&lt;br /&gt;
--  @return     {string} The template data.&lt;br /&gt;
function p.templateData(paramConfigs, options, frame)&lt;br /&gt;
	local json = require(&amp;quot;Module:JSON&amp;quot;)&lt;br /&gt;
	&lt;br /&gt;
	local params = {}&lt;br /&gt;
	local paramOrder = {}&lt;br /&gt;
	local output = {&lt;br /&gt;
		params=params,&lt;br /&gt;
		paramOrder=paramOrder&lt;br /&gt;
	}&lt;br /&gt;
	for key, val in pairs(options) do&lt;br /&gt;
		output[key] = val&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	for key, config in ipairs(paramConfigs) do&lt;br /&gt;
		config = p.wrapConfig(config)&lt;br /&gt;
		params[config.displayName] = { -- allow false to behave the same as nil for all properties&lt;br /&gt;
			aliases=config.displayAlias,&lt;br /&gt;
			label=config.label,&lt;br /&gt;
			description=config.description,&lt;br /&gt;
			type=config.displayType,&lt;br /&gt;
			default=config.displayDefault,&lt;br /&gt;
			example=config.example,&lt;br /&gt;
			auto=config.auto,&lt;br /&gt;
			required=config.status==&amp;quot;required&amp;quot; or nil,&lt;br /&gt;
			suggested=config.status==&amp;quot;suggested&amp;quot; or nil,&lt;br /&gt;
			deprecated=config.status==&amp;quot;deprecated&amp;quot; or nil,&lt;br /&gt;
		}&lt;br /&gt;
		table.insert(paramOrder, config.displayName)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if frame then&lt;br /&gt;
		return frame:extensionTag(&amp;quot;templatedata&amp;quot;, json.encode(output))&lt;br /&gt;
	else&lt;br /&gt;
		return &amp;quot;&amp;lt;templatedata&amp;gt;&amp;quot;..json.encode(output)..&amp;quot;&amp;lt;/templatedata&amp;gt;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function addLine(o)&lt;br /&gt;
	-- note: putting divs into code elements is not valid HTML,&lt;br /&gt;
	-- so instead use a span with CSS&lt;br /&gt;
	return o:tag(&#039;span&#039;):css(&#039;display&#039;, &#039;block&#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.syntax(paramConfigs, frame)&lt;br /&gt;
	frame = frame or mw.getCurrentFrame()&lt;br /&gt;
	local templateName = frame.args[1] or mw.title.new(frame:getTitle()).text&lt;br /&gt;
	&lt;br /&gt;
	local params = {}&lt;br /&gt;
	local maxNameLength = 0&lt;br /&gt;
	for key, config in ipairs(paramConfigs) do&lt;br /&gt;
		config = p.wrapConfig(config)&lt;br /&gt;
		local param = {&lt;br /&gt;
			name = config.displayName,&lt;br /&gt;
			nameLength = #config.displayName,&lt;br /&gt;
			summary = config.summary,&lt;br /&gt;
			aliases = config.displayAlias,&lt;br /&gt;
			status = config.status, -- (not currently displayed)&lt;br /&gt;
		}&lt;br /&gt;
		maxNameLength = math.max(maxNameLength, param.nameLength)&lt;br /&gt;
		&lt;br /&gt;
		table.insert(params, param)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local indent = maxNameLength + 4 -- 1ch from &#039;|&#039; + 3ch from &#039; = &#039;&lt;br /&gt;
	local output = mw.html.create(&#039;code&#039;):css({&lt;br /&gt;
		display=&#039;inline-block&#039;,&lt;br /&gt;
		[&#039;line-height&#039;]=&#039;1.5&#039;,&lt;br /&gt;
		[&#039;white-space&#039;]=&#039;pre-wrap&#039;,&lt;br /&gt;
		[&#039;text-indent&#039;]=-indent..&#039;ch&#039;,&lt;br /&gt;
		[&#039;padding-left&#039;]=&#039;calc(&#039;..indent..&#039;ch + 4px)&#039;, -- 4px from default padding&lt;br /&gt;
	})&lt;br /&gt;
	addLine(output):wikitext(&amp;quot;{{&amp;quot;):tag(&#039;b&#039;):wikitext(templateName)&lt;br /&gt;
	for _, param in ipairs(params) do&lt;br /&gt;
		local line = addLine(output)&lt;br /&gt;
		line:wikitext(&#039;|&#039;):tag(&#039;b&#039;):wikitext(param.name)&lt;br /&gt;
		for i = 1, maxNameLength - param.nameLength do&lt;br /&gt;
			line:wikitext(&#039;&amp;amp;nbsp;&#039;) -- regular spaces get collapsed on mobile&lt;br /&gt;
		end&lt;br /&gt;
		line:wikitext(&#039; = &#039;, param.summary)&lt;br /&gt;
		if param.aliases then&lt;br /&gt;
			line:wikitext(&#039; (&#039;, table.concat(param.aliases, &#039;/&#039;), &#039;)&#039;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	addLine(output):wikitext(&amp;quot;}}&amp;quot;)&lt;br /&gt;
	return output&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- A table (either list or map form) of @{ArgumentConfig} configurations for arguments.&lt;br /&gt;
--  &lt;br /&gt;
--  Modules will create such tables and pass them to @{TemplateData.processArgs}&lt;br /&gt;
--  and @{TemplateData.templateData} to control how arguments are processed and&lt;br /&gt;
--  what template data gets output, respectively.&lt;br /&gt;
--  @see @{ArgumentConfigList} and @{ArgumentConfigMap}&lt;br /&gt;
--  @see @{ArgumentConfig} for details on each argument&#039;s configuration&lt;br /&gt;
--  @type ArgumentConfigTable&lt;br /&gt;
&lt;br /&gt;
--- An @{ArgumentConfigTable} that acts as a list of @{ArgumentConfig}.&lt;br /&gt;
--  @type ArgumentConfigList&lt;br /&gt;
&lt;br /&gt;
--- An @{ArgumentConfigTable} that acts as a map from argument name keys to @{ArgumentConfig} values.&lt;br /&gt;
--  @type ArgumentConfigMap&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
Configuration for a single argument.&lt;br /&gt;
Modules will create tables that match this type for their @{ArgumentConfigTable}s.&lt;br /&gt;
@type ArgumentConfig&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
	--[[&lt;br /&gt;
	Argument name. If not provided,&lt;br /&gt;
	defaults to the key of this `ArgumentConfig` in the table that contains it.&lt;br /&gt;
	@property[opt]  {string} ArgumentConfig.name&lt;br /&gt;
	--]]&lt;br /&gt;
	&lt;br /&gt;
	--[[&lt;br /&gt;
	Display name for documentation.&lt;br /&gt;
	Typically used to mark one of the aliases (e.g., &amp;quot;1&amp;quot;) to use as the main&lt;br /&gt;
	name in the documentation while using a more descriptive name in code&lt;br /&gt;
	(e.g., `args.item_name`).&lt;br /&gt;
	@property[opt]  {string] ArgumentConfig.displayName&lt;br /&gt;
	]]&lt;br /&gt;
	&lt;br /&gt;
	--[[&lt;br /&gt;
	An alias or list of aliases, any of which clients can use instead of `name`&lt;br /&gt;
	in their module arguments.&lt;br /&gt;
	(`name` will take precedence if it appears along with an alias in the args,&lt;br /&gt;
	and if multiple aliases apppear, the first one in the list will take precedence.)&lt;br /&gt;
	@property[opt]  {string|table} ArgumentConfig.aliases&lt;br /&gt;
	--]]&lt;br /&gt;
&lt;br /&gt;
	--[[&lt;br /&gt;
	Display name to be used in template data.&lt;br /&gt;
	Has no effect on argument processing.&lt;br /&gt;
	@property[opt]  {string} ArgumentConfig.label&lt;br /&gt;
	--]]&lt;br /&gt;
	&lt;br /&gt;
	--[[&lt;br /&gt;
	Type of argument for automatic conversions.&lt;br /&gt;
	Supported values:&lt;br /&gt;
	* `&amp;quot;number&amp;quot;`: uses @{tonumber} on the argument value&lt;br /&gt;
	* `&amp;quot;1&amp;quot;`: converts argument value a boolean based on whether it&#039;s the string `&amp;quot;1&amp;quot;`,&lt;br /&gt;
	  the number `1`, or the boolean `true`.&lt;br /&gt;
	@property[opt]  {string} ArgumentConfig.type&lt;br /&gt;
	--]]&lt;br /&gt;
	&lt;br /&gt;
	--[[&lt;br /&gt;
	Display type to be used in template data.&lt;br /&gt;
	Has no effect on argument processing.&lt;br /&gt;
	Overrides `ArgumentConfig.type` in template data.&lt;br /&gt;
	@property[opt]  {string} ArgumentConfig.displayType&lt;br /&gt;
	--]]&lt;br /&gt;
	&lt;br /&gt;
	--[[&lt;br /&gt;
	Default value to use for the argument if the user does not provide any&lt;br /&gt;
	(or if the `type` conversion produces a nil result).&lt;br /&gt;
	@property[opt]  {any} ArgumentConfig.default&lt;br /&gt;
	--]]&lt;br /&gt;
	&lt;br /&gt;
	--[[&lt;br /&gt;
	Display for default value to be used in template data.&lt;br /&gt;
	Has no effect on argument processing.&lt;br /&gt;
	Overrides `ArgumentConfig.default` in template data.&lt;br /&gt;
	@property[opt]  {any} ArgumentConfig.displayDefault&lt;br /&gt;
	--]]&lt;br /&gt;
	&lt;br /&gt;
	--[[&lt;br /&gt;
	Error message to use if argument is not specified.&lt;br /&gt;
	Set to `true` to use a default error message.&lt;br /&gt;
	(Note: setting this does NOT automatically set `status` to `&amp;quot;required&amp;quot;`.)&lt;br /&gt;
	@property[opt]  {string|boolean} ArgumentConfig.error&lt;br /&gt;
	--]]&lt;br /&gt;
	&lt;br /&gt;
	--[[&lt;br /&gt;
	Defaults to &amp;quot;optional&amp;quot;.&lt;br /&gt;
	Set to &amp;quot;required&amp;quot;, &amp;quot;suggested&amp;quot;, or &amp;quot;deprecated&amp;quot; to set corresponding flags&lt;br /&gt;
	in the template data.&lt;br /&gt;
	Has no effect on argument processing.&lt;br /&gt;
	@property[opt]  {string} ArgumentConfig.status&lt;br /&gt;
	--]]&lt;br /&gt;
	&lt;br /&gt;
	--[[&lt;br /&gt;
	Default value used in the Visual Editor.&lt;br /&gt;
	Has no effect on argument processing.&lt;br /&gt;
	@property[opt]  {any} ArgumentConfig.auto&lt;br /&gt;
	--]]&lt;br /&gt;
	&lt;br /&gt;
	--[[&lt;br /&gt;
	A description of the argument&#039;s purpose.&lt;br /&gt;
	Has no effect on argument processing.&lt;br /&gt;
	@property[opt]  {string} ArgumentConfig.description&lt;br /&gt;
	--]]&lt;br /&gt;
	&lt;br /&gt;
	--[[&lt;br /&gt;
	Only used for arguments with a `type` of `&amp;quot;1&amp;quot;`.&lt;br /&gt;
	Describes what happens when the argument value is set to 1.&lt;br /&gt;
	Used to reduce boilerplate in descriptions for boolean args.&lt;br /&gt;
	@usage &amp;quot;output text without a link&amp;quot;&lt;br /&gt;
	@property[opt]  {string} ArgumentConfig.trueDescription&lt;br /&gt;
	--]]&lt;br /&gt;
	&lt;br /&gt;
	--[[&lt;br /&gt;
	Example value(s) for the argument.&lt;br /&gt;
	The value(s) will be surrounded by quotes in the template data.&lt;br /&gt;
	@property[opt]  {string|table} ArgumentConfig.example&lt;br /&gt;
	--]]&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Valaerys</name></author>
	</entry>
	<entry>
		<id>https://hna.wiki/Module:Card/doc?diff=9226</id>
		<title>Module:Card/doc</title>
		<link rel="alternate" type="text/html" href="https://hna.wiki/Module:Card/doc?diff=9226"/>
		<updated>2026-07-14T22:28:45Z</updated>

		<summary type="html">&lt;p&gt;Valaerys: Created page with &amp;quot;{{Documentation/Header}} {{High Risk|pagetype=Main}} This module implements {{T|Card}}.&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Documentation/Header}}&lt;br /&gt;
{{High Risk|pagetype=Main}}&lt;br /&gt;
This module implements {{T|Card}}.&lt;/div&gt;</summary>
		<author><name>Valaerys</name></author>
	</entry>
	<entry>
		<id>https://hna.wiki/Module:Icon/doc?diff=9225</id>
		<title>Module:Icon/doc</title>
		<link rel="alternate" type="text/html" href="https://hna.wiki/Module:Icon/doc?diff=9225"/>
		<updated>2026-07-14T22:28:26Z</updated>

		<summary type="html">&lt;p&gt;Valaerys: Created page with &amp;quot;{{Documentation/Header}} This module is used by {{T|Card}}.&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Documentation/Header}}&lt;br /&gt;
This module is used by {{T|Card}}.&lt;/div&gt;</summary>
		<author><name>Valaerys</name></author>
	</entry>
	<entry>
		<id>https://hna.wiki/Module:Icon?diff=9224</id>
		<title>Module:Icon</title>
		<link rel="alternate" type="text/html" href="https://hna.wiki/Module:Icon?diff=9224"/>
		<updated>2026-07-14T22:27:00Z</updated>

		<summary type="html">&lt;p&gt;Valaerys: Created page with &amp;quot;-- Module copied from the Genshin Impact wiki -- Revision as of 4-29-2023  --- A library that other modules can use to create icon images with automatic prefix/suffix settings for items, characters, and weapons. --  (Other icon types must have their types/suffixes specified manually.) -- --  &amp;#039;&amp;#039;&amp;#039;Note:&amp;#039;&amp;#039;&amp;#039; this module is (currently) NOT related to Template:Icon. -- --  @script Icon  local TemplateData = require(&amp;#039;Module:TemplateData&amp;#039;)  local p = {}  -- icon arg defaults...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- Module copied from the Genshin Impact wiki&lt;br /&gt;
-- Revision as of 4-29-2023&lt;br /&gt;
&lt;br /&gt;
--- A library that other modules can use to create icon images with automatic prefix/suffix settings for items, characters, and weapons.&lt;br /&gt;
--  (Other icon types must have their types/suffixes specified manually.)&lt;br /&gt;
--&lt;br /&gt;
--  &#039;&#039;&#039;Note:&#039;&#039;&#039; this module is (currently) NOT related to [[Template:Icon]].&lt;br /&gt;
--&lt;br /&gt;
--  @script Icon&lt;br /&gt;
&lt;br /&gt;
local TemplateData = require(&#039;Module:TemplateData&#039;)&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
-- icon arg defaults for template data&lt;br /&gt;
-- uses list format to ensure that the order is the same when added to another list of args using `p.addIconArgs`&lt;br /&gt;
local ICON_ARGS = {&lt;br /&gt;
	{name=&#039;name&#039;,&lt;br /&gt;
		label=&#039;Name&#039;,&lt;br /&gt;
		description=&#039;The name of the {labelPrefix}image.&#039;,&lt;br /&gt;
		example={&#039;Fire&#039;}&lt;br /&gt;
	},&lt;br /&gt;
	{name=&#039;link&#039;, displayType=&#039;wiki-page-name&#039;, defaultFrom=&#039;name&#039;,&lt;br /&gt;
		label=&#039;Link&#039;,&lt;br /&gt;
		description=&#039;The page that the {labelPrefix}image links to.&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{name=&#039;extension&#039;, alias=&#039;ext&#039;, default=&#039;png&#039;,&lt;br /&gt;
		label=&#039;File Extension&#039;,&lt;br /&gt;
		description=&#039;The file extension for the {labelPrefix}image.&#039;,&lt;br /&gt;
		example={&#039;png&#039;, &#039;jpg&#039;, &#039;jpeg&#039;, &#039;gif&#039;},&lt;br /&gt;
	},&lt;br /&gt;
	{name=&#039;type&#039;, displayDefault=&#039;determined based on {labelPrefix}Name; \&#039;Item\&#039; if unknown&#039;,&lt;br /&gt;
		label=&#039;File Prefix&#039;,&lt;br /&gt;
		description=&#039;The file prefix to prepend to {labelPrefix}Name.&#039;,&lt;br /&gt;
		example={&#039;Item&#039;, &#039;Light Cone&#039;, &#039;Character&#039;, &#039;Icon&#039;}&lt;br /&gt;
	},&lt;br /&gt;
	{name=&#039;suffix&#039;, displayDefault=&#039;determined based on {labelPrefix}Name/{labelPrefix}Type&#039;,&lt;br /&gt;
		label=&#039;File Suffix&#039;,&lt;br /&gt;
		description=&#039;The file suffix to append to {labelPrefix}Name.&#039;,&lt;br /&gt;
		example={&#039;Icon&#039;, &#039;Thumb&#039;, &#039;2nd&#039;, &#039;White&#039;}&lt;br /&gt;
	},&lt;br /&gt;
	{name=&#039;size&#039;, default=&#039;20&#039;,&lt;br /&gt;
		label=&#039;Size&#039;,&lt;br /&gt;
		description=&#039;The height and width of the {labelPrefix}image in pixels. A single number will be used for both height and width; to specify them separately, use &amp;quot;wxh&amp;quot; format.&#039;,&lt;br /&gt;
		example={&#039;20&#039;, &#039;20x10&#039;, &#039;20x&#039;, &#039;x20&#039;}&lt;br /&gt;
	},&lt;br /&gt;
	{name=&#039;alt&#039;, defaultFrom=&#039;name&#039;, displayDefault=&#039;determined based on {labelPrefix}Name&#039;,&lt;br /&gt;
		label=&#039;Alt Text&#039;,&lt;br /&gt;
		description=&#039;The alt text of the {labelPrefix}image.&#039;,&lt;br /&gt;
	},&lt;br /&gt;
	{name=&#039;class&#039;, default=&#039;&#039;, displayDefault=&#039;N/A&#039;,&lt;br /&gt;
		label=&#039;Additional Classes&#039;,&lt;br /&gt;
		description=&#039;Additional CSS classes to apply to the resulting img element.&#039;,&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
--- Returns a table version of the input.&lt;br /&gt;
--  @param v A table or an item that belongs in a table.&lt;br /&gt;
--  @return {table}&lt;br /&gt;
local function ensureTable(v)&lt;br /&gt;
	if type(v) == &#039;table&#039; then return v end&lt;br /&gt;
	return {v}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- A special constant that can be used as a value in the `overrides` parameter for `addIconArgs`&lt;br /&gt;
--  to disable the given base config or TemplateData key.&lt;br /&gt;
p.EXCLUDE = {};&lt;br /&gt;
&lt;br /&gt;
--- Copy entries from b into a, excluding values that are `p.EXCLUDE`.&lt;br /&gt;
--  @param {table} a Table to insert into.&lt;br /&gt;
--  @param {table} b Table to copy from.&lt;br /&gt;
local function copyTable(a, b)&lt;br /&gt;
	for k, v in pairs(b) do &lt;br /&gt;
		if v == p.EXCLUDE then&lt;br /&gt;
			v = nil&lt;br /&gt;
		end&lt;br /&gt;
		a[k] = v&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- A function that other modules can use to append Icon arguments to their template data.&lt;br /&gt;
--  @param {TemplateData#ArgumentConfigList} base The template data to append to.&lt;br /&gt;
--         If any configs have a `name` that matches an Icon argument&#039;s (with `namePrefix`)&lt;br /&gt;
--         and a property `placeholderFor` set to `&#039;Module:Icon&#039;`, then the&lt;br /&gt;
--         corresponding Icon argument will replace it instead of being appended.&lt;br /&gt;
--         (This allows argument order to be changed for [[Module:TemplateData]]&#039;s&lt;br /&gt;
--         documentation generation.)&lt;br /&gt;
--  @param {string} namePrefix A string to prepend to all parameter names.&lt;br /&gt;
--  @param {string} labelPrefix A string to prepend to all parameter labels&lt;br /&gt;
--    (the names displayed in documentation).&lt;br /&gt;
--  @param {TemplateData#ArgumentConfigMap} overrides A table of overrides to configure the template data.&lt;br /&gt;
--    Keys should be parameter names, and values are tables of TemplateData&lt;br /&gt;
--    configuration objects to merge with the default configuration.&lt;br /&gt;
--    These configuration objects can use @{Icon.EXCLUDE} as values to disable&lt;br /&gt;
--    the corresponding default configuration key (e.g., to disable a default value&lt;br /&gt;
--    or alias without adding a new one).&lt;br /&gt;
function p.addIconArgs(baseConfigs, namePrefix, labelPrefix, overrides)&lt;br /&gt;
	-- preprocessing: save position of each placeholder config&lt;br /&gt;
	local argLocations = {}&lt;br /&gt;
	for i, config in ipairs(baseConfigs) do&lt;br /&gt;
		if config.placeholderFor == &#039;Module:Icon&#039; then&lt;br /&gt;
			argLocations[config.name] = i&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- main loop: prepend namePrefix and labelPrefix where needed&lt;br /&gt;
	-- and add configs to baseConfigs&lt;br /&gt;
	for _, config in ipairs(ICON_ARGS) do&lt;br /&gt;
		local override = overrides[config.name]&lt;br /&gt;
		if override ~= false and override ~= p.EXCLUDE then&lt;br /&gt;
			local c = {}&lt;br /&gt;
			copyTable(c, config)&lt;br /&gt;
			c.name = namePrefix .. c.name&lt;br /&gt;
			c.label = labelPrefix .. c.label&lt;br /&gt;
			if c.defaultFrom then&lt;br /&gt;
				c.defaultFrom = namePrefix .. c.defaultFrom&lt;br /&gt;
			end&lt;br /&gt;
			if c.alias then&lt;br /&gt;
				local aliases = {}&lt;br /&gt;
				for _, a in ipairs(ensureTable(c.alias)) do&lt;br /&gt;
					table.insert(aliases, namePrefix .. a)&lt;br /&gt;
				end&lt;br /&gt;
				c.alias = aliases&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			if override then&lt;br /&gt;
				copyTable(c, override)&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			if c.description then&lt;br /&gt;
				c.description = c.description:gsub(&#039;{labelPrefix}&#039;, labelPrefix)&lt;br /&gt;
			end&lt;br /&gt;
			if c.displayDefault then&lt;br /&gt;
				c.displayDefault = c.displayDefault:gsub(&#039;{labelPrefix}&#039;, labelPrefix)&lt;br /&gt;
			end&lt;br /&gt;
			&lt;br /&gt;
			local placeholderIndex = argLocations[c.name]&lt;br /&gt;
			if placeholderIndex then&lt;br /&gt;
				baseConfigs[placeholderIndex] = c&lt;br /&gt;
			else&lt;br /&gt;
				table.insert(baseConfigs, c)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function extendTable(base, extra)&lt;br /&gt;
	out = {}&lt;br /&gt;
	setmetatable(out, {&lt;br /&gt;
		__index = function(t, key)&lt;br /&gt;
			local val = base[key]&lt;br /&gt;
			if val ~= nil then return val else return extra[key] end&lt;br /&gt;
		end&lt;br /&gt;
	})&lt;br /&gt;
	return out&lt;br /&gt;
end&lt;br /&gt;
--local characters = mw.loadData(&#039;Module:Card/items&#039;)&lt;br /&gt;
local ALL_DATA = {-- list of {type, data} in the order that untyped items should get checked&lt;br /&gt;
	{&#039;Character&#039;, mw.loadData(&#039;Module:Card/characters&#039;)},&lt;br /&gt;
	{&#039;Item&#039;, mw.loadData(&#039;Module:Card/items&#039;)} -- Always leave this one as the last in this list&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
--- A basic image type with filename prefix/suffix support.&lt;br /&gt;
--  Extends @{TemplateData#TableWithDefaults} with image-related properties,&lt;br /&gt;
--  allowing default property values to be customized after creation.&lt;br /&gt;
--&lt;br /&gt;
--  Image objects are created by @{Icon.createIcon}.&lt;br /&gt;
--  Use @{Image:buildString} to convert to wikitext.&lt;br /&gt;
--  @type Image&lt;br /&gt;
local IMAGE_ARGS = {&lt;br /&gt;
	size = {default=&#039;&#039;},&lt;br /&gt;
	name = {default=&#039;&#039;, alias=1},&lt;br /&gt;
	prefix = {default=&#039;&#039;},&lt;br /&gt;
	prefixSeparator = {default=&#039; &#039;},&lt;br /&gt;
	suffix = {default=&#039;&#039;},&lt;br /&gt;
	suffixSeparator = {default=&#039; &#039;},&lt;br /&gt;
	extension = {default=&#039;png&#039;, alias=&#039;ext&#039;},&lt;br /&gt;
	link = {defaultFrom=&#039;name&#039;},&lt;br /&gt;
	alt = {defaultFrom=&#039;name&#039;},&lt;br /&gt;
	class = {default=&#039;&#039;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local function buildImageFullPrefix(img)&lt;br /&gt;
	local prefix = img.prefix&lt;br /&gt;
	if prefix ~= &#039;&#039; then&lt;br /&gt;
		return prefix .. img.prefixSeparator&lt;br /&gt;
	end&lt;br /&gt;
	return &#039;&#039;&lt;br /&gt;
end&lt;br /&gt;
local function buildImageFullSuffix(img)&lt;br /&gt;
	local suffix = img.suffix&lt;br /&gt;
	if suffix ~= &#039;&#039; then&lt;br /&gt;
		return img.suffixSeparator .. suffix&lt;br /&gt;
	end&lt;br /&gt;
	return &#039;&#039;&lt;br /&gt;
end&lt;br /&gt;
local function buildImageFilename(img)&lt;br /&gt;
	if img.name == &#039;&#039; then return &#039;&#039; end&lt;br /&gt;
	return &#039;File:&#039; .. buildImageFullPrefix(img) .. img.name .. buildImageFullSuffix(img) .. &#039;.&#039; .. img.extension&lt;br /&gt;
end&lt;br /&gt;
local function buildImageSizeString(img)&lt;br /&gt;
	local size = img.size&lt;br /&gt;
	if size == nil or size == &#039;&#039; then&lt;br /&gt;
		return &#039;&#039;&lt;br /&gt;
	end&lt;br /&gt;
	size = tostring(size)&lt;br /&gt;
	if size:find(&#039;x&#039;, 1, true) then&lt;br /&gt;
		return size .. &#039;px&#039;&lt;br /&gt;
	end&lt;br /&gt;
	return size .. &#039;x&#039; .. size .. &#039;px&#039;&lt;br /&gt;
end&lt;br /&gt;
--[[&lt;br /&gt;
Returns wikitext that will display this image.&lt;br /&gt;
@return {string} Wikitext&lt;br /&gt;
@function Image:buildString&lt;br /&gt;
--]]&lt;br /&gt;
local function buildImageString(img)&lt;br /&gt;
	local filename = buildImageFilename(img)&lt;br /&gt;
	if filename == &#039;&#039; then return &#039;&#039; end&lt;br /&gt;
	return &#039;[[&#039; .. filename .. &#039;|&#039; .. buildImageSizeString(img) .. &#039;|link=&#039; .. img.link .. &#039;|alt=&#039; .. img.alt .. &#039;|class=&#039; .. img.class .. &#039;]]&#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
Creates an `Image` object with the given properties.&lt;br /&gt;
@param {table} args A table of `Image` properties that to assign to the new `Image`.&lt;br /&gt;
@see @{Image} for property documentation&lt;br /&gt;
@return {Image} The new `Image` object.&lt;br /&gt;
@constructor&lt;br /&gt;
--]]&lt;br /&gt;
local function createImage(args)&lt;br /&gt;
	local out&lt;br /&gt;
	if type(args) == &#039;table&#039; then&lt;br /&gt;
		out = TemplateData.processArgs(args, IMAGE_ARGS, {preserveDefaults=true})&lt;br /&gt;
	else&lt;br /&gt;
		out = {name = args}&lt;br /&gt;
	end&lt;br /&gt;
	-- add buildString function to image directly, not to image.nonDefaults&lt;br /&gt;
	&lt;br /&gt;
	rawset(out, &#039;buildString&#039;, buildImageString)&lt;br /&gt;
	return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- The name of the image. Used to determine filename.&lt;br /&gt;
--  @property {string} Image.name&lt;br /&gt;
&lt;br /&gt;
--- Maximum image size using wiki image syntax.&lt;br /&gt;
--  Unlike regular wiki image syntax, a single number specifies both height and width.&lt;br /&gt;
--  @property {string} Image.size&lt;br /&gt;
&lt;br /&gt;
--- Image file prefix.&lt;br /&gt;
--  @property {string} Image.prefix&lt;br /&gt;
&lt;br /&gt;
--- Appended to `prefix` if `prefix` is not empty. Defaults to a single space.&lt;br /&gt;
--  @property[opt] {string} Image.prefixSeparator&lt;br /&gt;
&lt;br /&gt;
--- Image file suffix.&lt;br /&gt;
--  @property {string} Image.suffix&lt;br /&gt;
&lt;br /&gt;
--- Prepended to `suffix` if `suffix` is not empty. Defaults to a single space.&lt;br /&gt;
--  @property {string} Image.suffixSeparator&lt;br /&gt;
&lt;br /&gt;
--- Image file extension. (Alias: `ext`.)&lt;br /&gt;
--  @property {string} Image.extension&lt;br /&gt;
&lt;br /&gt;
--- Image link. Also sets title (hover tooltip). Defaults to `name`.&lt;br /&gt;
--  @property {string} Image.link&lt;br /&gt;
&lt;br /&gt;
--- Image alt text. Defaults to `name`.&lt;br /&gt;
--  @property {string} Image.alt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--- A helper function for other modules to get icon args with a prefix from the given table.&lt;br /&gt;
--  @param {table} args A table containing icon args (and probably other args).&lt;br /&gt;
--  @param {string} prefix Prefix for keys to use when looking up entries from `args`.&lt;br /&gt;
--    If not specified, no prefix is used.&lt;br /&gt;
--  @return {table} A table containing only the extracted args, with the prefix removed from its keys.&lt;br /&gt;
function p.extractIconArgs(args, prefix)&lt;br /&gt;
	prefix = prefix or &#039;&#039;&lt;br /&gt;
	local out = TemplateData.createObjectWithDefaults()&lt;br /&gt;
	for _, config in pairs(ICON_ARGS) do&lt;br /&gt;
		out.defaults[config.name] = args.defaults[prefix .. config.name]&lt;br /&gt;
		out.nonDefaults[config.name] = args.nonDefaults[prefix .. config.name]&lt;br /&gt;
	end&lt;br /&gt;
	return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- A helper function that removes one of the given prefixes from the given string.&lt;br /&gt;
--  @param {string} str The string from which to strip a prefix&lt;br /&gt;
--  @param {table} prefixes A table whose keys are the possible prefixes to strip from `str`&lt;br /&gt;
--  @return {string} The string with the prefix removed.&lt;br /&gt;
--  @return[opt] {string} The prefix that was removed, or `nil` if no prefix was found.&lt;br /&gt;
function p.stripPrefixes(str, prefixes)&lt;br /&gt;
	for prefix, _ in pairs(prefixes) do&lt;br /&gt;
		if string.sub(str, 1, string.len(prefix)) == prefix then&lt;br /&gt;
			return string.sub(str, string.len(prefix) + 1), prefix&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return str&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
    The main entry point for other modules.&lt;br /&gt;
    Creates and returns an Image object with the given arguments.&lt;br /&gt;
    Infers `args.type` if `args.name` matches a known item/character/Light Cone.&lt;br /&gt;
    @param {table} args Table containing the arguments:&lt;br /&gt;
    @param[opt] {string} args.name The name of the image.&lt;br /&gt;
                         Used to determine file name and set the default link and alt text.&lt;br /&gt;
                         If not specified, the output `Image` will produce empty wikitext.&lt;br /&gt;
    @param[opt] {string} args.link Image link. Also sets title (hover tooltip).&lt;br /&gt;
                         Defaults to `name`.&lt;br /&gt;
    @param[opt] {string} args.extension (alias: `ext`) Image file extension.&lt;br /&gt;
                         Defaults to &#039;png&#039;.&lt;br /&gt;
    @param[opt] {string} args.type Image type. Used to determine file prefix and default file suffix.&lt;br /&gt;
                         If not specified, type will be inferred if `args.name`&lt;br /&gt;
                         is a known item; otherwise, defaults to &#039;Item&#039;.&lt;br /&gt;
    @param[opt] {string} args.suffix File suffix override.&lt;br /&gt;
    @param[opt] {string} args.size Maximum image size using wiki image syntax.&lt;br /&gt;
                         Unlike regular wiki image syntax, specifying a single number will&lt;br /&gt;
                         set both height and width.&lt;br /&gt;
    @param[opt] {string} args.alt Image alt text. Defaults to `args.name`.&lt;br /&gt;
    @param[opt] {string} args.outfit Character outfit. Only applies to character images.&lt;br /&gt;
    @param[opt] {string} prefix Prefix to use when looking up arguments in `args`.&lt;br /&gt;
    @return {Image} The image for given arguments.&lt;br /&gt;
      Use `Image:buildString()` to get the wikitext for the image.&lt;br /&gt;
    @return {string} The image type.&lt;br /&gt;
    @return {TableWithDefaults} Associated data for given item (e.g., rarity, display name).&lt;br /&gt;
--]]&lt;br /&gt;
function p.createIcon(args, prefix)&lt;br /&gt;
	if prefix then&lt;br /&gt;
		args = p.extractIconArgs(args, prefix)&lt;br /&gt;
	end&lt;br /&gt;
	args = TemplateData.processArgs(args, ICON_ARGS, {preserveDefaults=true})&lt;br /&gt;
	--local baseName, prefix = p.stripPrefixes(args.name or &#039;&#039;, FOOD_PREFIXES)&lt;br /&gt;
	-- for now, there are no items that need special prefixes&lt;br /&gt;
	local baseName = args.name or &#039;&#039;&lt;br /&gt;
	local prefix = &#039;&#039;&lt;br /&gt;
	&lt;br /&gt;
	-- determine type by checking for data&lt;br /&gt;
	local image_type, data&lt;br /&gt;
	for i, v in ipairs(ALL_DATA) do&lt;br /&gt;
		image_type = v[1]&lt;br /&gt;
		if args.type == nil or args.type == image_type then&lt;br /&gt;
			data = v[2][baseName]&lt;br /&gt;
			if (not data) then data = v[2][baseName .. &#039; (&#039; .. image_type .. &#039;)&#039;] end&lt;br /&gt;
			if data then break end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	image_type = args.type or image_type -- in case args.type isn&#039;t in ALL_DATA (e.g., Enemy, Wildlife)&lt;br /&gt;
	&lt;br /&gt;
	local image = createImage(args)&lt;br /&gt;
	image.prefix = image_type&lt;br /&gt;
    &lt;br /&gt;
    -- set defaults and load data based on type&lt;br /&gt;
    if image_type == &#039;Character&#039; or image_type == &#039;Currency Wars Character&#039; then&lt;br /&gt;
		image.prefix = &#039;Character&#039;&lt;br /&gt;
		image.defaults.suffix = &#039;Icon&#039;&lt;br /&gt;
    elseif image_type == &#039;Element&#039; then&lt;br /&gt;
		image.prefix = &#039;Type&#039;&lt;br /&gt;
	elseif image_type == &#039;Consumable&#039; then&lt;br /&gt;
		image.prefix = &#039;Item&#039;&lt;br /&gt;
	elseif image_type == &#039;Relic&#039; then&lt;br /&gt;
		image.prefix = &#039;Item&#039;&lt;br /&gt;
	elseif image_type == &#039;Profile Picture&#039; then&lt;br /&gt;
		image.prefix = &#039;Profile Picture&#039;&lt;br /&gt;
		image.link = image.name&lt;br /&gt;
		image.name = image.name:gsub(&#039; %(Profile Picture%)&#039;, &#039;&#039;)&lt;br /&gt;
	elseif image_type == &#039;Enemy&#039; or image_type == &#039;Aether Enemy&#039; then&lt;br /&gt;
		image.prefix = &#039;Icon Enemy&#039;&lt;br /&gt;
		image.link = (data and data.link) or image.name&lt;br /&gt;
		image.defaults.suffix = &#039;&#039;&lt;br /&gt;
	end&lt;br /&gt;
	return image, image_type, data&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Valaerys</name></author>
	</entry>
	<entry>
		<id>https://hna.wiki/Module:Card?diff=9223</id>
		<title>Module:Card</title>
		<link rel="alternate" type="text/html" href="https://hna.wiki/Module:Card?diff=9223"/>
		<updated>2026-07-14T22:24:23Z</updated>

		<summary type="html">&lt;p&gt;Valaerys: Created page with &amp;quot;local p = {} local lib = require(&amp;#039;Module:Feature&amp;#039;) local TemplateData = require(&amp;#039;Module:TemplateData&amp;#039;) local Icon = require(&amp;#039;Module:Icon&amp;#039;)   local RARITY_STARS = { 	--[&amp;#039;0&amp;#039;] = &amp;#039;&amp;#039;, 	--[&amp;#039;1&amp;#039;] = &amp;#039;✦&amp;#039;, 	--[&amp;#039;2&amp;#039;] = &amp;#039;✦✦&amp;#039;,notext 	--[&amp;#039;3&amp;#039;] = &amp;#039;✦✦✦&amp;#039;, 	--[&amp;#039;4&amp;#039;] = &amp;#039;✦✦✦✦&amp;#039;, 	--[&amp;#039;5&amp;#039;] = &amp;#039;✦✦✦✦✦&amp;#039; 	[&amp;#039;1&amp;#039;] = &amp;#039;alt=Rarity 1&amp;#039;, 	[&amp;#039;2&amp;#039;] = &amp;#039;alt=Rarity 2&amp;#039;, 	[&amp;#039;3&amp;#039;] = &amp;#039;[[File:Icon 3 Stars.png|x12px|link=...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {}&lt;br /&gt;
local lib = require(&#039;Module:Feature&#039;)&lt;br /&gt;
local TemplateData = require(&#039;Module:TemplateData&#039;)&lt;br /&gt;
local Icon = require(&#039;Module:Icon&#039;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local RARITY_STARS = {&lt;br /&gt;
	--[&#039;0&#039;] = &#039;&#039;,&lt;br /&gt;
	--[&#039;1&#039;] = &#039;✦&#039;,&lt;br /&gt;
	--[&#039;2&#039;] = &#039;✦✦&#039;,notext&lt;br /&gt;
	--[&#039;3&#039;] = &#039;✦✦✦&#039;,&lt;br /&gt;
	--[&#039;4&#039;] = &#039;✦✦✦✦&#039;,&lt;br /&gt;
	--[&#039;5&#039;] = &#039;✦✦✦✦✦&#039;&lt;br /&gt;
	[&#039;1&#039;] = &#039;[[File:Icon 1 Stars.png|x12px|link=|alt=Rarity 1]]&#039;,&lt;br /&gt;
	[&#039;2&#039;] = &#039;[[File:Icon 2 Stars.png|x12px|link=|alt=Rarity 2]]&#039;,&lt;br /&gt;
	[&#039;3&#039;] = &#039;[[File:Icon 3 Stars.png|x12px|link=|alt=Rarity 3]]&#039;,&lt;br /&gt;
	[&#039;4&#039;] = &#039;[[File:Icon 4 Stars.png|x12px|link=|alt=Rarity 4]]&#039;,&lt;br /&gt;
	[&#039;5&#039;] = &#039;[[File:Icon 5 Stars.png|x12px|link=|alt=Rarity 5]]&#039;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local SUPERIMPOSITION_TABLE = {&lt;br /&gt;
	[&#039;1&#039;] = { num = &#039;1&#039;, text = &#039;I&#039; },&lt;br /&gt;
	[&#039;I&#039;] = { num = &#039;1&#039;, text = &#039;I&#039; },&lt;br /&gt;
	[&#039;2&#039;] = { num = &#039;2&#039;, text = &#039;II&#039; },&lt;br /&gt;
	[&#039;II&#039;] = { num = &#039;2&#039;, text = &#039;II&#039; },&lt;br /&gt;
	[&#039;3&#039;] = { num = &#039;3&#039;, text = &#039;III&#039; },&lt;br /&gt;
	[&#039;III&#039;] = { num = &#039;3&#039;, text = &#039;III&#039; },&lt;br /&gt;
	[&#039;4&#039;] = { num = &#039;4&#039;, text = &#039;IV&#039; },&lt;br /&gt;
	[&#039;IV&#039;] = { num = &#039;4&#039;, text = &#039;IV&#039; },&lt;br /&gt;
	[&#039;5&#039;] = { num = &#039;5&#039;, text = &#039;V&#039; },&lt;br /&gt;
	[&#039;V&#039;] = { num = &#039;5&#039;, text = &#039;V&#039; },&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local PREFIX_ICONS = {&lt;br /&gt;
	[&#039;Recipe: &#039;] = {name=&#039;Recipe&#039;, type=&#039;Item&#039;}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- main template/module parameters&lt;br /&gt;
local CARD_ARGS = {&lt;br /&gt;
	{&lt;br /&gt;
		name=&#039;name&#039;, alias={1,&#039;character&#039;}, displayName=1,&lt;br /&gt;
		status=&#039;suggested&#039;,&lt;br /&gt;
		label=&#039;Name&#039;,&lt;br /&gt;
		description=&#039;The name of the image (without the prefix or extension).&#039;,&lt;br /&gt;
		default=&#039;Unknown&#039;,&lt;br /&gt;
		example={&#039;Credit&#039;, &#039;Stellar Jade&#039;, &#039;Amber&#039;},&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		name=&#039;text&#039;, alias=2, displayName=2,&lt;br /&gt;
		label=&#039;Card Text&#039;,&lt;br /&gt;
		description=&#039;The text below the image.&#039;,&lt;br /&gt;
		default=&#039;&amp;amp;mdash;&#039;,&lt;br /&gt;
		displayDefault=&#039;&amp;quot;&amp;amp;mdash;&amp;quot; for most items; same as Image Name for characters&#039;,&lt;br /&gt;
		example={&#039;100&#039;, &#039;Lv. 1&#039;, &#039;Set&#039;},&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		name=&#039;notext&#039;, type=&#039;1&#039;,&lt;br /&gt;
		label=&#039;No Text&#039;,&lt;br /&gt;
		trueDescription=&#039;remove text from bottom.&#039;,&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		name=&#039;multiline_text&#039;, type=&#039;1&#039;,&lt;br /&gt;
		label=&#039;Allow Multiple Lines of Card Text&#039;,&lt;br /&gt;
		trueDescription=&#039;allow card text to wrap to a new line if necessary.&#039;,&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		name=&#039;rarity&#039;, displayType=&#039;number&#039;,&lt;br /&gt;
		label=&#039;Card Rarity&#039;,&lt;br /&gt;
		description=&#039;The Rarity of the item. For light background, add 10. Use 0 for white version. Use multiple numbers for split rarities.&#039;,&lt;br /&gt;
		default=&#039;0&#039;,&lt;br /&gt;
		displayDefault=&#039;determined based on Image Name; &amp;quot;0&amp;quot; if unknown&#039;,&lt;br /&gt;
		example={&#039;1&#039;, &#039;2&#039;, &#039;3&#039;, &#039;4&#039;, &#039;5&#039;},&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		name=&#039;type&#039;, placeholderFor=&#039;Module:Icon&#039;,&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		name=&#039;suffix&#039;, placeholderFor=&#039;Module:Icon&#039;,&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		name=&#039;extension&#039;, placeholderFor=&#039;Module:Icon&#039;,&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		name=&#039;link&#039;, displayType=&#039;wiki-page-name&#039;,&lt;br /&gt;
		label=&#039;Card Link&#039;,&lt;br /&gt;
		description=&#039;The page to link to when image or caption text is clicked.&#039;,&lt;br /&gt;
		displayDefault=&#039;same as Image Name&#039;,&lt;br /&gt;
		defaultFrom=&#039;name&#039;,&lt;br /&gt;
		example={&#039;Credit&#039;, &#039;Virtual Particle&#039;, &#039;Trailblazer&#039;},&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		name=&#039;link_suffix&#039;,&lt;br /&gt;
		label=&#039;Page Link Suffix&#039;,&lt;br /&gt;
		description=&#039;Text to append to the Page Link. (Usually used to link to page sections.)&#039;,&lt;br /&gt;
		default=&#039;&#039;,&lt;br /&gt;
		example=&#039;#Steps&#039;,&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		name=&#039;nolink&#039;, type=&#039;1&#039;,&lt;br /&gt;
		label=&#039;No Link&#039;,&lt;br /&gt;
		trueDescription=&#039;remove default links from card image, icons, and caption.&#039;,&lt;br /&gt;
		displayDefault=&#039;&amp;quot;1&amp;quot; if Image Name is default (&amp;quot;Unknown&amp;quot;)&#039;,&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		name=&#039;icon&#039;, displayType=&#039;content&#039;,&lt;br /&gt;
		label=&#039;Icon&#039;,&lt;br /&gt;
		description=&#039;The icon at the top left of the card.&#039;,&lt;br /&gt;
		example={&#039;{{Icon/Element|Fire|25}}&#039;, &#039;[[File:Item Stellar Jade.png|25px]]&#039;},&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		name=&#039;icon_style&#039;, displayType=&#039;string&#039;,&lt;br /&gt;
		label=&#039;Icon Style&#039;,&lt;br /&gt;
		description=&#039;The custom style of the icon at the top left of the card. Omit the \&#039;\&#039; used for CSS.&#039;,&lt;br /&gt;
		example=&#039;background: red;&#039;,&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		name=&#039;icon_right&#039;, displayType=&#039;content&#039;,&lt;br /&gt;
		label=&#039;Top-Right Icon&#039;,&lt;br /&gt;
		description=&#039;Icon on the top right of the card.&#039;,&lt;br /&gt;
		example=&#039;{{Icon/Element|Fire|25}}&#039;,&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		name=&#039;icon_right_style&#039;, displayType=&#039;string&#039;,&lt;br /&gt;
		label=&#039;Top-Right Icon Style&#039;,&lt;br /&gt;
		description=&#039;The custom style of the icon at the top right of the card. Omit the \&#039;\&#039; used for CSS.&#039;,&lt;br /&gt;
		example=&#039;background: red;&#039;,&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		name=&#039;show_caption&#039;, type=&#039;1&#039;,&lt;br /&gt;
		label=&#039;Show Caption&#039;,&lt;br /&gt;
		trueDescription=&#039;show caption text below the card.&#039;,&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		name=&#039;caption&#039;, displayType=&#039;string&#039;,&lt;br /&gt;
		label=&#039;Caption Text&#039;,&lt;br /&gt;
		description=&#039;The linked caption text that shows below the card.&#039;,&lt;br /&gt;
		displayDefault=&#039;same as Name&#039;,&lt;br /&gt;
		defaultFrom=&#039;name&#039;,&lt;br /&gt;
		example={&#039;Comfort Food&#039;, &#039;Rewards&#039;},&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		name=&#039;caption_width&#039;,&lt;br /&gt;
		label=&#039;Caption Width&#039;,&lt;br /&gt;
		description=&#039;Width of the captions. Set to \&#039;auto\&#039; to automatically increase the caption width to prevent it from wrapping in the middle of words.&#039;,&lt;br /&gt;
		displayDefault=&#039;same as card width (74px, or 40px for mini cards)&#039;,&lt;br /&gt;
		example={&#039;200px&#039;, &#039;auto&#039;},&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		name=&#039;note&#039;, displayType=&#039;string&#039;,&lt;br /&gt;
		label=&#039;Caption Note&#039;,&lt;br /&gt;
		description=&#039;The unlinked caption text that shows below the linked caption text.&#039;,&lt;br /&gt;
		example=&#039;(Bonus reward)&#039;,&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		name=&#039;superimposition&#039;, alias=&#039;si&#039;, displayType=&#039;number&#039;,&lt;br /&gt;
		label=&#039;Superimposition Level&#039;,&lt;br /&gt;
		description=&#039;The superimposition level of the light cone.&#039;, --Set to \&#039;1a\&#039; to denote a light cone that cannot be superimposed.&lt;br /&gt;
		example={&#039;1&#039;, &#039;2&#039;, &#039;3&#039;, &#039;4&#039;, &#039;5&#039;}, --, &#039;1a&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		name=&#039;ascension&#039;, placeholderFor=&#039;Module:Icon&#039;,&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		name=&#039;eidolon&#039;, alias=&#039;e&#039;, displayType=&#039;number&#039;,&lt;br /&gt;
		label=&#039;Eidolon Level&#039;,&lt;br /&gt;
		description=&#039;Eidolon Level of the Character.&#039;,&lt;br /&gt;
		example={&#039;0&#039;, &#039;1&#039;, &#039;2&#039;, &#039;3&#039;, &#039;4&#039;, &#039;5&#039;, &#039;6&#039;},&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		name=&#039;weakness&#039;, alias=&#039;w&#039;, displayType=&#039;string&#039;,&lt;br /&gt;
		label=&#039;Enemy Weakness&#039;,&lt;br /&gt;
		description=&#039;List of elements the enemy is weak against&#039;,&lt;br /&gt;
		example={&#039;Quantum; Wind&#039;},&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		name=&#039;aether&#039;, displayType=&#039;string&#039;,&lt;br /&gt;
		label=&#039;Aether Type&#039;,&lt;br /&gt;
		description=&#039;Enemy\&#039;s Aether type when an Aether Spirit&#039;,&lt;br /&gt;
		example={&#039;Humanoid&#039;, &#039;Mechanical&#039;, &#039;Aberrant&#039;},&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		name=&#039;tier&#039;, displayType=&#039;string&#039;,&lt;br /&gt;
		label=&#039;Enemy Tier&#039;,&lt;br /&gt;
		description=&#039;List of elements the enemy is weak against&#039;,&lt;br /&gt;
		example={&#039;Normal&#039;, &#039;Elite&#039;, &#039;Boss&#039;, &#039;Echo of War&#039;},&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		name=&#039;stars&#039;, type=&#039;1&#039;,&lt;br /&gt;
		label=&#039;Show Item Stars&#039;,&lt;br /&gt;
		trueDescription=&#039;show the stars of the rarity of the item. (Does not work if rarity is &amp;quot;0&amp;quot; or split (e.g., &amp;quot;123&amp;quot; or &amp;quot;34&amp;quot;).)&#039;,&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		name=&#039;mini&#039;, type=&#039;1&#039;,&lt;br /&gt;
		label=&#039;Mini&#039;,&lt;br /&gt;
		trueDescription=&#039;show a smaller card. (Not all parameters apply to mini cards.)&#039;,&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		name=&#039;noprefix&#039;, type=&#039;1&#039;,&lt;br /&gt;
		label=&#039;Ignore Prefix&#039;,&lt;br /&gt;
		trueDescription=&#039;Skips any processing of prefixes (such as Recipe) for special cases.&#039;&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		name=&#039;notice&#039;, displayType=&#039;string&#039;,&lt;br /&gt;
		label=&#039;Notice Label&#039;,&lt;br /&gt;
		description=&#039;Text to display in a small box in the style of the in-game &amp;quot;New&amp;quot; notifications.&#039;,&lt;br /&gt;
		example={&#039;New&#039;,&#039;2.2&#039;,&#039;Soon&#039;}&lt;br /&gt;
	},&lt;br /&gt;
	{&lt;br /&gt;
		name=&#039;minitext&#039;, type=&#039;1&#039;,&lt;br /&gt;
		label=&#039;Allow Mini Card Text&#039;,&lt;br /&gt;
		description=&#039;Flag to allow the text param for mini cards.&#039;&lt;br /&gt;
	},&lt;br /&gt;
}&lt;br /&gt;
-- add parameters inherited from Icon for the main image, top-left icon, and equipped icon&lt;br /&gt;
Icon.addIconArgs(CARD_ARGS, &#039;&#039;, &#039;&#039;, { -- exclude args already present in CARD_ARGS or that don&#039;t apply to the main image&lt;br /&gt;
	name=false,&lt;br /&gt;
	link=false,&lt;br /&gt;
	size=false,&lt;br /&gt;
	alt=false,&lt;br /&gt;
})&lt;br /&gt;
Icon.addIconArgs(CARD_ARGS, &#039;icon_&#039;, &#039;Top-Left Icon &#039;, { -- override to add `element` alias and document automatic icons&lt;br /&gt;
	name={&lt;br /&gt;
		alias=&#039;element&#039;,&lt;br /&gt;
		description=&#039;Name of the icon to display at the top left of the card (without the prefix or extension).&#039;,&lt;br /&gt;
		displayDefault=&#039;element icon for characters; empty otherwise&#039;,&lt;br /&gt;
		example={&#039;Quantum&#039;}&lt;br /&gt;
	},&lt;br /&gt;
})&lt;br /&gt;
Icon.addIconArgs(CARD_ARGS, &#039;equipped_&#039;, &#039;Equipped &#039;, { -- overrides to add `equipped`/`e` aliases and change default size&lt;br /&gt;
	name={&lt;br /&gt;
		alias={&#039;equipped&#039;, &#039;eq&#039;},&lt;br /&gt;
		description=&#039;Name of the light cone or character to display at the top right of the card (or bottom left, if Eidolon Level is present; name does not include the prefix or extension).&#039;,&lt;br /&gt;
		example={&#039;In the Name of the World&#039;, &#039;Trailblazer&#039;}&lt;br /&gt;
	},&lt;br /&gt;
	size={default=&#039;30&#039;},&lt;br /&gt;
})&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local args = require(&#039;Module:Arguments&#039;).getArgs(frame, {&lt;br /&gt;
		parentFirst = true,&lt;br /&gt;
		wrapper = { &#039;Template:Card&#039; }&lt;br /&gt;
	})&lt;br /&gt;
	return p._main(args, frame)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- apply defaults; load and apply data (e.g., rarity, character element)&lt;br /&gt;
function p._processArgs(args)&lt;br /&gt;
	local out = TemplateData.processArgs(args, CARD_ARGS)&lt;br /&gt;
	&lt;br /&gt;
	-- set defaults that depend on other arguments&lt;br /&gt;
	out.defaults.show_caption = lib.isNotEmpty(out.nonDefaults.caption)&lt;br /&gt;
	out.defaults.nolink = out.name == out.defaults.name and lib.isEmpty(out.nonDefaults.link)&lt;br /&gt;
	&lt;br /&gt;
	-- handle deprecated caption value&lt;br /&gt;
	if tostring(out.caption) == &#039;1&#039; then&lt;br /&gt;
		out.uses_deprecated_params = true&lt;br /&gt;
		out.caption = nil&lt;br /&gt;
		out.show_caption = true&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- handle nolink&lt;br /&gt;
	out.final_link = out.nolink and &#039;&#039; or (out.link .. out.link_suffix)&lt;br /&gt;
	&lt;br /&gt;
	-- build args for main card image&lt;br /&gt;
	local mainImageArgs = Icon.extractIconArgs(out)&lt;br /&gt;
	mainImageArgs.link = out.final_link&lt;br /&gt;
	mainImageArgs.size = 74&lt;br /&gt;
	&lt;br /&gt;
	if (not args.noprefix) then&lt;br /&gt;
		-- check for prefixes in `name` that correspond to top-left icons&lt;br /&gt;
		-- note: priority of icon specification: `icon` arg &amp;gt; `icon_name` arg &amp;gt; prefix of `name` &amp;gt; character element from data&lt;br /&gt;
		local baseName, prefix = Icon.stripPrefixes(out.name, PREFIX_ICONS)&lt;br /&gt;
		if prefix then&lt;br /&gt;
			-- configure icon if none is specified by `icon_name`,&lt;br /&gt;
			-- making sure not to change `icon_type` if `icon_name` is explicitly specified&lt;br /&gt;
			if out.icon_name == out.defaults.icon_name then&lt;br /&gt;
				local prefixIcon = PREFIX_ICONS[prefix]&lt;br /&gt;
				out.icon_name = prefixIcon.name&lt;br /&gt;
				out.icon_type = prefixIcon.type&lt;br /&gt;
			end&lt;br /&gt;
			mainImageArgs.name = baseName&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- create card image and get type/data&lt;br /&gt;
	local card_type, data&lt;br /&gt;
	out.image, card_type, data = Icon.createIcon(mainImageArgs)&lt;br /&gt;
	&lt;br /&gt;
	-- set defaults based on data&lt;br /&gt;
	if data then&lt;br /&gt;
		if card_type == &#039;Character&#039; or card_type == &#039;Currency Wars Character&#039; then&lt;br /&gt;
			if out.icon_name == out.defaults.icon_name and data.element ~= &#039;Adaptive&#039; and lib.isNotEmpty(data.element) then&lt;br /&gt;
				out.icon_name = data.element&lt;br /&gt;
				out.icon_type = &#039;Icon&#039;&lt;br /&gt;
			end&lt;br /&gt;
			out.defaults.text = data.name or out.name&lt;br /&gt;
		end&lt;br /&gt;
		if card_type == &#039;Light Cone&#039; then&lt;br /&gt;
			out.icon_name = data.path&lt;br /&gt;
			out.icon_type = &#039;Icon&#039;&lt;br /&gt;
			out.icon_size = 15&lt;br /&gt;
			-- if args.mini then&lt;br /&gt;
				out.image.defaults.suffix = &#039;Icon&#039;&lt;br /&gt;
			-- else&lt;br /&gt;
			-- 	out.image.size = &#039;74x&#039;&lt;br /&gt;
			-- end&lt;br /&gt;
		end&lt;br /&gt;
		if card_type == &#039;Enemy&#039; then&lt;br /&gt;
			out.weakness = out.weakness or data.weakness&lt;br /&gt;
			out.tier = out.tier or data.tier&lt;br /&gt;
			out.final_link = (out.nolink and &#039;&#039;) or data.link or out.final_link&lt;br /&gt;
		end&lt;br /&gt;
		if card_type == &#039;Aether Enemy&#039; then&lt;br /&gt;
			out.aether = out.aether or data.aethertype&lt;br /&gt;
			out.final_link = (out.nolink and &#039;&#039;) or data.link or out.final_link&lt;br /&gt;
		end&lt;br /&gt;
		if card_type == &#039;Dice Face&#039; then&lt;br /&gt;
			out.notext = true&lt;br /&gt;
			out.final_link = &#039;#&#039; .. out.final_link&lt;br /&gt;
		end&lt;br /&gt;
		if data.title then&lt;br /&gt;
			out.defaults.caption = data.title&lt;br /&gt;
		end&lt;br /&gt;
		if data.upcoming then&lt;br /&gt;
			out.defaults.notice = data.upcoming&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	-- add top-left icon (if not specified by &#039;icon&#039; wikitext)&lt;br /&gt;
	if out.icon == out.defaults.icon then&lt;br /&gt;
		local iconImage = Icon.createIcon(out, &#039;icon_&#039;)&lt;br /&gt;
		&lt;br /&gt;
		iconImage.defaults.size = lib.ternary(out.mini, 16, 20)&lt;br /&gt;
		-- disable link if nolink is explicitly set, but icon_link is not&lt;br /&gt;
		if out.nonDefaults.nolink then&lt;br /&gt;
			iconImage.defaults.link = &#039;&#039;&lt;br /&gt;
		end&lt;br /&gt;
		out.icon = iconImage:buildString()&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- add bottom-left icon for enemy weakness&lt;br /&gt;
	if lib.isNotEmpty(out.weakness) then&lt;br /&gt;
		local elements = lib.split(out.weakness, out.weakness:find(&#039;,&#039;) and &#039;,&#039; or &#039;;&#039;)&lt;br /&gt;
		out.icon_bottom_type = &#039;Icon&#039;&lt;br /&gt;
		out.icon_bottom = &#039;&#039;&lt;br /&gt;
		for _, element in ipairs(elements) do&lt;br /&gt;
			out.icon_bottom_name = element&lt;br /&gt;
			local iconImage = Icon.createIcon(out, &#039;icon_bottom_&#039;)&lt;br /&gt;
			&lt;br /&gt;
			iconImage.defaults.size = lib.ternary(out.mini, 10, 20)&lt;br /&gt;
			iconImage.defaults.alt = &#039;Weak to &#039; .. element&lt;br /&gt;
			-- disable link if nolink is explicitly set, but icon_link is not&lt;br /&gt;
			if out.nonDefaults.nolink then&lt;br /&gt;
				iconImage.defaults.link = &#039;&#039;&lt;br /&gt;
			end&lt;br /&gt;
			out.icon_bottom = out.icon_bottom .. iconImage:buildString()&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- add bottom-left icon for enemy aether type&lt;br /&gt;
	if lib.isNotEmpty(out.aether) then&lt;br /&gt;
		out.icon_bottom_type = &#039;Type&#039;&lt;br /&gt;
		out.icon_bottom_name = out.aether&lt;br /&gt;
		&lt;br /&gt;
		local iconImage = Icon.createIcon(out, &#039;icon_bottom_&#039;)&lt;br /&gt;
		iconImage.defaults.size = lib.ternary(out.mini, 10, 20)&lt;br /&gt;
		iconImage.defaults.alt = &#039;Aether Enemy of the &#039; .. out.aether .. &#039; type&#039;&lt;br /&gt;
		-- disable link if nolink is explicitly set, but icon_link is not&lt;br /&gt;
		if out.nonDefaults.nolink then iconImage.defaults.link = &#039;&#039; end&lt;br /&gt;
		&lt;br /&gt;
		out.icon_bottom = iconImage:buildString()&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- add bottom-left icon currency wars bond(s)&lt;br /&gt;
	if lib.isNotEmpty(out.bonds) then&lt;br /&gt;
		local bonds = lib.split(out.bonds, &#039;;&#039;)&lt;br /&gt;
		out.icon_bottom_type = &#039;Bond&#039;&lt;br /&gt;
		out.icon_bottom = &#039;&#039;&lt;br /&gt;
		out.icon_bottom_suffix = &#039;Icon&#039;&lt;br /&gt;
		out.icon_bottom_class = &#039;diamond-icon diamond-icon-morepadding&#039;&lt;br /&gt;
		for _, bond in ipairs(bonds) do&lt;br /&gt;
			out.icon_bottom_name = bond&lt;br /&gt;
			local iconImage = Icon.createIcon(out, &#039;icon_bottom_&#039;)&lt;br /&gt;
			&lt;br /&gt;
			iconImage.defaults.size = lib.ternary(out.mini, 7, 15)&lt;br /&gt;
			iconImage.defaults.alt = &#039;Bond: &#039; .. bond&lt;br /&gt;
			-- disable link if nolink is explicitly set, but icon_link is not&lt;br /&gt;
			if out.nonDefaults.nolink then&lt;br /&gt;
				iconImage.defaults.link = &#039;&#039;&lt;br /&gt;
			else&lt;br /&gt;
				iconImage.defaults.link = &#039;Currency Wars: Zero-Sum Game/Bonds#&#039; .. bond&lt;br /&gt;
			end&lt;br /&gt;
			out.icon_bottom = out.icon_bottom .. iconImage:buildString()&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
    -- add enemy danger icon&lt;br /&gt;
	if card_type == &#039;Enemy&#039; and lib.isNotEmpty(out.tier) and out.tier ~= &#039;Normal&#039; then&lt;br /&gt;
        out.icon_right = &#039;[[File:Icon &#039; .. out.tier .. &#039; Enemy.png|25x25px|link=|alt=&#039; .. out.tier .. &#039; Enemy]]&#039;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Currency Wars on/off-field &lt;br /&gt;
	if card_type == &#039;Currency Wars Character&#039; and lib.isNotEmpty(out.fieldposition) then&lt;br /&gt;
		local posIcons = {}&lt;br /&gt;
		for pos in lib.gsplit(out.fieldposition, &#039;;&#039;, {removeEmpty=true}) do&lt;br /&gt;
        	table.insert(posIcons, &#039;[[File:Icon &#039; .. pos .. &#039; White.png|20x20px|link=|alt=&#039; .. pos .. &#039;|class=diamond-icon]]&#039;)&lt;br /&gt;
		end&lt;br /&gt;
		out.icon_right = table.concat(posIcons, &#039;&#039;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- add equipped icon&lt;br /&gt;
	if lib.isNotEmpty(out.equipped_name) then&lt;br /&gt;
		local equippedImage, equippedType = Icon.createIcon(out, &#039;equipped_&#039;)&lt;br /&gt;
		equippedImage.defaults.suffix = &#039;Icon&#039;&lt;br /&gt;
		if equippedType == &#039;Character&#039; then&lt;br /&gt;
			equippedImage.defaults.size = 30&lt;br /&gt;
			equippedImage.defaults.alt = &#039;Equipped on &#039; .. equippedImage.alt&lt;br /&gt;
		else&lt;br /&gt;
			equippedImage.defaults.alt = &#039;Equipped with &#039; .. equippedImage.alt&lt;br /&gt;
		end&lt;br /&gt;
		if out.nonDefaults.nolink then&lt;br /&gt;
			equippedImage.defaults.link = &#039;&#039;&lt;br /&gt;
		end&lt;br /&gt;
		out.equipped = equippedImage:buildString()&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return out, data&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function setCaptionWidth(node, width)&lt;br /&gt;
	if width == &#039;auto&#039; then&lt;br /&gt;
		node:addClass(&#039;auto-width&#039;)&lt;br /&gt;
	else&lt;br /&gt;
		node:css(&#039;width&#039;, width)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Creates and returns a card element from *processed* card args.&lt;br /&gt;
function p._createCard(a)&lt;br /&gt;
	local node_container = mw.html.create(&#039;div&#039;):addClass(&#039;card-container&#039;)&lt;br /&gt;
	&lt;br /&gt;
	if a.mini then&lt;br /&gt;
		node_container:addClass(&#039;mini-card&#039;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- create two wrapper divs for the main card body&lt;br /&gt;
	-- (required for CSS positioning and rounded corners, respectively)&lt;br /&gt;
	local node_card = node_container:tag(&#039;span&#039;)&lt;br /&gt;
		:addClass(&#039;card-wrapper&#039;)&lt;br /&gt;
		:tag(&#039;span&#039;)&lt;br /&gt;
			:addClass(&#039;card-body&#039;)&lt;br /&gt;
			:addClass(&#039;card-&#039; .. a.rarity)&lt;br /&gt;
	&lt;br /&gt;
	if lib.isNotEmpty(a.icon) then&lt;br /&gt;
		node_card:tag(&#039;span&#039;)&lt;br /&gt;
			:addClass(&#039;card-icon&#039;)&lt;br /&gt;
			:cssText(a.icon_style)&lt;br /&gt;
			:wikitext(a.icon)&lt;br /&gt;
	end&lt;br /&gt;
	if lib.isNotEmpty(a.icon_bottom) then&lt;br /&gt;
		node_card:tag(&#039;span&#039;)&lt;br /&gt;
			:addClass(&#039;card-icon-bottom&#039;)&lt;br /&gt;
			:cssText(a.icon_bottom_style)&lt;br /&gt;
			:wikitext(a.icon_bottom)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local node_image = node_card:tag(&#039;span&#039;)&lt;br /&gt;
		:addClass(&#039;card-image-container&#039;)&lt;br /&gt;
	node_image:tag(&#039;span&#039;)&lt;br /&gt;
		:wikitext(a.image:buildString())&lt;br /&gt;
		&lt;br /&gt;
	if not a.mini then&lt;br /&gt;
		if a.stars then&lt;br /&gt;
			local starsImage = RARITY_STARS[a.rarity]&lt;br /&gt;
			if starsImage then&lt;br /&gt;
				node_card:tag(&#039;span&#039;)&lt;br /&gt;
					:addClass(&#039;card-stars&#039;)&lt;br /&gt;
					:addClass(&#039;star-&#039; .. a.rarity)&lt;br /&gt;
					:tag(&#039;span&#039;)&lt;br /&gt;
						:wikitext(starsImage)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if lib.isNotEmpty(a.icon_right) then&lt;br /&gt;
			node_card:tag(&#039;span&#039;)&lt;br /&gt;
				:addClass(&#039;card-icon-right&#039;)&lt;br /&gt;
				:cssText(a.icon_right_style)&lt;br /&gt;
				:wikitext(a.icon_right)&lt;br /&gt;
		end&lt;br /&gt;
		if lib.isNotEmpty(a.equipped) then&lt;br /&gt;
			node_card:tag(&#039;span&#039;)&lt;br /&gt;
				:addClass(&#039;card-equipped&#039;)&lt;br /&gt;
				:wikitext(a.equipped)&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		local si_cell = nil&lt;br /&gt;
		if lib.isNotEmpty(a.superimposition) then si_cell = SUPERIMPOSITION_TABLE[a.superimposition] end&lt;br /&gt;
		if si_cell ~= nil then&lt;br /&gt;
			node_card:tag(&#039;span&#039;)&lt;br /&gt;
				:addClass(&#039;card-superimposition&#039;)&lt;br /&gt;
				:addClass(&#039;superimposition-&#039; .. si_cell.num)&lt;br /&gt;
				:wikitext(si_cell.text)&lt;br /&gt;
		end&lt;br /&gt;
		if lib.isNotEmpty(a.eidolon) then&lt;br /&gt;
			node_card:tag(&#039;span&#039;)&lt;br /&gt;
				:addClass(&#039;card-eidolon&#039;)&lt;br /&gt;
				:wikitext(&#039; E&#039;, a.eidolon)&lt;br /&gt;
			node_card:addClass(&#039;card-with-eidolon&#039;)&lt;br /&gt;
		end&lt;br /&gt;
	&lt;br /&gt;
		if (lib.isNotEmpty(a.notice)) then&lt;br /&gt;
			node_card:tag(&#039;span&#039;)&lt;br /&gt;
				:addClass(&#039;card-notice-label&#039;)&lt;br /&gt;
				:wikitext(a.notice)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
		&lt;br /&gt;
	if not a.notext and (not a.mini or a.minitext) then&lt;br /&gt;
		local node_text = node_card:tag(&#039;span&#039;)&lt;br /&gt;
			:addClass(&#039;card-text&#039;)&lt;br /&gt;
			:addClass(&#039;card-font&#039;)&lt;br /&gt;
			:wikitext(&#039; &#039;, a.text)&lt;br /&gt;
		if a.multiline_text then&lt;br /&gt;
			node_text:addClass(&#039;multi-line&#039;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if a.show_caption and lib.isNotEmpty(a.caption) then&lt;br /&gt;
		local node_caption = node_container:tag(&#039;span&#039;)&lt;br /&gt;
			:addClass(&#039;card-caption&#039;)&lt;br /&gt;
			:wikitext(&#039; &#039;, a.nolink and a.caption or (&#039;[[&#039; .. a.final_link .. &#039;|&#039; .. a.caption .. &#039;]]&#039;))&lt;br /&gt;
		setCaptionWidth(node_caption, a.caption_width)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if lib.isNotEmpty(a.note) then&lt;br /&gt;
		local node_note = node_container:tag(&#039;span&#039;)&lt;br /&gt;
			:addClass(&#039;card-caption&#039;)&lt;br /&gt;
			:wikitext(a.note)&lt;br /&gt;
		setCaptionWidth(node_note, a.caption_width)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if a.uses_deprecated_params then&lt;br /&gt;
		node_container:wikitext(&#039;[[Category:Pages Using Deprecated Template Parameters]]&#039;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return node_container&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Processes arguments and returns a corresponding Card element.&lt;br /&gt;
function p._main(args, frame)&lt;br /&gt;
	local a = p._processArgs(args)&lt;br /&gt;
	&lt;br /&gt;
	return p._createCard(a)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.templateData(frame)&lt;br /&gt;
	return TemplateData.templateData(CARD_ARGS, {&lt;br /&gt;
		description=&#039;This template is used to create an item display that is similar to the items in the Inventory in-game. Text can be shown below the item\&#039;s image, background and stars can match the rarity, superimposition, icons, and set can be added.\n\nIf the image name matches an existing Item, then the rarity will automatically be set.\n\nIf the image name matches an existing Character of Light Cone, then the format will automatically change to match that type item.&#039;,&lt;br /&gt;
		format=&#039;inline&#039;&lt;br /&gt;
	}, frame)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.syntax(frame)&lt;br /&gt;
	return TemplateData.syntax(CARD_ARGS, frame)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Valaerys</name></author>
	</entry>
	<entry>
		<id>https://hna.wiki/Template:Card?diff=9221</id>
		<title>Template:Card</title>
		<link rel="alternate" type="text/html" href="https://hna.wiki/Template:Card?diff=9221"/>
		<updated>2026-07-14T22:19:13Z</updated>

		<summary type="html">&lt;p&gt;Valaerys: Created page with &amp;quot;&amp;lt;includeonly&amp;gt;{{#invoke:Card|main}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;{{Documentation|type=Image}}&amp;lt;/noinclude&amp;gt;&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{#invoke:Card|main}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;{{Documentation|type=Image}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Valaerys</name></author>
	</entry>
	<entry>
		<id>https://hna.wiki/Template:Card_List/doc?diff=9220</id>
		<title>Template:Card List/doc</title>
		<link rel="alternate" type="text/html" href="https://hna.wiki/Template:Card_List/doc?diff=9220"/>
		<updated>2026-07-14T22:18:32Z</updated>

		<summary type="html">&lt;p&gt;Valaerys: Created page with &amp;quot;{{Documentation/Header}} {{High Risk|pagetype=Main}} {{Lua|Card List}} Creates a list of {{T|Card}}.  ==Syntax== * {{F|1}} &amp;amp;mdash; List of items. ** {{F|*((amount))}} &amp;amp;mdash; Indicate amount exclusive to the item. ** {{F|/((note))}} &amp;amp;mdash; Indicate note exclusive to the item. ** {{F|1={ ((param1)) = ((value1)) $ ((param2)) = ((value2)) $ ((value 3)) } }} &amp;amp;mdash; indicate parameters exclusive to the item, allows unnamed parameters. * {{F|amount}} &amp;amp;mdash; Default amount o...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Documentation/Header}}&lt;br /&gt;
{{High Risk|pagetype=Main}}&lt;br /&gt;
{{Lua|Card List}}&lt;br /&gt;
Creates a list of {{T|Card}}.&lt;br /&gt;
&lt;br /&gt;
==Syntax==&lt;br /&gt;
* {{F|1}} &amp;amp;mdash; List of items.&lt;br /&gt;
** {{F|*((amount))}} &amp;amp;mdash; Indicate amount exclusive to the item.&lt;br /&gt;
** {{F|/((note))}} &amp;amp;mdash; Indicate note exclusive to the item.&lt;br /&gt;
** {{F|1={ ((param1)) = ((value1)) $ ((param2)) = ((value2)) $ ((value 3)) } }} &amp;amp;mdash; indicate parameters exclusive to the item, allows unnamed parameters.&lt;br /&gt;
* {{F|amount}} &amp;amp;mdash; Default amount of items if not stated. Default {{F|&amp;amp;mdash;|nw=1}}.&lt;br /&gt;
* {{F|delim}} &amp;amp;mdash; Delimiter of the list in {{F|1}}. Default {{F|;}}.&lt;br /&gt;
* {{F|amount_delim}} &amp;amp;mdash; Delimiter of amount in {{F|1}}. Default {{F|*}}.&lt;br /&gt;
* {{F|note_delim}} &amp;amp;mdash; Delimiter of the notes in {{F|1}}. Default {{F|/}}.&lt;br /&gt;
* {{F|param_delim}} &amp;amp;mdash; Delimiter of the parameters in {{F|1}}. Default {{F|$}}.&lt;br /&gt;
* {{F|autosort}} &amp;amp;mdash; Boolean to automatically sort the cards as they would appear in-game. Default {{F|0}}.&lt;br /&gt;
* The following arguments of {{T|Card}} can be set to apply to all items by including them as normal parameters.&lt;br /&gt;
** {{F|text}}&lt;br /&gt;
** {{F|caption}}&lt;br /&gt;
** {{F|show_caption}}&lt;br /&gt;
** {{F|caption_width}}&lt;br /&gt;
** {{F|stars}}&lt;br /&gt;
** {{F|type}}&lt;br /&gt;
** {{F|set}}&lt;br /&gt;
** {{F|mini}}&lt;br /&gt;
** {{F|element}}&lt;br /&gt;
** {{F|link}}&lt;br /&gt;
** {{F|nolink}}&lt;br /&gt;
** {{F|path}}&lt;br /&gt;
** {{F|multiline_text}}&lt;br /&gt;
** {{F|suffix}}&lt;br /&gt;
** {{F|notext}}&lt;br /&gt;
&lt;br /&gt;
==Examples==&lt;br /&gt;
{{T|Card List|Popsicle; Lucky Star; Genius Lollipop|p2=show_caption=1|_Ybr_=1}}&amp;lt;br /&amp;gt;&lt;br /&gt;
{{T|Card List|Aspect Gems; Azure Mood; Ramen Cup|_Ybr_=1}}&amp;lt;br /&amp;gt;&lt;br /&gt;
{{T|Card List|_Ybr_=1|block=1&lt;br /&gt;
|p1=delim=;&lt;br /&gt;
|p2=show_caption=1&lt;br /&gt;
|p3=1=Sopot/Drink?;&lt;br /&gt;
{ name = Lucky Star $ link = Food $ show_caption = 1 };&lt;br /&gt;
Mighty Pork Sausages*3{ note = Not Food }&lt;br /&gt;
}}&amp;lt;br /&amp;gt;&lt;br /&gt;
{{T|Card List|p1=Ancient Horn of the Sea*1;;; Cake*5;;; Burger*3;;; Classic Milk Tea*10|p2=delim=;;;|p3=autosort=1|_Ybr_=1}}&lt;br /&gt;
&lt;br /&gt;
==Template Data==&lt;br /&gt;
&amp;lt;templatedata&amp;gt;{&lt;br /&gt;
	&amp;quot;params&amp;quot;: {&lt;br /&gt;
		&amp;quot;1&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Input List&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;\&amp;quot;delim\&amp;quot; delimited list of items. Within each item, delimited by \&amp;quot;amount_delim\&amp;quot;, \&amp;quot;note_delim\&amp;quot;, and \&amp;quot;param_delim\&amp;quot;.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: true&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;amount&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Default Amount&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Default amount of items if not stated.&amp;quot;,&lt;br /&gt;
			&amp;quot;example&amp;quot;: &amp;quot;0&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
			&amp;quot;default&amp;quot;: &amp;quot;—&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;delim&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Input Delimiter&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Character(s) to split input items by.&amp;quot;,&lt;br /&gt;
			&amp;quot;example&amp;quot;: &amp;quot;;;;&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;default&amp;quot;: &amp;quot;;&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;amount_delim&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Amount Delimiter&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Character(s) to separate item name from amount.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;default&amp;quot;: &amp;quot;*&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;note_delim&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Note Delimiter&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Character(s) to separate item from note.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;default&amp;quot;: &amp;quot;/&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;param_delim&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Parameter Delimiter&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Character(s) to split item from Card parameters.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;default&amp;quot;: &amp;quot;$&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;autosort&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Auto-Sort&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Automatically sorts the cards as they would appear in-game, based on rarity and ID. Does not work for certain card types, such as Enemy.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	&amp;quot;format&amp;quot;: &amp;quot;inline&amp;quot;,&lt;br /&gt;
	&amp;quot;description&amp;quot;: &amp;quot;Creates a list of {{Card}}.&amp;quot;,&lt;br /&gt;
	&amp;quot;paramOrder&amp;quot;: [&lt;br /&gt;
		&amp;quot;1&amp;quot;,&lt;br /&gt;
		&amp;quot;amount&amp;quot;,&lt;br /&gt;
		&amp;quot;delim&amp;quot;,&lt;br /&gt;
		&amp;quot;amount_delim&amp;quot;,&lt;br /&gt;
		&amp;quot;note_delim&amp;quot;,&lt;br /&gt;
		&amp;quot;param_delim&amp;quot;,&lt;br /&gt;
		&amp;quot;autosort&amp;quot;&lt;br /&gt;
	]&lt;br /&gt;
}&amp;lt;/templatedata&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Valaerys</name></author>
	</entry>
	<entry>
		<id>https://hna.wiki/Template:DIcon?diff=9216</id>
		<title>Template:DIcon</title>
		<link rel="alternate" type="text/html" href="https://hna.wiki/Template:DIcon?diff=9216"/>
		<updated>2026-07-14T21:51:16Z</updated>

		<summary type="html">&lt;p&gt;Valaerys: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;[[File:Dialogue {{{1|Talk}}} Icon.png|x20px|link=]]&amp;lt;!--&lt;br /&gt;
--&amp;gt;&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;{{Documentation|type=Image;Transcription|content=&lt;br /&gt;
==Syntax==&lt;br /&gt;
{{T|DIcon|v1=option}}&lt;br /&gt;
&lt;br /&gt;
Dialogue icons, defaults to {{F|Talk}}. Uses {{F|File:Dialogue ((option)) Icon.png}}.&lt;br /&gt;
==Examples==&lt;br /&gt;
* {{T|DIcon|_Y_=1}}&lt;br /&gt;
* {{T|DIcon|Talk|_Y_=1}}&lt;br /&gt;
* {{T|DIcon|Exit|_Y_=1}}&lt;br /&gt;
* {{T|DIcon|Back|_Y_=1}}&lt;br /&gt;
}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Valaerys</name></author>
	</entry>
	<entry>
		<id>https://hna.wiki/0?diff=9215</id>
		<title>0</title>
		<link rel="alternate" type="text/html" href="https://hna.wiki/0?diff=9215"/>
		<updated>2026-07-14T21:39:15Z</updated>

		<summary type="html">&lt;p&gt;Valaerys: /* Dialogue */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Beta|0.3.0}}&lt;br /&gt;
{{Stub|Dialogue is quest-dialogue, or NPC dialogue?, Dialogue}}&lt;br /&gt;
{{Character Infobox&lt;br /&gt;
&amp;lt;!--Basic Info--&amp;gt;&lt;br /&gt;
|name           = &lt;br /&gt;
|title          = Planestrider &lt;br /&gt;
|title2         = &lt;br /&gt;
|image          = NPC 0.png&lt;br /&gt;
|type           = NPC&lt;br /&gt;
|rarity         = &lt;br /&gt;
|animasterType  = &lt;br /&gt;
|otherNames     = &lt;br /&gt;
|species        = &lt;br /&gt;
|faction        = &lt;br /&gt;
|originalIP     = &lt;br /&gt;
|relatives      = &lt;br /&gt;
&amp;lt;!-- Voice Actors --&amp;gt;&lt;br /&gt;
|vaEN           = &lt;br /&gt;
|vaCN           = &lt;br /&gt;
|vaJP           = &lt;br /&gt;
|vaKR           = &lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;0&#039;&#039;&#039; is an [[NPC]] in &#039;&#039;[[Honkai: Nexus Anima]]&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Profile==&lt;br /&gt;
&#039;&#039;(To be added.)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Dialogue==&lt;br /&gt;
{{Dialogue Start}}&lt;br /&gt;
:&#039;&#039;A shadowy figure stands at the second-floor corner &amp;amp;mdash; present yet otherworldly, as if he&#039;s a projection from a distant world, materialized through the wall of planes. He ignores your presence, yet as you pass, he nods toward the spot where you once stood and speaks.&#039;&#039;&lt;br /&gt;
:&#039;&#039;&#039;0:&#039;&#039;&#039; You&#039;re back, {{Protagonist}}. &#039;&#039;He looks at you sorrowfully&#039;&#039;. [[Apeiron]] gave you the power of [[Infinity]]? Ah, I see her amulet. Is this what you wanted? To change the universe again and again, searching for another possibility? &#039;&#039;He shakes his head.&#039;&#039; Such things are not what humans should do.&lt;br /&gt;
:&#039;&#039;&#039;0:&#039;&#039;&#039; But you&#039;re different. You are the [[World-Ender]], the Reconstructor of Realms... the Sundering Incarnate. &#039;&#039;0 nods at you&#039;&#039;{{sic}} I can tell, your questions are many. Speak, and mayhaps I can answer a few.&lt;br /&gt;
;You uncovered new clues about past and present lives.&amp;lt;!--Quest Notice--&amp;gt;&lt;br /&gt;
:{{DIcon|Talk}} How do you know my name?&lt;br /&gt;
::&#039;&#039;&#039;0:&#039;&#039;&#039; Oh, but do I? &#039;&#039;He smiles,&#039;&#039; that isn&#039;t your true name, merely what you&#039;re called now. Only three know your real name. &#039;&#039;0 shakes his head sorrowfully.&#039;&#039; And I am not among them.&lt;br /&gt;
::&#039;&#039;&#039;0:&#039;&#039;&#039; &#039;&#039;With that, 0 takes a single step toward you. For a split second, you have a strange feeling. It is as though his body has become solid, incredibly real, but in an instant, the fleeting feeling has fled. He steps back, turning ethereal once more.&#039;&#039;&lt;br /&gt;
:{{DIcon|Talk}} 0? Weird name.&lt;br /&gt;
::{{tx}}&lt;br /&gt;
:{{DIcon|Exit}} Definitely not talking to someone named 0. Buh-bye.&lt;br /&gt;
::{{tx}}&lt;br /&gt;
:&#039;&#039;&#039;0:&#039;&#039;&#039; I didn&#039;t plan to meet you here, but the [[Nexus]] wills it. World-Ender Reconstructor of Realms... Sundering Incarnate. &#039;&#039;He stares at you, and one eye holds the past, and the other the present.&#039;&#039; I can tell, your questions are many. Speak, and mayhaps I can answer a few.&lt;br /&gt;
:{{DIcon|Talk}} What are all those titles you gave me? Who am I?&lt;br /&gt;
::&#039;&#039;&#039;0:&#039;&#039;&#039; Oh, &#039;&#039;0 repeats himself.&#039;&#039; the{{sic}} World-Ender, Reconstructor of Realms, Sundering Incarnate &amp;amp;mdash; these are all names people once gave the old you, the one who destroyed the world and remade it once more, shattering a single perfect universe into 81 [[Plane]]s.&lt;br /&gt;
:;You uncovered new clues about past and present lives.&amp;lt;!--Quest Notice--&amp;gt;&lt;br /&gt;
::&#039;&#039;&#039;0:&#039;&#039;&#039; As for who you are? That depends. Will you claim it or discard the past? The choice is yours. &#039;&#039;His laughter echoes.&#039;&#039; You cannot force the world to accept your choice, but mayhaps neither do you don&#039;t require their approval.&lt;br /&gt;
:;(Return to option selection)&lt;br /&gt;
:{{DIcon|Talk}} Why are you called 0? Weird name.&lt;br /&gt;
::&#039;&#039;&#039;0:&#039;&#039;&#039; 0 is not my name, merely a way of putting things to allow you to understand and accept. I go by different names in different Planes, to make it easier for others to label me.&lt;br /&gt;
:;(Return to option selection)&lt;br /&gt;
:{{DIcon|Talk}} What should I do? Does [[Sir Champion]] have the answers I seek?&lt;br /&gt;
:;You uncovered new clues about past and present lives.&amp;lt;!--Quest Notice--&amp;gt;&lt;br /&gt;
::&#039;&#039;&#039;0:&#039;&#039;&#039; Continue moving forward. The answers you seek were shattered like the world itself, the shards scattered across the Planes. Sir Champion holds one of the pieces. As for whether you get it, that depends on the choices you make.&lt;br /&gt;
:;(Return to option selection)&lt;br /&gt;
:{{DIcon|Talk}} How is it you have the answers? Who are you?&lt;br /&gt;
::&#039;&#039;&#039;0:&#039;&#039;&#039; As I said: I am 0. It&#039;s not my name, but it is me &amp;amp;mdash; all of me. I am the circle, the beginning and the end; I am the period, I am perfection; I am the number that cannot be divided by, the default value of all variables; I am the edge of Infinity...&lt;br /&gt;
::&#039;&#039;&#039;0:&#039;&#039;&#039; I am a meaningless riddle. &#039;&#039;He flashes a mysterious smile.&#039;&#039; You don&#039;t need to understand 0.&lt;br /&gt;
:;(Return to option selection)&lt;br /&gt;
:{{DIcon|Talk}} I want to know more about the world. What can you tell me?&lt;br /&gt;
::&#039;&#039;&#039;0:&#039;&#039;&#039; And that is why I&#039;m here. &#039;&#039;0 nods with a smile.&#039;&#039; What do you wish to learn of? The Planes? The [[Sovereign]]s? The [[Novarch]]s? Or perhaps that golden, resplendent [[Old World]], now already torn to pieces by [[the Sundering]]?&lt;br /&gt;
::{{DIcon|Talk}} I want to know more about the Planes.&lt;br /&gt;
:::&#039;&#039;&#039;0:&#039;&#039;&#039; The eighty-one Planes! A fantastical place where imagination runs wild! Among them are Planes vast as the [[Material Lip]], and others confines small and cramped as the [[Trough of Dust]]. What do you wish to know?&lt;br /&gt;
:::{{DIcon|Talk}} Tell me about the Material Lip.&lt;br /&gt;
::::&#039;&#039;&#039;0:&#039;&#039;&#039; The Material Lip. It is the Plane that represents the Aspect of [[Reality]]. Even among the eighty-one Planes, its size is quite considerable. The Plane was the least affected by the Sundering of the [[Aspect]]s, and many other Aspects remain close to it. This proximity fosters complexity, while shielding it from interference by the more extreme Aspects.&lt;br /&gt;
::::&#039;&#039;&#039;0:&#039;&#039;&#039; There are nine continents on the Plane of Reality. The first, [[Karkacia]], earned the moniker &amp;quot;Material Lip&amp;quot; due to the massive rift within the mountain ranges that span the continent. Legends say the canyon&#039;s depths extend to the center of the [[New World]], but none of those brave enough to descend have ever returned.&lt;br /&gt;
::::&#039;&#039;&#039;0:&#039;&#039;&#039; The town of [[Iia]], where you are now, is in [[Lusciell]], the second continent. It is primarily known for having one of the Arenas that hosts the [[Grand Championship]].&lt;br /&gt;
:::;(Return to option selection)&lt;br /&gt;
:::{{DIcon|Talk}} The Illusion Plane, the one of my confinement.&lt;br /&gt;
::::&#039;&#039;&#039;0:&#039;&#039;&#039; That&#039;s [[the Lotus Realm]], the Plane that represents the Aspect of [[Illusion]]. None know what it really looks like, for those who enter become shrouded by the mirage of Illusion. Every time someone enters the Lotus Realm, a mirage lotus blooms, and upon their departure, the flower wilts.&lt;br /&gt;
:::;(Return to option selection)&lt;br /&gt;
:::{{DIcon|Talk}} Which Planes should I go to?&lt;br /&gt;
::::&#039;&#039;&#039;0:&#039;&#039;&#039; &#039;&#039;0 gives you a profound look.&#039;&#039; Go to the Planes of [[Plane of Order|Order]] and [[Plane of Death|Death]]. &#039;&#039;He proclaims.&#039;&#039; Two old friends await you there, and they will be most surprised to see you. However, that does not mean this is a path you must walk.&lt;br /&gt;
:::;(Return to option selection)&lt;br /&gt;
:::{{DIcon|Talk}} Which Planes should I avoid?&lt;br /&gt;
::::&#039;&#039;&#039;0:&#039;&#039;&#039; Many Planes, like the Lotus Realm, are dangerous. Should you carelessly step in, you will be deceived by Illusion and escape will be most difficult. Planes such as those of [[Chaos]], [[Evil]], and [[Death]] should not be entered recklessly, for to do so is to invite death.&lt;br /&gt;
:::;(Return to option selection)&lt;br /&gt;
:::{{DIcon|Talk}} Which Planes left the deepest impression on you?&lt;br /&gt;
::::&#039;&#039;&#039;0:&#039;&#039;&#039; I have traversed many worlds, but I have yet to set foot in every Plane. Among those I have visited, [[Pontus]] is the most majestic. An untamed ocean, where Life grows without limit. [[The Changelands]], true to their name, Change from one moment to the next. The path you tread on but a moment before can become a babbling brook in but the blink of an eye, lapping about your ankles...&lt;br /&gt;
::::&#039;&#039;&#039;0:&#039;&#039;&#039; [[The Peak]] rises high above the clouds, and the [[Trail of Trials]] never ends. Millions of voices compose a song in the [[Hullabaloo]], while the crystals in [[Sahaloka]] reflect the memories of countless lives... Yes, I&#039;ve been there, to all of them...&lt;br /&gt;
::::&#039;&#039;&#039;0:&#039;&#039;&#039; I&#039;ve been to [[Escherfold]], where nothing you see makes an iota of sense. I&#039;ve been to [[Snuggycrib]], where residents sleep on soft, white blankets and dream as though they were infants. I&#039;ve also been to [[Cornucopia]] and walked [[the Preta Path]]... Which Planes left an impression on me, you ask?&lt;br /&gt;
::::&#039;&#039;&#039;0:&#039;&#039;&#039; ...All of them. They are wondrous landscapes that the people of the Old World could never have even dreamt of in their wildest dreams.&lt;br /&gt;
:::;(Return to option selection)&lt;br /&gt;
:::{{DIcon|Back}} I want to ask about something else...&lt;br /&gt;
:::;(Return to previous option selection)&lt;br /&gt;
::{{DIcon|Talk}} I want to know more about the Sovereigns.&lt;br /&gt;
:::&#039;&#039;&#039;0:&#039;&#039;&#039; Ah, the once-rulers of the Aspects, the human demigods! &#039;&#039;0&#039;s voice is full of sorrow.&#039;&#039; It&#039;s a shame that they&#039;ve faded into obscurity, their glory long faded. What do you wish to know?&lt;br /&gt;
:::{{DIcon|Talk}} Which are the Sovereigns with a connection to me?&lt;br /&gt;
::::&#039;&#039;&#039;0:&#039;&#039;&#039; *sigh* As the World-Ender and Reconstructor of Realms... Which Sovereign would have no connection to one like you? [[Victus]], [[Amstradath]], [[Bashirdo]], the [[Vowbinder Crone]], and [[Apeiron]]... All of these illustrious names were once linked to you.&lt;br /&gt;
::::&#039;&#039;&#039;0:&#039;&#039;&#039; However, among the Sovereigns, some were exceptionally close to you. &#039;&#039;0 lets out a long sigh.&#039;&#039; [[Darsea]], [[Malheur]], and [[Parayaya, the Sovereign of Love and Hate|Parayaya]]... They were by your side day and night. &#039;&#039;0 closes his eyes.&#039;&#039; And they paid for it most dearly.&lt;br /&gt;
:::;(Return to option selection)&lt;br /&gt;
:::{{DIcon|Talk}} Who is the most powerful Sovereign?&lt;br /&gt;
::::&#039;&#039;&#039;0:&#039;&#039;&#039; Who is the most powerful is a difficult question indeed, for each Sovereign had their strengths. &#039;&#039;0 contemplates for a moment.&#039;&#039; Interestingly enough, those in the Old World quite enjoyed discussing this very topic. The people then thought that Victus of [[Order]] and Chaos and Amstradath of [[Life]] and Death were the most powerful, with [[Kafka]] of [[Strength]] and [[Weakness]] and [[Big Boss Daddy]] of Profit and Loss close behind.&lt;br /&gt;
::::&#039;&#039;&#039;0:&#039;&#039;&#039; When it came to individual strength, Victus and [[Qing Gang]] of [[Good]] and Evil were considered the most powerful. Some proposed Sir Champion of [[Cooperation]] and [[Competition]] and [[Masked Hero]] of [[Courage]] and [[Cowardice]] as well.&lt;br /&gt;
::::&#039;&#039;&#039;0:&#039;&#039;&#039; All enjoy debating who&#039;s the best, and the harder the answer is to prove, the more fascinating the conversation becomes. &#039;&#039;0 spreads his hands, which are completely empty.&#039;&#039; I do hope you understand that now that the Sovereigns are gone, discussions of who&#039;s the most powerful are now little more than rustic tales.&lt;br /&gt;
:::;(Return to option selection)&lt;br /&gt;
:::{{DIcon|Talk}} Which Sovereigns have gone missing?&lt;br /&gt;
::::&#039;&#039;&#039;0:&#039;&#039;&#039; After the Sundering, many Sovereigns simply vanished. Qing Gang of Good and Evil, [[Kumyo Kyo]] of [[Reality]] and Illusion, Kafka of Strength and Weakness, [[Lestrange]] of [[Joy]] and [[Sorrow]]... &#039;&#039;0 ticks off the names.&#039;&#039; More and more join this list. It is far easier to count those still among us.&lt;br /&gt;
:::;(Return to option selection)&lt;br /&gt;
:::{{DIcon|Talk}} Which Sovereigns are still around?&lt;br /&gt;
::::&#039;&#039;&#039;0:&#039;&#039;&#039; During the Sundering, there were a few Sovereigns who seized the opportunity to become Novarchs, like your old friend Victus. &#039;&#039;0 nods.&#039;&#039; Now he&#039;s the Order &amp;amp;mdash; Victus. There was also [[Armand]] of [[Light]] and [[Darkness]]...&lt;br /&gt;
::::&#039;&#039;&#039;0:&#039;&#039;&#039; The Vowbinder Crone of [[Beauty]] and [[Ugliness]], Sir Champion of Cooperation and Competition, the Masked Hero of Courage and Cowardice, and... &#039;&#039;0 lifts his gaze to you as he slowly utters the next name.&#039;&#039; Parayaya of [[Love]] and [[Hate]].&lt;br /&gt;
:::;(Return to option selection)&lt;br /&gt;
:::{{DIcon|Talk}} Do Sovereigns still have mastery over their Aspects? &lt;br /&gt;
::::&#039;&#039;&#039;0:&#039;&#039;&#039; Ah, that&#039;s a good question. &#039;&#039;0 thinks about it.&#039;&#039; Can the remaining Sovereigns use the powers of the Aspects? Yes, but their powers dwindle like a candle in the wind. The gates of the Aspects have not closed fully to the Sovereigns, but it&#039;s only a matter of time.&lt;br /&gt;
:::;(Return to option selection)&lt;br /&gt;
:::{{DIcon|Back}} I want to ask about something else...&lt;br /&gt;
:::;(Return to previous option selection)&lt;br /&gt;
::{{DIcon|Talk}} I want to know more about the Novarchs.&lt;br /&gt;
:::&#039;&#039;&#039;0:&#039;&#039;&#039; The Novarchs, the false kings that replaced the Sovereigns? &#039;&#039;0 laughs.&#039;&#039; The eighty-one Novarchs all shine differently, but not all of them deserve the powers of the Aspects. Would you like to know why?&lt;br /&gt;
:::{{DIcon|Talk}} Why are there eighty-one Novarchs?&lt;br /&gt;
::::&#039;&#039;&#039;0:&#039;&#039;&#039; Ah. &#039;&#039;0 sighs.&#039;&#039; A strange number to be sure. Thirty-nine Sovereigns, and eighty-one [[Novarch]]s. The math does not work. The connection is subtle.&lt;br /&gt;
::::&#039;&#039;&amp;lt;!--Intelligence Icon--&amp;gt;True, you had already noticed it. Were thirty-nine pairs of Aspects simply severed during the Sundering, they should have become seventy-eight Aspects. Why are there eighty-one Planes and Novarchs?&#039;&#039;&lt;br /&gt;
::::&#039;&#039;&amp;lt;!--Intelligence Icon--&amp;gt;The answer is forty. There were forty pairs of Aspects, but no one knew of the last pair. But why eighty-one?&#039;&#039;&lt;br /&gt;
:::;(Return to option selection)&lt;br /&gt;
:::{{DIcon|Talk}} Do you know anything about the [[Phoenixbreaker Novarch]]s?&lt;br /&gt;
::::&#039;&#039;&#039;0:&#039;&#039;&#039; A group of Novarchs that vowed to find the Reconstructor of Realms. You have already met [[Parayaya]], [[Blade]], [[Amorphiron]], but there are more of them. &#039;&#039;One of 0&#039;s eyes stares at you.&#039;&#039; They will not stop coming for you.&lt;br /&gt;
::::&#039;&#039;&#039;0:&#039;&#039;&#039; Be careful, because some of them have vowed to destroy you. But you needn&#039;t worry too much, for some of them are determined to help you.&lt;br /&gt;
:::;(Return to option selection)&lt;br /&gt;
:::{{DIcon|Talk}} Which Novarchs might assist me?&lt;br /&gt;
::::&#039;&#039;&#039;0:&#039;&#039;&#039; Out of those who knew you, some might choose to help you or not, depending on the choices you make. Remember, even someone who loves you with all their heart can fall into a frenzy because of a misstep.&lt;br /&gt;
:::;(Return to option selection)&lt;br /&gt;
:::{{DIcon|Talk}} Which Novarchs should i avoid?&lt;br /&gt;
::::&#039;&#039;&#039;0:&#039;&#039;&#039; More like... which Novarchs should avoid you. &#039;&#039;0&#039;s other eye beams, and you can&#039;t tell if he&#039;s joking.&#039;&#039; You... The Sundering Incarnate... You&#039;re the eye of the storm, drawing everything into your vortex wherever you go.&lt;br /&gt;
:::;(Return to option selection)&lt;br /&gt;
:::{{DIcon|Talk}} I want to ask about something else...&lt;br /&gt;
:::;(Return to previous option selection)&lt;br /&gt;
::{{DIcon|Talk}} I want to know more about the Old World.&lt;br /&gt;
:::&#039;&#039;&#039;0:&#039;&#039;&#039; It was a single, complete universe where people shared the same starry sky, breathed the same air, and wielded [[magic]] called Aspects. [[Dragon]]s, [[human]]s, [[fae]], and [[orc]]s all lived together, ruled by the thirty-nine Sovereigns.&lt;br /&gt;
:::&#039;&#039;&#039;0:&#039;&#039;&#039; People now call the Old World a golden era, one of perfection, one in which all was integrated. &#039;&#039;0 shakes his head.&#039;&#039; But people back then didn&#039;t think so. Humans always scorn what they possess, and fail to treasure what they have until they have lost it.&lt;br /&gt;
:::{{DIcon|Talk}} Dragons, humans, fae and orcs?&lt;br /&gt;
::::&#039;&#039;&#039;0:&#039;&#039;&#039; And many more besides. The intelligent species of the Old World were not nearly so few. Before the Sundering, all life lived together. And now, the eighty-one Planes separate them.&lt;br /&gt;
:::;(Return to previous option selection)&lt;br /&gt;
:::{{DIcon|Talk}} Didn&#039;t the old world have any [[Anima|Nexus Anima]]?&lt;br /&gt;
::::&#039;&#039;&#039;0:&#039;&#039;&#039; Yes, but they were very rare. Then, the threads of the Nexus back then were powerful and resilient, binding the thirty-nine pairs of Aspects most tightly and letting only fragments fall into the mortal realm. &#039;&#039;&#039;0 looks at your Anima.&#039;&#039;&#039; And now, creatures born of the Nexus like this one are everywhere.&lt;br /&gt;
:::;(Return to previous option selection)&lt;br /&gt;
::{{DIcon|Talk}} The Sundering?&lt;br /&gt;
:::&#039;&#039;&#039;0:&#039;&#039;&#039; The name for the disaster that tore apart the old world. &#039;&#039;0 sighs.&#039;&#039; First, the entire old world was annihilated, and then reborn. The complete universe no longer existed, having become eighty-one independent Planes, separated from one another.&lt;br /&gt;
::;(Return to option selection)&lt;br /&gt;
::{{DIcon|Back}} I have more questions.&lt;br /&gt;
::;(Return to previous option selection&lt;br /&gt;
;(After selecting five first options)&amp;lt;!--Not sure--&amp;gt;&lt;br /&gt;
:&#039;&#039;&#039;0:&#039;&#039;&#039; I think I&#039;ve said enough. &#039;&#039;He suddenly looks up, looking up &amp;amp;mdash; towards the ceiling, and where there&#039;s clearly nothing.&#039;&#039; I can still answer a few more questions, but cannot stay long.&lt;br /&gt;
:{{DIcon|Battle}} Let&#039;s duel.&lt;br /&gt;
::&#039;&#039;&#039;0:&#039;&#039;&#039; No. &#039;&#039;He extends a finger and makes a gesture in the air, as though he is signing a document. When his finger falls, you realise that he has declined the Nexus Battle invitation, it can never be extended again.&#039;&#039; That&#039;s not what we&#039;re doing today.&lt;br /&gt;
:{{DIcon|Exit}} No need. Goodbye.&lt;br /&gt;
::&#039;&#039;&#039;0:&#039;&#039;&#039; Farewell, {{Protagonist}}. Mayhaps the day of our reunion is not so distant. &#039;&#039;He winks, his body vanishing like smoke into thin air.&#039;&#039;&lt;br /&gt;
{{Dialogue End}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
==Gallery==&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Videos===&lt;br /&gt;
{{Files by Character Gallery|Official Videos}}&lt;br /&gt;
&lt;br /&gt;
==Trivia==&lt;br /&gt;
===Etymology===&lt;br /&gt;
* &lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Other Languages==&lt;br /&gt;
{{Other Languages&lt;br /&gt;
|en    = 0&lt;br /&gt;
|zhs   = &lt;br /&gt;
|zht   = &lt;br /&gt;
|ja    = &lt;br /&gt;
|ko    = &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Change History==&lt;br /&gt;
{{Change History|introduced=0.3.0}}&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
==References==&lt;br /&gt;
{{Reflist}}&lt;/div&gt;</summary>
		<author><name>Valaerys</name></author>
	</entry>
	<entry>
		<id>https://hna.wiki/File:Dialogue_Back_Icon.png?diff=9214</id>
		<title>File:Dialogue Back Icon.png</title>
		<link rel="alternate" type="text/html" href="https://hna.wiki/File:Dialogue_Back_Icon.png?diff=9214"/>
		<updated>2026-07-14T21:20:37Z</updated>

		<summary type="html">&lt;p&gt;Valaerys: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Summary==&lt;br /&gt;
{{Placeholder Image|release=1}}&lt;br /&gt;
{{File&lt;br /&gt;
|categories = Icons&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Licensing==&lt;br /&gt;
{{Fairuse}}&lt;/div&gt;</summary>
		<author><name>Valaerys</name></author>
	</entry>
	<entry>
		<id>https://hna.wiki/File:Dialogue_Back_Icon.png?diff=9213</id>
		<title>File:Dialogue Back Icon.png</title>
		<link rel="alternate" type="text/html" href="https://hna.wiki/File:Dialogue_Back_Icon.png?diff=9213"/>
		<updated>2026-07-14T21:20:10Z</updated>

		<summary type="html">&lt;p&gt;Valaerys: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Valaerys</name></author>
	</entry>
	<entry>
		<id>https://hna.wiki/File:Dialogue_Exit_Icon.png?diff=9212</id>
		<title>File:Dialogue Exit Icon.png</title>
		<link rel="alternate" type="text/html" href="https://hna.wiki/File:Dialogue_Exit_Icon.png?diff=9212"/>
		<updated>2026-07-14T21:17:40Z</updated>

		<summary type="html">&lt;p&gt;Valaerys: Valaerys moved page File:Dialogue Back Icon.png to File:Dialogue Exit Icon.png without leaving a redirect: Misspelled title&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Summary==&lt;br /&gt;
{{Placeholder Image|release=1}}&lt;br /&gt;
{{File&lt;br /&gt;
|categories = Icons&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Licensing==&lt;br /&gt;
{{Fairuse}}&lt;/div&gt;</summary>
		<author><name>Valaerys</name></author>
	</entry>
	<entry>
		<id>https://hna.wiki/File:Dialogue_Deft_Bypass_Icon.png?diff=9211</id>
		<title>File:Dialogue Deft Bypass Icon.png</title>
		<link rel="alternate" type="text/html" href="https://hna.wiki/File:Dialogue_Deft_Bypass_Icon.png?diff=9211"/>
		<updated>2026-07-14T21:04:39Z</updated>

		<summary type="html">&lt;p&gt;Valaerys: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Summary==&lt;br /&gt;
{{Placeholder Image|release=1}}&lt;br /&gt;
{{File&lt;br /&gt;
|categories = Icons&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Licensing==&lt;br /&gt;
{{Fairuse}}&lt;/div&gt;</summary>
		<author><name>Valaerys</name></author>
	</entry>
	<entry>
		<id>https://hna.wiki/File:Dialogue_Deft_Bypass_Icon.png?diff=9210</id>
		<title>File:Dialogue Deft Bypass Icon.png</title>
		<link rel="alternate" type="text/html" href="https://hna.wiki/File:Dialogue_Deft_Bypass_Icon.png?diff=9210"/>
		<updated>2026-07-14T21:04:09Z</updated>

		<summary type="html">&lt;p&gt;Valaerys: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Valaerys</name></author>
	</entry>
	<entry>
		<id>https://hna.wiki/File:Dialogue_Exit_Icon.png?diff=9208</id>
		<title>File:Dialogue Exit Icon.png</title>
		<link rel="alternate" type="text/html" href="https://hna.wiki/File:Dialogue_Exit_Icon.png?diff=9208"/>
		<updated>2026-07-14T20:55:35Z</updated>

		<summary type="html">&lt;p&gt;Valaerys: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Summary==&lt;br /&gt;
{{Placeholder Image|release=1}}&lt;br /&gt;
{{File&lt;br /&gt;
|categories = Icons&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Licensing==&lt;br /&gt;
{{Fairuse}}&lt;/div&gt;</summary>
		<author><name>Valaerys</name></author>
	</entry>
	<entry>
		<id>https://hna.wiki/File:Dialogue_Exit_Icon.png?diff=9207</id>
		<title>File:Dialogue Exit Icon.png</title>
		<link rel="alternate" type="text/html" href="https://hna.wiki/File:Dialogue_Exit_Icon.png?diff=9207"/>
		<updated>2026-07-14T20:53:19Z</updated>

		<summary type="html">&lt;p&gt;Valaerys: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Valaerys</name></author>
	</entry>
	<entry>
		<id>https://hna.wiki/File:Dialogue_Battle_Icon.png?diff=9204</id>
		<title>File:Dialogue Battle Icon.png</title>
		<link rel="alternate" type="text/html" href="https://hna.wiki/File:Dialogue_Battle_Icon.png?diff=9204"/>
		<updated>2026-07-14T20:28:59Z</updated>

		<summary type="html">&lt;p&gt;Valaerys: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Summary==&lt;br /&gt;
{{Placeholder Image|release=1}}&lt;br /&gt;
{{File&lt;br /&gt;
|categories = Icons&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Licensing==&lt;br /&gt;
{{Fairuse}}&lt;/div&gt;</summary>
		<author><name>Valaerys</name></author>
	</entry>
	<entry>
		<id>https://hna.wiki/File:Dialogue_Battle_Icon.png?diff=9203</id>
		<title>File:Dialogue Battle Icon.png</title>
		<link rel="alternate" type="text/html" href="https://hna.wiki/File:Dialogue_Battle_Icon.png?diff=9203"/>
		<updated>2026-07-14T20:28:34Z</updated>

		<summary type="html">&lt;p&gt;Valaerys: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Valaerys</name></author>
	</entry>
	<entry>
		<id>https://hna.wiki/File:Dialogue_Talk_Icon.png?diff=9200</id>
		<title>File:Dialogue Talk Icon.png</title>
		<link rel="alternate" type="text/html" href="https://hna.wiki/File:Dialogue_Talk_Icon.png?diff=9200"/>
		<updated>2026-07-14T20:10:58Z</updated>

		<summary type="html">&lt;p&gt;Valaerys: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Summary==&lt;br /&gt;
{{Placeholder Image|release=1}}&lt;br /&gt;
{{File&lt;br /&gt;
|categories = Icons&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Licensing==&lt;br /&gt;
{{Fairuse}}&lt;/div&gt;</summary>
		<author><name>Valaerys</name></author>
	</entry>
	<entry>
		<id>https://hna.wiki/Template:DIcon?diff=9199</id>
		<title>Template:DIcon</title>
		<link rel="alternate" type="text/html" href="https://hna.wiki/Template:DIcon?diff=9199"/>
		<updated>2026-07-14T20:10:09Z</updated>

		<summary type="html">&lt;p&gt;Valaerys: Created page with &amp;quot;&amp;lt;includeonly&amp;gt;&amp;lt;!-- --&amp;gt;{{#switch:{{{1|Talk}}}|&amp;lt;!--    --&amp;gt;|Talk      = link=&amp;lt;!--    --&amp;gt;|#default  = link=&amp;lt;!-- --&amp;gt;}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;{{Documentation|type=Image;Transcription|content= * {{T|DIcon|_Y_=1}} * {{T|DIcon|Talk|_Y_=1}} }}&amp;lt;/noinclude&amp;gt;&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;{{#switch:{{{1|Talk}}}|&amp;lt;!--&lt;br /&gt;
   --&amp;gt;|Talk      = [[File:Dialogue Talk Icon.png|x20px|link=]]&amp;lt;!--&lt;br /&gt;
   --&amp;gt;|#default  = [[File:Dialogue {{{1}}} Icon.png|x20px|link=]]&amp;lt;!--&lt;br /&gt;
--&amp;gt;}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;{{Documentation|type=Image;Transcription|content=&lt;br /&gt;
* {{T|DIcon|_Y_=1}}&lt;br /&gt;
* {{T|DIcon|Talk|_Y_=1}}&lt;br /&gt;
}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Valaerys</name></author>
	</entry>
	<entry>
		<id>https://hna.wiki/File:Dialogue_Talk_Icon.png?diff=9198</id>
		<title>File:Dialogue Talk Icon.png</title>
		<link rel="alternate" type="text/html" href="https://hna.wiki/File:Dialogue_Talk_Icon.png?diff=9198"/>
		<updated>2026-07-14T20:09:41Z</updated>

		<summary type="html">&lt;p&gt;Valaerys: ==Summary==
{{Placeholder Image|release=1}}
{{File
|categories = Icons
}}

==Licensing==
{{Fairuse}}&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
==Summary==&lt;br /&gt;
{{Placeholder Image|release=1}}&lt;br /&gt;
{{File&lt;br /&gt;
|categories = Icons&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Licensing==&lt;br /&gt;
{{Fairuse}}&lt;/div&gt;</summary>
		<author><name>Valaerys</name></author>
	</entry>
	<entry>
		<id>https://hna.wiki/Template:Item/doc?diff=9163</id>
		<title>Template:Item/doc</title>
		<link rel="alternate" type="text/html" href="https://hna.wiki/Template:Item/doc?diff=9163"/>
		<updated>2026-07-14T17:42:17Z</updated>

		<summary type="html">&lt;p&gt;Valaerys: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Documentation/Header}}&lt;br /&gt;
{{Lua}}&lt;br /&gt;
This template creates an icon and link for a given [[Item]].&lt;br /&gt;
&lt;br /&gt;
==Syntax==&lt;br /&gt;
{{T|Item|v1=item name|v2=optional size}}&lt;br /&gt;
&lt;br /&gt;
==Parameter List==&lt;br /&gt;
* {{F|1}} or {{F|name}} &amp;amp;mdash; Name of the item. Defaults to {{F|Unknown}}.&lt;br /&gt;
* {{F|2}} or {{F|size}} &amp;amp;mdash; Size of the image in pixels. Defaults to {{F|30}}.&lt;br /&gt;
* {{F|x}} or {{F|count}} &amp;amp;mdash; The amount of the item.&lt;br /&gt;
* {{F|link}} &amp;amp;mdash; Page to link to. Defaults to the item name&lt;br /&gt;
* {{F|text}} &amp;amp;mdash; Text to display. Defaults to the item name.&lt;br /&gt;
* {{F|notext}} &amp;amp;mdash; Set to &amp;quot;1&amp;quot; to omit text.&lt;br /&gt;
* {{F|type}} &amp;amp;mdash; Type of the item. Defaults to {{F|Item}}.&lt;br /&gt;
* {{F|newline}} &amp;amp;mdash; Set to &amp;quot;1&amp;quot; to display text on a new line.&lt;br /&gt;
* {{F|ref}} &amp;amp;mdash; Reference to append to the entire content.&lt;br /&gt;
* {{F|comma}} &amp;amp;mdash; Append a comma to the item text following AmE rules.&lt;br /&gt;
* {{F|dot}} &amp;amp;mdash; Append a dot to the item text following AmE rules.&lt;br /&gt;
* {{F|commaspc}} &amp;amp;mdash; Append a comma and a space to the item text following AmE rules.&lt;br /&gt;
* {{F|dotspc}} &amp;amp;mdash; Append a dot and a space to the item text following AmE rules.&lt;br /&gt;
&lt;br /&gt;
==Examples==&lt;br /&gt;
===Parameter #1===&lt;br /&gt;
{{T|Item|Popsicle|_Y_=1}}&lt;br /&gt;
&lt;br /&gt;
===Parameter #2===&lt;br /&gt;
{{T|Item|p1=Popsicle|p2=20|_Y_=1}}&amp;lt;br /&amp;gt;&lt;br /&gt;
{{T|Item|p1=Popsicle|p2=200|_Y_=1}}&lt;br /&gt;
&lt;br /&gt;
===link===&lt;br /&gt;
{{T|Item|p1=Popsicle|p2=link=Food|_Y_=1}}&lt;br /&gt;
&lt;br /&gt;
===text===&lt;br /&gt;
{{T|Item|p1=Popsicle|p2=text=Not Popsicles|_Y_=1}}&lt;br /&gt;
&lt;br /&gt;
===notext===&lt;br /&gt;
{{T|Item|p1=Popsicle|p2=notext=1|_Y_=1}}&lt;br /&gt;
&lt;br /&gt;
===x===&lt;br /&gt;
{{T|Item|p1=Popsicle|p2=x=5,000|_Y_=1}}&lt;br /&gt;
&lt;br /&gt;
===Ending Punctuation===&lt;br /&gt;
{{T|Item|p1=Popsicle|p2=x=5,000|p3=comma=1|_Y_=1}}&amp;lt;br /&amp;gt;&lt;br /&gt;
{{T|Item|p1=Lucky Star|p2=comma=1|_Y_=1}}&amp;lt;br /&amp;gt;&lt;br /&gt;
{{T|Item|p1=Lucky Star|p2=note=this is an item|p3=dotspc=1|_Y_=1}}&lt;br /&gt;
&lt;br /&gt;
==Template Data==&lt;br /&gt;
&amp;lt;templatedata&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;params&amp;quot;: {&lt;br /&gt;
		&amp;quot;1&amp;quot;: {&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;name&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Item Name&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Name of the Item&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;default&amp;quot;: &amp;quot;Unknown&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: true&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;2&amp;quot;: {&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;size&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Image Size&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Size of the image, in pixels&amp;quot;,&lt;br /&gt;
			&amp;quot;example&amp;quot;: &amp;quot;40&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;default&amp;quot;: &amp;quot;30&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;x&amp;quot;: {&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;count&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Amount&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Amount of the item&amp;quot;,&lt;br /&gt;
			&amp;quot;example&amp;quot;: &amp;quot;120,000&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;link&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Page Link&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Page to link to, if different from the item. Defaults to the item name.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;text&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Text&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Text to display. Defaults to the item name.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;notext&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;No Text&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Set to \&amp;quot;1\&amp;quot; to omit text after the item image&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;type&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Type&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Type of the item, for items that do not use the \&amp;quot;Item\&amp;quot; prefix&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;default&amp;quot;: &amp;quot;Item&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;white&amp;quot;: {},&lt;br /&gt;
		&amp;quot;newline&amp;quot;: {&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;,&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;New Line&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Set to \&amp;quot;1\&amp;quot; to display text on a new line.&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	&amp;quot;format&amp;quot;: &amp;quot;inline&amp;quot;,&lt;br /&gt;
	&amp;quot;description&amp;quot;: &amp;quot;Creates an icon and link for a given Item.&amp;quot;,&lt;br /&gt;
	&amp;quot;paramOrder&amp;quot;: [&lt;br /&gt;
		&amp;quot;1&amp;quot;,&lt;br /&gt;
		&amp;quot;2&amp;quot;,&lt;br /&gt;
		&amp;quot;x&amp;quot;,&lt;br /&gt;
		&amp;quot;link&amp;quot;,&lt;br /&gt;
		&amp;quot;text&amp;quot;,&lt;br /&gt;
		&amp;quot;notext&amp;quot;,&lt;br /&gt;
		&amp;quot;type&amp;quot;,&lt;br /&gt;
		&amp;quot;white&amp;quot;,&lt;br /&gt;
		&amp;quot;newline&amp;quot;&lt;br /&gt;
	]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/templatedata&amp;gt;&lt;/div&gt;</summary>
		<author><name>Valaerys</name></author>
	</entry>
	<entry>
		<id>https://hna.wiki/Template:Item/doc?diff=9134</id>
		<title>Template:Item/doc</title>
		<link rel="alternate" type="text/html" href="https://hna.wiki/Template:Item/doc?diff=9134"/>
		<updated>2026-07-14T16:19:02Z</updated>

		<summary type="html">&lt;p&gt;Valaerys: Created page with &amp;quot;{{Documentation/Header}} {{Lua}} This template creates an icon and link for a given Item.  ==Syntax== {{T|Item|v1=item name|v2=optional size}}  ==Parameter List== * {{F|1}} or {{F|name}} &amp;amp;mdash; Name of the item. Defaults to {{F|Unknown}}. * {{F|2}} or {{F|size}} &amp;amp;mdash; Size of the image in pixels. Defaults to {{F|30}}. * {{F|x}} or {{F|count}} &amp;amp;mdash; The amount of the item. * {{F|link}} &amp;amp;mdash; Page to link to. Defaults to the item name * {{F|text}} &amp;amp;mdash; Text t...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Documentation/Header}}&lt;br /&gt;
{{Lua}}&lt;br /&gt;
This template creates an icon and link for a given [[Item]].&lt;br /&gt;
&lt;br /&gt;
==Syntax==&lt;br /&gt;
{{T|Item|v1=item name|v2=optional size}}&lt;br /&gt;
&lt;br /&gt;
==Parameter List==&lt;br /&gt;
* {{F|1}} or {{F|name}} &amp;amp;mdash; Name of the item. Defaults to {{F|Unknown}}.&lt;br /&gt;
* {{F|2}} or {{F|size}} &amp;amp;mdash; Size of the image in pixels. Defaults to {{F|30}}.&lt;br /&gt;
* {{F|x}} or {{F|count}} &amp;amp;mdash; The amount of the item.&lt;br /&gt;
* {{F|link}} &amp;amp;mdash; Page to link to. Defaults to the item name&lt;br /&gt;
* {{F|text}} &amp;amp;mdash; Text to display. Defaults to the item name.&lt;br /&gt;
* {{F|notext}} &amp;amp;mdash; Set to &amp;quot;1&amp;quot; to omit text.&lt;br /&gt;
* {{F|type}} &amp;amp;mdash; Type of the item. Defaults to {{F|Item}}.&lt;br /&gt;
* {{F|newline}} &amp;amp;mdash; Set to &amp;quot;1&amp;quot; to display text on a new line.&lt;br /&gt;
* {{F|ref}} &amp;amp;mdash; Reference to append to the entire content.&lt;br /&gt;
* {{F|comma}} &amp;amp;mdash; Append a comma to the item text following AmE rules.&lt;br /&gt;
* {{F|dot}} &amp;amp;mdash; Append a dot to the item text following AmE rules.&lt;br /&gt;
* {{F|commaspc}} &amp;amp;mdash; Append a comma and a space to the item text following AmE rules.&lt;br /&gt;
* {{F|dotspc}} &amp;amp;mdash; Append a dot and a space to the item text following AmE rules.&lt;br /&gt;
&lt;br /&gt;
==Examples==&lt;br /&gt;
===Parameter #1===&lt;br /&gt;
{{T|Item|Popsicle|_Y_=1}}&lt;br /&gt;
&lt;br /&gt;
===Parameter #2===&lt;br /&gt;
{{T|Item|p1=Popsicle|p2=20|recipe=1|_Y_=1}}&amp;lt;br /&amp;gt;&lt;br /&gt;
{{T|Item|p1=Popsicle|p2=200|recipe=1|_Y_=1}}&lt;br /&gt;
&lt;br /&gt;
===link===&lt;br /&gt;
{{T|Item|p1=Popsicle|p2=link=Popsicle|recipe=Popsicle|_Y_=1}}&lt;br /&gt;
&lt;br /&gt;
===text===&lt;br /&gt;
{{T|Item|p1=Popsicle|p2=text=Not Popsicles|_Y_=1}}&lt;br /&gt;
&lt;br /&gt;
===notext===&lt;br /&gt;
{{T|Item|p1=Popsicle|p2=notext=1|_Y_=1}}&lt;br /&gt;
&lt;br /&gt;
===x===&lt;br /&gt;
{{T|Item|p1=Popsicle|p2=x=5,000|_Y_=1}}&lt;br /&gt;
&lt;br /&gt;
===Ending Punctuation===&lt;br /&gt;
{{T|Item|p1=Popsicle|p2=x=5,000|p3=comma=1|_Y_=1}}&amp;lt;br /&amp;gt;&lt;br /&gt;
{{T|Item|p1=Lucky Star|p2=comma=1|_Y_=1}}&amp;lt;br /&amp;gt;&lt;br /&gt;
{{T|Item|p1=Lucky Star|p2=note=this is an item|p3=dotspc=1|_Y_=1}}&lt;br /&gt;
&lt;br /&gt;
==Template Data==&lt;br /&gt;
&amp;lt;templatedata&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;params&amp;quot;: {&lt;br /&gt;
		&amp;quot;1&amp;quot;: {&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;name&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Item Name&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Name of the Item&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;default&amp;quot;: &amp;quot;Unknown&amp;quot;,&lt;br /&gt;
			&amp;quot;required&amp;quot;: true&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;2&amp;quot;: {&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;size&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Image Size&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Size of the image, in pixels&amp;quot;,&lt;br /&gt;
			&amp;quot;example&amp;quot;: &amp;quot;40&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;default&amp;quot;: &amp;quot;30&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;x&amp;quot;: {&lt;br /&gt;
			&amp;quot;aliases&amp;quot;: [&lt;br /&gt;
				&amp;quot;count&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Amount&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Amount of the item&amp;quot;,&lt;br /&gt;
			&amp;quot;example&amp;quot;: &amp;quot;120,000&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;link&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Page Link&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Page to link to, if different from the item. Defaults to the item name.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;text&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Text&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Text to display. Defaults to the item name.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;notext&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;No Text&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Set to \&amp;quot;1\&amp;quot; to omit text after the item image&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;type&amp;quot;: {&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;Type&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Type of the item, for items that do not use the \&amp;quot;Item\&amp;quot; prefix&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;default&amp;quot;: &amp;quot;Item&amp;quot;&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;white&amp;quot;: {},&lt;br /&gt;
		&amp;quot;newline&amp;quot;: {&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;boolean&amp;quot;,&lt;br /&gt;
			&amp;quot;label&amp;quot;: &amp;quot;New Line&amp;quot;,&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;Set to \&amp;quot;1\&amp;quot; to display text on a new line.&amp;quot;&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	&amp;quot;format&amp;quot;: &amp;quot;inline&amp;quot;,&lt;br /&gt;
	&amp;quot;description&amp;quot;: &amp;quot;Creates an icon and link for a given Item.&amp;quot;,&lt;br /&gt;
	&amp;quot;paramOrder&amp;quot;: [&lt;br /&gt;
		&amp;quot;1&amp;quot;,&lt;br /&gt;
		&amp;quot;2&amp;quot;,&lt;br /&gt;
		&amp;quot;x&amp;quot;,&lt;br /&gt;
		&amp;quot;link&amp;quot;,&lt;br /&gt;
		&amp;quot;text&amp;quot;,&lt;br /&gt;
		&amp;quot;notext&amp;quot;,&lt;br /&gt;
		&amp;quot;type&amp;quot;,&lt;br /&gt;
		&amp;quot;white&amp;quot;,&lt;br /&gt;
		&amp;quot;newline&amp;quot;&lt;br /&gt;
	]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/templatedata&amp;gt;&lt;/div&gt;</summary>
		<author><name>Valaerys</name></author>
	</entry>
	<entry>
		<id>https://hna.wiki/Template:Navbox_DPL/doc?diff=9130</id>
		<title>Template:Navbox DPL/doc</title>
		<link rel="alternate" type="text/html" href="https://hna.wiki/Template:Navbox_DPL/doc?diff=9130"/>
		<updated>2026-07-14T16:11:34Z</updated>

		<summary type="html">&lt;p&gt;Valaerys: Created page with &amp;quot;{{Documentation/Header}} DPL for :Category:Navbox Templates.  ==Parameters== * &amp;#039;&amp;#039;&amp;#039;uses&amp;#039;&amp;#039;&amp;#039;            - Default &amp;lt;code&amp;gt;Template:Item Infobox&amp;lt;/code&amp;gt; * &amp;#039;&amp;#039;&amp;#039;category&amp;#039;&amp;#039;&amp;#039;        - &amp;lt;code&amp;gt;categorymatch&amp;lt;/code&amp;gt; * &amp;#039;&amp;#039;&amp;#039;category2&amp;#039;&amp;#039;&amp;#039;       - &amp;lt;code&amp;gt;category&amp;lt;/code&amp;gt; * &amp;#039;&amp;#039;&amp;#039;category3&amp;#039;&amp;#039;&amp;#039;       - &amp;lt;code&amp;gt;category&amp;lt;/code&amp;gt; * &amp;#039;&amp;#039;&amp;#039;titlematch&amp;#039;&amp;#039;&amp;#039;      -  * &amp;#039;&amp;#039;&amp;#039;nottitlematch&amp;#039;&amp;#039;&amp;#039;   -  * &amp;#039;&amp;#039;&amp;#039;not1&amp;#039;&amp;#039;&amp;#039;            - * &amp;#039;&amp;#039;&amp;#039;not2&amp;#039;&amp;#039;&amp;#039;            - * &amp;#039;&amp;#039;&amp;#039;not3&amp;#039;&amp;#039;&amp;#039;            - * &amp;#039;&amp;#039;&amp;#039;not4&amp;#039;&amp;#039;&amp;#039;            - * &amp;#039;&amp;#039;&amp;#039;not5&amp;#039;&amp;#039;&amp;#039;...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Documentation/Header}}&lt;br /&gt;
DPL for [[:Category:Navbox Templates]].&lt;br /&gt;
&lt;br /&gt;
==Parameters==&lt;br /&gt;
* &#039;&#039;&#039;uses&#039;&#039;&#039;            - Default &amp;lt;code&amp;gt;Template:Item Infobox&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;category&#039;&#039;&#039;        - &amp;lt;code&amp;gt;categorymatch&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;category2&#039;&#039;&#039;       - &amp;lt;code&amp;gt;category&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;category3&#039;&#039;&#039;       - &amp;lt;code&amp;gt;category&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;titlematch&#039;&#039;&#039;      - &lt;br /&gt;
* &#039;&#039;&#039;nottitlematch&#039;&#039;&#039;   - &lt;br /&gt;
* &#039;&#039;&#039;not1&#039;&#039;&#039;            -&lt;br /&gt;
* &#039;&#039;&#039;not2&#039;&#039;&#039;            -&lt;br /&gt;
* &#039;&#039;&#039;not3&#039;&#039;&#039;            -&lt;br /&gt;
* &#039;&#039;&#039;not4&#039;&#039;&#039;            -&lt;br /&gt;
* &#039;&#039;&#039;not5&#039;&#039;&#039;            -&lt;br /&gt;
* &#039;&#039;&#039;not6&#039;&#039;&#039;            -&lt;br /&gt;
* &#039;&#039;&#039;not7&#039;&#039;&#039;            -&lt;br /&gt;
* &#039;&#039;&#039;not8&#039;&#039;&#039;            -&lt;br /&gt;
* &#039;&#039;&#039;not9&#039;&#039;&#039;            -&lt;br /&gt;
* &#039;&#039;&#039;file&#039;&#039;&#039;            - Default &amp;lt;code&amp;gt;Item %PAGE%.png&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;size&#039;&#039;&#039;            - Default &amp;lt;code&amp;gt;50x50px&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;formatbefore&#039;&#039;&#039;    -&lt;br /&gt;
* &#039;&#039;&#039;formatafter&#039;&#039;&#039;     -&lt;br /&gt;
* &#039;&#039;&#039;noresultsfooter&#039;&#039;&#039; -&lt;br /&gt;
* &#039;&#039;&#039;resultsheader&#039;&#039;&#039;   - Default &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;div&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;resultsfooter&#039;&#039;&#039;   - Default &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;skipthispage&#039;&#039;&#039;    - Default &amp;lt;code&amp;gt;no&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;ordermethod&#039;&#039;&#039;     - Default &amp;lt;code&amp;gt;sortkey&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Example==&lt;br /&gt;
&amp;lt;pre&amp;gt;{{Navbox DPL&lt;br /&gt;
|category = Anima&lt;br /&gt;
|uses     = Template:Anima Infobox&lt;br /&gt;
|file     = %PAGE% Anima Icon.png&lt;br /&gt;
}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Navbox DPL&lt;br /&gt;
|category = Anima&lt;br /&gt;
|uses     = Template:Anima Infobox&lt;br /&gt;
|file     = %PAGE% Anima Icon.png&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Valaerys</name></author>
	</entry>
	<entry>
		<id>https://hna.wiki/Template:Aspects_by_Category_Table?diff=9064</id>
		<title>Template:Aspects by Category Table</title>
		<link rel="alternate" type="text/html" href="https://hna.wiki/Template:Aspects_by_Category_Table?diff=9064"/>
		<updated>2026-07-14T09:50:40Z</updated>

		<summary type="html">&lt;p&gt;Valaerys: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{#dpl:&lt;br /&gt;
|category=Aspects&lt;br /&gt;
|category={{{1}}}&lt;br /&gt;
|notcategory {{{not}}}&lt;br /&gt;
|uses = Template:Aspect Infobox&lt;br /&gt;
|include = {Aspect Infobox}:name:sovereign:novarch:plane:type  &lt;br /&gt;
|table = class=&amp;quot;wikitable alternating-colors-table sortable&amp;quot;,-,Aspect,Sovereign,Novarch,Plane,Type&lt;br /&gt;
|tablerow = ²{%%}²,²{Character¦%%¦nobr=1}²,²{Character¦%%¦nobr=1}²,%%,%%&lt;br /&gt;
|resultsheader = There are &#039;&#039;&#039;%PAGES%&#039;&#039;&#039; known Aspects:\n&lt;br /&gt;
|ordermethod = title&lt;br /&gt;
}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;{{Documentation|type=DPL Table|content=&lt;br /&gt;
==Syntax==&lt;br /&gt;
{{T|Aspects by Category Table|v1=category|v2=not=notcategory}}&lt;br /&gt;
==Example==&lt;br /&gt;
{{T|Aspects by Category Table|_Ybr_=1}}&lt;br /&gt;
}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Valaerys</name></author>
	</entry>
	<entry>
		<id>https://hna.wiki/Honkai_Nexus_Anima_Wiki:AutoWikiBrowser/Script?diff=9061</id>
		<title>Honkai Nexus Anima Wiki:AutoWikiBrowser/Script</title>
		<link rel="alternate" type="text/html" href="https://hna.wiki/Honkai_Nexus_Anima_Wiki:AutoWikiBrowser/Script?diff=9061"/>
		<updated>2026-07-14T09:43:26Z</updated>

		<summary type="html">&lt;p&gt;Valaerys: Created page with &amp;quot;__NOINDEX__ This page intentionally kept empty. It is used for the JavaWikiBrowser (JWB) script. Category:Site maintenance&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOINDEX__&lt;br /&gt;
This page intentionally kept empty. It is used for the JavaWikiBrowser (JWB) script.&lt;br /&gt;
[[Category:Site maintenance]]&lt;/div&gt;</summary>
		<author><name>Valaerys</name></author>
	</entry>
	<entry>
		<id>https://hna.wiki/User:Valaerys/common.js?diff=9058</id>
		<title>User:Valaerys/common.js</title>
		<link rel="alternate" type="text/html" href="https://hna.wiki/User:Valaerys/common.js?diff=9058"/>
		<updated>2026-07-14T09:37:59Z</updated>

		<summary type="html">&lt;p&gt;Valaerys: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;mw.loader.load( &#039;//en.wikipedia.org/w/index.php?title=User:Joeytje50/JWB.js/load.js&amp;amp;action=raw&amp;amp;ctype=text/javascript&#039; ); // Backlink: [[en:User:Joeytje50/JWB.js/load.js]]&lt;br /&gt;
&lt;br /&gt;
importScript(&#039;User:Kuhlau/CopyTitle.js&#039;);&lt;/div&gt;</summary>
		<author><name>Valaerys</name></author>
	</entry>
	<entry>
		<id>https://hna.wiki/User:Valaerys/common.js?diff=9053</id>
		<title>User:Valaerys/common.js</title>
		<link rel="alternate" type="text/html" href="https://hna.wiki/User:Valaerys/common.js?diff=9053"/>
		<updated>2026-07-14T09:30:08Z</updated>

		<summary type="html">&lt;p&gt;Valaerys: Created page with &amp;quot;importScript(&amp;#039;User:Kuhlau/CopyTitle.js&amp;#039;);&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;importScript(&#039;User:Kuhlau/CopyTitle.js&#039;);&lt;/div&gt;</summary>
		<author><name>Valaerys</name></author>
	</entry>
	<entry>
		<id>https://hna.wiki/Witch%27s_Staff?diff=8966</id>
		<title>Witch&#039;s Staff</title>
		<link rel="alternate" type="text/html" href="https://hna.wiki/Witch%27s_Staff?diff=8966"/>
		<updated>2026-07-13T23:48:07Z</updated>

		<summary type="html">&lt;p&gt;Valaerys: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Stub}}&lt;br /&gt;
{{Relic Infobox&lt;br /&gt;
|title        = Witch&#039;s Staff&lt;br /&gt;
|image        = Relic Witch&#039;s Staff.png&lt;br /&gt;
|rarity       = 4&lt;br /&gt;
|eidos        = &lt;br /&gt;
|stat1        = MP&lt;br /&gt;
|stat1_amount = +30&lt;br /&gt;
|stat2        = CRIT Rate&lt;br /&gt;
|stat2_amount = +20%&lt;br /&gt;
|effect       = Skills can Critically Hit.&lt;br /&gt;
|source1      = &lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Witch&#039;s Staff&#039;&#039;&#039; is a Relic in &#039;&#039;[[Honkai: Nexus Anima]]&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Other Languages==&lt;br /&gt;
{{Other Languages&lt;br /&gt;
|en  = Witch&#039;s Staff&lt;br /&gt;
|zhs = &lt;br /&gt;
|zht = &lt;br /&gt;
|ja  = &lt;br /&gt;
|ko  = &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Change History==&lt;br /&gt;
{{Change History|introduced=0.3.0}}&lt;br /&gt;
&lt;br /&gt;
==Navigation==&lt;br /&gt;
{{Relic Navbox}}&lt;/div&gt;</summary>
		<author><name>Valaerys</name></author>
	</entry>
	<entry>
		<id>https://hna.wiki/Trueshot_Bow?diff=8965</id>
		<title>Trueshot Bow</title>
		<link rel="alternate" type="text/html" href="https://hna.wiki/Trueshot_Bow?diff=8965"/>
		<updated>2026-07-13T23:48:00Z</updated>

		<summary type="html">&lt;p&gt;Valaerys: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Stub}}&lt;br /&gt;
{{Relic Infobox&lt;br /&gt;
|title        = Trueshot Bow&lt;br /&gt;
|image        = Relic Trueshot Bow.png&lt;br /&gt;
|rarity       = 4&lt;br /&gt;
|eidos        = &lt;br /&gt;
|stat1        = Attack SPD&lt;br /&gt;
|stat1_amount = +50%&lt;br /&gt;
|stat2        = &lt;br /&gt;
|stat2_amount = &lt;br /&gt;
|effect       = &lt;br /&gt;
|source1      = &lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Trueshot Bow&#039;&#039;&#039; is a Relic in &#039;&#039;[[Honkai: Nexus Anima]]&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Other Languages==&lt;br /&gt;
{{Other Languages&lt;br /&gt;
|en  = Trueshot Bow&lt;br /&gt;
|zhs = &lt;br /&gt;
|zht = &lt;br /&gt;
|ja  = &lt;br /&gt;
|ko  = &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Change History==&lt;br /&gt;
{{Change History|introduced=0.3.0}}&lt;br /&gt;
&lt;br /&gt;
==Navigation==&lt;br /&gt;
{{Relic Navbox}}&lt;/div&gt;</summary>
		<author><name>Valaerys</name></author>
	</entry>
	<entry>
		<id>https://hna.wiki/Sweetness?diff=8964</id>
		<title>Sweetness</title>
		<link rel="alternate" type="text/html" href="https://hna.wiki/Sweetness?diff=8964"/>
		<updated>2026-07-13T23:47:53Z</updated>

		<summary type="html">&lt;p&gt;Valaerys: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Stub}}&lt;br /&gt;
{{Relic Infobox&lt;br /&gt;
|title        = Sweetness&lt;br /&gt;
|image        = Relic Sweetness.png&lt;br /&gt;
|rarity       = 4&lt;br /&gt;
|eidos        = Maple Manybell&lt;br /&gt;
|stat1        = MP&lt;br /&gt;
|stat1_amount = +35&lt;br /&gt;
|stat2        = &lt;br /&gt;
|stat2_amount = &lt;br /&gt;
|effect       = Gain &#039;&#039;&#039;15%&#039;&#039;&#039; MP.&lt;br /&gt;
|source1      = &lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Sweetness&#039;&#039;&#039; is a Relic in &#039;&#039;[[Honkai: Nexus Anima]]&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Other Languages==&lt;br /&gt;
{{Other Languages&lt;br /&gt;
|en  = Sweetness&lt;br /&gt;
|zhs = &lt;br /&gt;
|zht = &lt;br /&gt;
|ja  = &lt;br /&gt;
|ko  = &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Change History==&lt;br /&gt;
{{Change History|introduced=0.3.0}}&lt;br /&gt;
&lt;br /&gt;
==Navigation==&lt;br /&gt;
{{Relic Navbox}}&lt;/div&gt;</summary>
		<author><name>Valaerys</name></author>
	</entry>
	<entry>
		<id>https://hna.wiki/Stonemason?diff=8963</id>
		<title>Stonemason</title>
		<link rel="alternate" type="text/html" href="https://hna.wiki/Stonemason?diff=8963"/>
		<updated>2026-07-13T23:47:46Z</updated>

		<summary type="html">&lt;p&gt;Valaerys: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Stub}}&lt;br /&gt;
{{Relic Infobox&lt;br /&gt;
|title        = Stonemason&lt;br /&gt;
|image        = Relic Stonemason.png&lt;br /&gt;
|rarity       = 4&lt;br /&gt;
|eidos        = &lt;br /&gt;
|stat1        = Health&lt;br /&gt;
|stat1_amount = +450&lt;br /&gt;
|stat2        = ATK&lt;br /&gt;
|stat2_amount = +10%&lt;br /&gt;
|stat3        = MP&lt;br /&gt;
|stat3_amount = +10%&lt;br /&gt;
|effect       = &lt;br /&gt;
|source1      = &lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Stonemason&#039;&#039;&#039; is a Relic in &#039;&#039;[[Honkai: Nexus Anima]]&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Other Languages==&lt;br /&gt;
{{Other Languages&lt;br /&gt;
|en  = Stonemason&lt;br /&gt;
|zhs = &lt;br /&gt;
|zht = &lt;br /&gt;
|ja  = &lt;br /&gt;
|ko  = &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Change History==&lt;br /&gt;
{{Change History|introduced=0.3.0}}&lt;br /&gt;
&lt;br /&gt;
==Navigation==&lt;br /&gt;
{{Relic Navbox}}&lt;/div&gt;</summary>
		<author><name>Valaerys</name></author>
	</entry>
	<entry>
		<id>https://hna.wiki/Satiation_Sigil?diff=8962</id>
		<title>Satiation Sigil</title>
		<link rel="alternate" type="text/html" href="https://hna.wiki/Satiation_Sigil?diff=8962"/>
		<updated>2026-07-13T23:47:40Z</updated>

		<summary type="html">&lt;p&gt;Valaerys: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Stub}}&lt;br /&gt;
{{Relic Infobox&lt;br /&gt;
|title        = Satiation Sigil&lt;br /&gt;
|image        = Relic Satiation Sigil.png&lt;br /&gt;
|type         = Synergy Sigils&lt;br /&gt;
|rarity       = 4&lt;br /&gt;
|eidos        = &lt;br /&gt;
|stat1        = Health&lt;br /&gt;
|stat1_amount = +150&lt;br /&gt;
|stat2        = &lt;br /&gt;
|stat2_amount = &lt;br /&gt;
|effect       = The equipper gains the Satiation Aspect.&lt;br /&gt;
|source1      = &lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Satiation Sigil&#039;&#039;&#039; is a Relic in &#039;&#039;[[Honkai: Nexus Anima]]&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Other Languages==&lt;br /&gt;
{{Other Languages&lt;br /&gt;
|en  = Satiation Sigil&lt;br /&gt;
|zhs = &lt;br /&gt;
|zht = &lt;br /&gt;
|ja  = &lt;br /&gt;
|ko  = &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Change History==&lt;br /&gt;
{{Change History|introduced=0.3.0}}&lt;br /&gt;
&lt;br /&gt;
==Navigation==&lt;br /&gt;
{{Relic Navbox}}&lt;/div&gt;</summary>
		<author><name>Valaerys</name></author>
	</entry>
	<entry>
		<id>https://hna.wiki/Royal_Shield?diff=8961</id>
		<title>Royal Shield</title>
		<link rel="alternate" type="text/html" href="https://hna.wiki/Royal_Shield?diff=8961"/>
		<updated>2026-07-13T23:47:34Z</updated>

		<summary type="html">&lt;p&gt;Valaerys: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Stub}}&lt;br /&gt;
{{Relic Infobox&lt;br /&gt;
|title        = Royal Shield&lt;br /&gt;
|image        = Relic Royal Shield.png&lt;br /&gt;
|rarity       = 4&lt;br /&gt;
|eidos        = &lt;br /&gt;
|stat1        = Armor&lt;br /&gt;
|stat1_amount = +45&lt;br /&gt;
|stat2        = MR&lt;br /&gt;
|stat2_amount = +45&lt;br /&gt;
|effect       = &lt;br /&gt;
|source1      = &lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Royal Shield&#039;&#039;&#039; is a Relic in &#039;&#039;[[Honkai: Nexus Anima]]&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Other Languages==&lt;br /&gt;
{{Other Languages&lt;br /&gt;
|en  = Royal Shield&lt;br /&gt;
|zhs = &lt;br /&gt;
|zht = &lt;br /&gt;
|ja  = &lt;br /&gt;
|ko  = &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Change History==&lt;br /&gt;
{{Change History|introduced=0.3.0}}&lt;br /&gt;
&lt;br /&gt;
==Navigation==&lt;br /&gt;
{{Relic Navbox}}&lt;/div&gt;</summary>
		<author><name>Valaerys</name></author>
	</entry>
	<entry>
		<id>https://hna.wiki/Rosemead?diff=8960</id>
		<title>Rosemead</title>
		<link rel="alternate" type="text/html" href="https://hna.wiki/Rosemead?diff=8960"/>
		<updated>2026-07-13T23:47:29Z</updated>

		<summary type="html">&lt;p&gt;Valaerys: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Stub}}&lt;br /&gt;
{{Relic Infobox&lt;br /&gt;
|title        = Rosemead&lt;br /&gt;
|image        = Relic Rosemead.png&lt;br /&gt;
|rarity       = 4&lt;br /&gt;
|eidos        = &lt;br /&gt;
|stat1        = Energy&lt;br /&gt;
|stat1_amount = +15&lt;br /&gt;
|stat2        = ATK&lt;br /&gt;
|stat2_amount = +10%&lt;br /&gt;
|stat3        = MP&lt;br /&gt;
|stat3_amount = +10%&lt;br /&gt;
|effect       = Regenerate &#039;&#039;&#039;10&#039;&#039;&#039; Energy every &#039;&#039;&#039;3&#039;&#039;&#039;s.&lt;br /&gt;
|source1      = &lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Rosemead&#039;&#039;&#039; is a Relic in &#039;&#039;[[Honkai: Nexus Anima]]&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Other Languages==&lt;br /&gt;
{{Other Languages&lt;br /&gt;
|en  = Rosemead&lt;br /&gt;
|zhs = &lt;br /&gt;
|zht = &lt;br /&gt;
|ja  = &lt;br /&gt;
|ko  = &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Change History==&lt;br /&gt;
{{Change History|introduced=0.3.0}}&lt;br /&gt;
&lt;br /&gt;
==Navigation==&lt;br /&gt;
{{Relic Navbox}}&lt;/div&gt;</summary>
		<author><name>Valaerys</name></author>
	</entry>
	<entry>
		<id>https://hna.wiki/Path_of_the_Amphitheater?diff=8959</id>
		<title>Path of the Amphitheater</title>
		<link rel="alternate" type="text/html" href="https://hna.wiki/Path_of_the_Amphitheater?diff=8959"/>
		<updated>2026-07-13T23:47:22Z</updated>

		<summary type="html">&lt;p&gt;Valaerys: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Stub}}&lt;br /&gt;
{{Relic Infobox&lt;br /&gt;
|title        = Path of the Amphitheater&lt;br /&gt;
|image        = Relic Path of the Amphitheater.png&lt;br /&gt;
|rarity       = 4&lt;br /&gt;
|eidos        = Jalily Belau&lt;br /&gt;
|stat1        = ATK&lt;br /&gt;
|stat1_amount = +35&lt;br /&gt;
|stat2        = &lt;br /&gt;
|stat2_amount = &lt;br /&gt;
|effect       = Gain &#039;&#039;&#039;12%&#039;&#039;&#039; ATK.&lt;br /&gt;
|source1      = &lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Path of the Amphitheater&#039;&#039;&#039; is a Relic in &#039;&#039;[[Honkai: Nexus Anima]]&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Other Languages==&lt;br /&gt;
{{Other Languages&lt;br /&gt;
|en  = Path of the Amphitheater&lt;br /&gt;
|zhs = &lt;br /&gt;
|zht = &lt;br /&gt;
|ja  = &lt;br /&gt;
|ko  = &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Change History==&lt;br /&gt;
{{Change History|introduced=0.3.0}}&lt;br /&gt;
&lt;br /&gt;
==Navigation==&lt;br /&gt;
{{Relic Navbox}}&lt;/div&gt;</summary>
		<author><name>Valaerys</name></author>
	</entry>
	<entry>
		<id>https://hna.wiki/Lingering_Affection?diff=8958</id>
		<title>Lingering Affection</title>
		<link rel="alternate" type="text/html" href="https://hna.wiki/Lingering_Affection?diff=8958"/>
		<updated>2026-07-13T23:46:56Z</updated>

		<summary type="html">&lt;p&gt;Valaerys: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Stub}}&lt;br /&gt;
{{Relic Infobox&lt;br /&gt;
|title        = Lingering Affection&lt;br /&gt;
|image        = Relic Lingering Affection.png&lt;br /&gt;
|rarity       = 4&lt;br /&gt;
|eidos        = Nanafey&lt;br /&gt;
|stat1        = MP&lt;br /&gt;
|stat1_amount = +12&lt;br /&gt;
|stat2        = Attack SPD&lt;br /&gt;
|stat2_amount = +10%&lt;br /&gt;
|effect       = Every Basic Attack regenerates an additional &#039;&#039;&#039;5&#039;&#039;&#039; Energy.&lt;br /&gt;
|source1      = &lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Lingering Affection&#039;&#039;&#039; is a Relic in &#039;&#039;[[Honkai: Nexus Anima]]&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Other Languages==&lt;br /&gt;
{{Other Languages&lt;br /&gt;
|en  = Lingering Affection&lt;br /&gt;
|zhs = &lt;br /&gt;
|zht = &lt;br /&gt;
|ja  = &lt;br /&gt;
|ko  = &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Change History==&lt;br /&gt;
{{Change History|introduced=0.3.0}}&lt;br /&gt;
&lt;br /&gt;
==Navigation==&lt;br /&gt;
{{Relic Navbox}}&lt;/div&gt;</summary>
		<author><name>Valaerys</name></author>
	</entry>
	<entry>
		<id>https://hna.wiki/Journey%27s_Beginning?diff=8957</id>
		<title>Journey&#039;s Beginning</title>
		<link rel="alternate" type="text/html" href="https://hna.wiki/Journey%27s_Beginning?diff=8957"/>
		<updated>2026-07-13T23:46:45Z</updated>

		<summary type="html">&lt;p&gt;Valaerys: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Stub}}&lt;br /&gt;
{{Relic Infobox&lt;br /&gt;
|title        = Journey&#039;s Beginning&lt;br /&gt;
|image        = Relic Journey&#039;s Beginning.png&lt;br /&gt;
|rarity       = 4&lt;br /&gt;
|eidos        = Kiana&lt;br /&gt;
|stat1        = Armor&lt;br /&gt;
|stat1_amount = +35&lt;br /&gt;
|stat2        = MR&lt;br /&gt;
|stat2_amount = +35&lt;br /&gt;
|effect       = Gain Max Health equal to total Armor and MR.&lt;br /&gt;
|source1      = &lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Journey&#039;s Beginning&#039;&#039;&#039; is a Relic in &#039;&#039;[[Honkai: Nexus Anima]]&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Other Languages==&lt;br /&gt;
{{Other Languages&lt;br /&gt;
|en  = Journey&#039;s Beginning&lt;br /&gt;
|zhs = &lt;br /&gt;
|zht = &lt;br /&gt;
|ja  = &lt;br /&gt;
|ko  = &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Change History==&lt;br /&gt;
{{Change History|introduced=0.3.0}}&lt;br /&gt;
&lt;br /&gt;
==Navigation==&lt;br /&gt;
{{Relic Navbox}}&lt;/div&gt;</summary>
		<author><name>Valaerys</name></author>
	</entry>
	<entry>
		<id>https://hna.wiki/Hunter%27s_Cuirass?diff=8956</id>
		<title>Hunter&#039;s Cuirass</title>
		<link rel="alternate" type="text/html" href="https://hna.wiki/Hunter%27s_Cuirass?diff=8956"/>
		<updated>2026-07-13T23:46:39Z</updated>

		<summary type="html">&lt;p&gt;Valaerys: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Stub}}&lt;br /&gt;
{{Relic Infobox&lt;br /&gt;
|title        = Hunter&#039;s Cuirass&lt;br /&gt;
|image        = Relic Hunter&#039;s Cuirass.png&lt;br /&gt;
|type         = &lt;br /&gt;
|rarity       = 4&lt;br /&gt;
|eidos        = &lt;br /&gt;
|stat1        = Health&lt;br /&gt;
|stat1_amount = +600&lt;br /&gt;
|stat2        = &lt;br /&gt;
|stat2_amount = &lt;br /&gt;
|stat3        = &lt;br /&gt;
|stat3_amount = &lt;br /&gt;
|effect       = Restore &#039;&#039;&#039;5%&#039;&#039;&#039; of missing Health every &#039;&#039;&#039;3&#039;&#039;&#039;s.&lt;br /&gt;
|source1      = &lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Hunter&#039;s Cuirass&#039;&#039;&#039; is a Relic in &#039;&#039;[[Honkai: Nexus Anima]]&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Other Languages==&lt;br /&gt;
{{Other Languages&lt;br /&gt;
|en  = Hunter&#039;s Cuirass&lt;br /&gt;
|zhs = &lt;br /&gt;
|zht = &lt;br /&gt;
|ja  = &lt;br /&gt;
|ko  = &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Change History==&lt;br /&gt;
{{Change History|introduced=0.3.0}}&lt;br /&gt;
&lt;br /&gt;
==Navigation==&lt;br /&gt;
{{Relic Navbox}}&lt;/div&gt;</summary>
		<author><name>Valaerys</name></author>
	</entry>
	<entry>
		<id>https://hna.wiki/Hot-Blooded_Tempo?diff=8955</id>
		<title>Hot-Blooded Tempo</title>
		<link rel="alternate" type="text/html" href="https://hna.wiki/Hot-Blooded_Tempo?diff=8955"/>
		<updated>2026-07-13T23:46:33Z</updated>

		<summary type="html">&lt;p&gt;Valaerys: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Stub}}&lt;br /&gt;
{{Relic Infobox&lt;br /&gt;
|title        = Hot-Blooded Tempo&lt;br /&gt;
|image        = Relic Hot-Blooded Tempo.png&lt;br /&gt;
|rarity       = 4&lt;br /&gt;
|eidos        = Hua&lt;br /&gt;
|stat1        = Health&lt;br /&gt;
|stat1_amount = +500&lt;br /&gt;
|stat2        = &lt;br /&gt;
|stat2_amount = &lt;br /&gt;
|effect       = Equipper heals themselves every &#039;&#039;&#039;2&#039;&#039;&#039;s for &#039;&#039;&#039;1%&#039;&#039;&#039; Max Health.&lt;br /&gt;
|source1      = &lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Hot-Blooded Tempo&#039;&#039;&#039; is a Relic in &#039;&#039;[[Honkai: Nexus Anima]]&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Other Languages==&lt;br /&gt;
{{Other Languages&lt;br /&gt;
|en  = Hot-Blooded Tempo&lt;br /&gt;
|zhs = &lt;br /&gt;
|zht = &lt;br /&gt;
|ja  = &lt;br /&gt;
|ko  = &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Change History==&lt;br /&gt;
{{Change History|introduced=0.3.0}}&lt;br /&gt;
&lt;br /&gt;
==Navigation==&lt;br /&gt;
{{Relic Navbox}}&lt;/div&gt;</summary>
		<author><name>Valaerys</name></author>
	</entry>
	<entry>
		<id>https://hna.wiki/Guardian%27s_Greatsword?diff=8954</id>
		<title>Guardian&#039;s Greatsword</title>
		<link rel="alternate" type="text/html" href="https://hna.wiki/Guardian%27s_Greatsword?diff=8954"/>
		<updated>2026-07-13T23:46:25Z</updated>

		<summary type="html">&lt;p&gt;Valaerys: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Stub}}&lt;br /&gt;
{{Relic Infobox&lt;br /&gt;
|title        = Guardian&#039;s Greatsword&lt;br /&gt;
|image        = Relic Guardian&#039;s Greatsword.png&lt;br /&gt;
|rarity       = 4&lt;br /&gt;
|eidos        = &lt;br /&gt;
|stat1        = Health&lt;br /&gt;
|stat1_amount = +200&lt;br /&gt;
|stat2        = Omnileech&lt;br /&gt;
|stat2_amount = +15%&lt;br /&gt;
|effect       = &lt;br /&gt;
|source1      = &lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Guardian&#039;s Greatsword&#039;&#039;&#039; is a Relic in &#039;&#039;[[Honkai: Nexus Anima]]&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Other Languages==&lt;br /&gt;
{{Other Languages&lt;br /&gt;
|en  = Guardian&#039;s Greatsword&lt;br /&gt;
|zhs = &lt;br /&gt;
|zht = &lt;br /&gt;
|ja  = &lt;br /&gt;
|ko  = &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Change History==&lt;br /&gt;
{{Change History|introduced=0.3.0}}&lt;br /&gt;
&lt;br /&gt;
==Navigation==&lt;br /&gt;
{{Relic Navbox}}&lt;/div&gt;</summary>
		<author><name>Valaerys</name></author>
	</entry>
	<entry>
		<id>https://hna.wiki/Corny_Joke?diff=8953</id>
		<title>Corny Joke</title>
		<link rel="alternate" type="text/html" href="https://hna.wiki/Corny_Joke?diff=8953"/>
		<updated>2026-07-13T23:46:20Z</updated>

		<summary type="html">&lt;p&gt;Valaerys: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Stub}}&lt;br /&gt;
{{Relic Infobox&lt;br /&gt;
|title        = Corny Joke&lt;br /&gt;
|image        = Relic Corny Joke.png&lt;br /&gt;
|rarity       = 4&lt;br /&gt;
|eidos        = Cassio Rollex&lt;br /&gt;
|stat1        = Health&lt;br /&gt;
|stat1_amount = +200&lt;br /&gt;
|stat2        = Attack SPD&lt;br /&gt;
|stat2_amount = +10%&lt;br /&gt;
|effect       = Triggers once per battle; When Health drops below &#039;&#039;&#039;50%&#039;&#039;&#039;, gain Shield equal to &#039;&#039;&#039;30%&#039;&#039;&#039; Max Health.&lt;br /&gt;
|source1      = &lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Corny Joke&#039;&#039;&#039; is a Relic in &#039;&#039;[[Honkai: Nexus Anima]]&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Other Languages==&lt;br /&gt;
{{Other Languages&lt;br /&gt;
|en  = Corny Joke&lt;br /&gt;
|zhs = &lt;br /&gt;
|zht = &lt;br /&gt;
|ja  = &lt;br /&gt;
|ko  = &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Change History==&lt;br /&gt;
{{Change History|introduced=0.3.0}}&lt;br /&gt;
&lt;br /&gt;
==Navigation==&lt;br /&gt;
{{Relic Navbox}}&lt;/div&gt;</summary>
		<author><name>Valaerys</name></author>
	</entry>
	<entry>
		<id>https://hna.wiki/Competition_Sigil?diff=8952</id>
		<title>Competition Sigil</title>
		<link rel="alternate" type="text/html" href="https://hna.wiki/Competition_Sigil?diff=8952"/>
		<updated>2026-07-13T23:46:13Z</updated>

		<summary type="html">&lt;p&gt;Valaerys: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Stub}}&lt;br /&gt;
{{Relic Infobox&lt;br /&gt;
|title        = Competition Sigil&lt;br /&gt;
|image        = Relic Competition Sigil.png&lt;br /&gt;
|type         = Synergy Sigils&lt;br /&gt;
|rarity       = 4&lt;br /&gt;
|eidos        = &lt;br /&gt;
|stat1        = MR&lt;br /&gt;
|stat1_amount = +10&lt;br /&gt;
|stat2        = &lt;br /&gt;
|stat2_amount = &lt;br /&gt;
|effect       = The equipper gains the Competition Aspect.&lt;br /&gt;
|source1      = &lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Competition Sigil&#039;&#039;&#039; is a Relic in &#039;&#039;[[Honkai: Nexus Anima]]&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Other Languages==&lt;br /&gt;
{{Other Languages&lt;br /&gt;
|en  = Competition Sigil&lt;br /&gt;
|zhs = &lt;br /&gt;
|zht = &lt;br /&gt;
|ja  = &lt;br /&gt;
|ko  = &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Change History==&lt;br /&gt;
{{Change History|introduced=0.3.0}}&lt;br /&gt;
&lt;br /&gt;
==Navigation==&lt;br /&gt;
{{Relic Navbox}}&lt;/div&gt;</summary>
		<author><name>Valaerys</name></author>
	</entry>
	<entry>
		<id>https://hna.wiki/Ambrosia_Staff?diff=8951</id>
		<title>Ambrosia Staff</title>
		<link rel="alternate" type="text/html" href="https://hna.wiki/Ambrosia_Staff?diff=8951"/>
		<updated>2026-07-13T23:46:07Z</updated>

		<summary type="html">&lt;p&gt;Valaerys: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Stub}}&lt;br /&gt;
{{Relic Infobox&lt;br /&gt;
|title        = Ambrosia Staff&lt;br /&gt;
|image        = Relic Ambrosia Staff.png&lt;br /&gt;
|rarity       = 4&lt;br /&gt;
|eidos        = &lt;br /&gt;
|stat1        = MP&lt;br /&gt;
|stat1_amount = +40&lt;br /&gt;
|stat2        = &lt;br /&gt;
|stat2_amount = &lt;br /&gt;
|effect       = &lt;br /&gt;
|source1      = &lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Ambrosia Staff&#039;&#039;&#039; is a Relic in &#039;&#039;[[Honkai: Nexus Anima]]&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Other Languages==&lt;br /&gt;
{{Other Languages&lt;br /&gt;
|en  = Ambrosia Staff&lt;br /&gt;
|zhs = &lt;br /&gt;
|zht = &lt;br /&gt;
|ja  = &lt;br /&gt;
|ko  = &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Change History==&lt;br /&gt;
{{Change History|introduced=0.3.0}}&lt;br /&gt;
&lt;br /&gt;
==Navigation==&lt;br /&gt;
{{Relic Navbox}}&lt;/div&gt;</summary>
		<author><name>Valaerys</name></author>
	</entry>
	<entry>
		<id>https://hna.wiki/Witching_Hour_Banquet?diff=8950</id>
		<title>Witching Hour Banquet</title>
		<link rel="alternate" type="text/html" href="https://hna.wiki/Witching_Hour_Banquet?diff=8950"/>
		<updated>2026-07-13T23:45:38Z</updated>

		<summary type="html">&lt;p&gt;Valaerys: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Stub}}&lt;br /&gt;
{{Relic Infobox&lt;br /&gt;
|title        = Witching Hour Banquet&lt;br /&gt;
|image        = Relic Witching Hour Banquet.png&lt;br /&gt;
|rarity       = 5&lt;br /&gt;
|eidos        = Hungrille&lt;br /&gt;
|stat1        = Energy&lt;br /&gt;
|stat1_amount = 20&lt;br /&gt;
|stat2        = MP&lt;br /&gt;
|stat2_amount = 20&lt;br /&gt;
|effect       = After the start of battle, gain &#039;&#039;&#039;15%&#039;&#039;&#039; MP every &#039;&#039;&#039;6&#039;&#039;&#039;s. This effect stacks. If the equipper&#039;s Health falls to &#039;&#039;&#039;50%&#039;&#039;&#039;, become Untargetable for &#039;&#039;&#039;2&#039;&#039;&#039;s, becoming immune to all DMG for the duration. This effect can only trigger once per battle.&lt;br /&gt;
|source1      = &lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Witching Hour Banquet&#039;&#039;&#039; is a Relic in &#039;&#039;[[Honkai: Nexus Anima]]&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Other Languages==&lt;br /&gt;
{{Other Languages&lt;br /&gt;
|en  = Witching Hour Banquet&lt;br /&gt;
|zhs = &lt;br /&gt;
|zht = &lt;br /&gt;
|ja  = &lt;br /&gt;
|ko  = &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Change History==&lt;br /&gt;
{{Change History|introduced=0.3.0}}&lt;br /&gt;
&lt;br /&gt;
==Navigation==&lt;br /&gt;
{{Relic Navbox}}&lt;/div&gt;</summary>
		<author><name>Valaerys</name></author>
	</entry>
</feed>