<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://deadlock.wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=~2026-ChargeKnockdownSiphon975</id>
	<title>The Deadlock Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://deadlock.wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=~2026-ChargeKnockdownSiphon975"/>
	<link rel="alternate" type="text/html" href="https://deadlock.wiki/Special:Contributions/~2026-ChargeKnockdownSiphon975"/>
	<updated>2026-09-01T15:22:13Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.46.0</generator>
	<entry>
		<id>https://deadlock.wiki/Module:ItemTables?diff=114085</id>
		<title>Module:ItemTables</title>
		<link rel="alternate" type="text/html" href="https://deadlock.wiki/Module:ItemTables?diff=114085"/>
		<updated>2026-08-23T15:26:03Z</updated>

		<summary type="html">&lt;p&gt;~2026-ChargeKnockdownSiphon975: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {};&lt;br /&gt;
local get_cost = require(&amp;quot;Module:ItemData&amp;quot;)._get_cost&lt;br /&gt;
local get_type = require(&amp;quot;Module:ItemData&amp;quot;)._get_type&lt;br /&gt;
local commas = require(&amp;quot;Module:Addcommas&amp;quot;)&lt;br /&gt;
local GameData = require(&amp;quot;Module:GameData&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
 -- Translate internal attribute names to plain text for module calls&lt;br /&gt;
local friendly_to_internal = {}&lt;br /&gt;
friendly_to_internal[&amp;quot;ammo&amp;quot;] = { &amp;quot;BonusClipSizePercent&amp;quot;, &amp;quot;BonusClipSize&amp;quot;, &amp;quot;ActiveReloadPercent&amp;quot; }&lt;br /&gt;
friendly_to_internal[&amp;quot;weapon damage&amp;quot;] = { &amp;quot;BaseAttackDamagePercent&amp;quot;, &amp;quot;CloseRangeBonusWeaponPower&amp;quot;, &amp;quot;LongRangeBonusWeaponPower&amp;quot;, &amp;quot;AttackDamageWhenShielded&amp;quot; }&lt;br /&gt;
friendly_to_internal[&amp;quot;spirit damage&amp;quot;] = { &amp;quot;ProcBonusMagicDamage&amp;quot; }&lt;br /&gt;
friendly_to_internal[&amp;quot;bullet shield health&amp;quot;] = { &amp;quot;BulletShieldMaxHealth&amp;quot;, &amp;quot;BulletShieldOnCast&amp;quot;, &amp;quot;SaviorBulletShieldHealth&amp;quot;, &amp;quot;FlyingBulletShield&amp;quot;, &amp;quot;VexBarrierBulletMaxHealth&amp;quot; }&lt;br /&gt;
friendly_to_internal[&amp;quot;spirit shield health&amp;quot;] = { &amp;quot;TechShieldMaxHealth&amp;quot;, &amp;quot;TechShieldOnCast&amp;quot;, &amp;quot;SaviorMagicShieldHealth&amp;quot;, &amp;quot;FlyingTechShield&amp;quot;, &amp;quot;VexBarrierTechMaxHealth&amp;quot; }&lt;br /&gt;
friendly_to_internal[&amp;quot;barrier&amp;quot;] = { &amp;quot;CombatBarrier&amp;quot;, &amp;quot;GuardianWardCombatBarrier&amp;quot;, &amp;quot;VexBarrierCombatBarrier&amp;quot; }&lt;br /&gt;
friendly_to_internal[&amp;quot;bullet resist&amp;quot;] = { &amp;quot;BulletResist&amp;quot;, &amp;quot;LocalBulletArmorReduction&amp;quot;, &amp;quot;ReturnFireBulletResist&amp;quot;, &amp;quot;BulletResistPerStack&amp;quot; }&lt;br /&gt;
friendly_to_internal[&amp;quot;bullet resist reduction&amp;quot;] = { &amp;quot;BulletArmorReduction&amp;quot;, &amp;quot;BulletResistReduction&amp;quot; }&lt;br /&gt;
friendly_to_internal[&amp;quot;spirit resist&amp;quot;] = { &amp;quot;BulletResist&amp;quot; }&lt;br /&gt;
friendly_to_internal[&amp;quot;spirit resist reduction&amp;quot;] = { &amp;quot;TechArmorDamageReduction&amp;quot;, &amp;quot;MagicResistReduction&amp;quot; }&lt;br /&gt;
friendly_to_internal[&amp;quot;bonus health&amp;quot;] = { &amp;quot;BonusHealth&amp;quot; }&lt;br /&gt;
friendly_to_internal[&amp;quot;bonus base health&amp;quot;] = { &amp;quot;BonusBaseHealth&amp;quot;, &amp;quot;MaxHealthLossPercent&amp;quot; }&lt;br /&gt;
friendly_to_internal[&amp;quot;health regen&amp;quot;] = { &amp;quot;BonusHealthRegen&amp;quot; }&lt;br /&gt;
friendly_to_internal[&amp;quot;regeneration&amp;quot;] = { &amp;quot;Regeneration&amp;quot; }&lt;br /&gt;
friendly_to_internal[&amp;quot;regeneration duration&amp;quot;] = { &amp;quot;RegenerationDuration&amp;quot; }&lt;br /&gt;
friendly_to_internal[&amp;quot;out of combat health regen&amp;quot;] = { &amp;quot;OutOfCombatHealthRegen&amp;quot; }&lt;br /&gt;
friendly_to_internal[&amp;quot;max health regen&amp;quot;] = { &amp;quot;HealLifePercentOutOfCombat&amp;quot; }&lt;br /&gt;
friendly_to_internal[&amp;quot;fire rate&amp;quot;] = { &amp;quot;BonusFireRate&amp;quot;, &amp;quot;FireRateWhenShielded&amp;quot;, &amp;quot;FireRateBonus&amp;quot;, &amp;quot;FervorFireRate&amp;quot;, &amp;quot;AmbushBonusFireRate&amp;quot;, &amp;quot;ActiveBonusFireRate&amp;quot;, &amp;quot;ActivatedFireRate&amp;quot; }&lt;br /&gt;
friendly_to_internal[&amp;quot;fire rate slow&amp;quot;] = { &amp;quot;FireRateSlow&amp;quot; }&lt;br /&gt;
friendly_to_internal[&amp;quot;bullet velocity&amp;quot;] = { &amp;quot;BonusBulletSpeedPercent&amp;quot; }&lt;br /&gt;
friendly_to_internal[&amp;quot;spirit power&amp;quot;] = { &amp;quot;TechPower&amp;quot;, &amp;quot;BonusSpirit&amp;quot;, &amp;quot;SpiritPower&amp;quot;, &amp;quot;BonusSpiritWithMagicShield&amp;quot;, &amp;quot;ImbuedTechPower&amp;quot;, &amp;quot;AmbushBonusTechPower&amp;quot;, &amp;quot;TechPowerPercent&amp;quot; }&lt;br /&gt;
friendly_to_internal[&amp;quot;bullet lifesteal&amp;quot;] = { &amp;quot;BulletLifestealPercent&amp;quot;, &amp;quot;ActiveBonusLifesteal&amp;quot; }&lt;br /&gt;
friendly_to_internal[&amp;quot;spirit lifesteal&amp;quot;] = { &amp;quot;AbilityLifestealPercentHero&amp;quot; }&lt;br /&gt;
friendly_to_internal[&amp;quot;move speed&amp;quot;] = { &amp;quot;BonusMoveSpeed&amp;quot;, &amp;quot;ActiveBonusMoveSpeed&amp;quot;, &amp;quot;FervorMovespeed&amp;quot;,}&lt;br /&gt;
friendly_to_internal[&amp;quot;sprint speed&amp;quot;] = { &amp;quot;BonusSprintSpeed&amp;quot;, &amp;quot;InvisMoveSpeedMod&amp;quot; }&lt;br /&gt;
friendly_to_internal[&amp;quot;movement slow&amp;quot;] = { &amp;quot;SlowPercent&amp;quot;, &amp;quot;MovementSpeedSlow&amp;quot; }&lt;br /&gt;
friendly_to_internal[&amp;quot;reload time&amp;quot;] = { &amp;quot;ReloadSpeedMultipler&amp;quot; }&lt;br /&gt;
friendly_to_internal[&amp;quot;heavy melee distance&amp;quot;] = { &amp;quot;MeleeDistanceScale&amp;quot; }&lt;br /&gt;
friendly_to_internal[&amp;quot;bonus heavy damage&amp;quot;] = { &amp;quot;BonusHeavyMeleeDamage&amp;quot; }&lt;br /&gt;
friendly_to_internal[&amp;quot;bonus melee damage&amp;quot;] = { &amp;quot;BonusMeleeDamagePercent&amp;quot;, &amp;quot;AmbushBonusMeleeDamage&amp;quot; }&lt;br /&gt;
friendly_to_internal[&amp;quot;melee resist&amp;quot;] = { &amp;quot;MeleeResistPercent&amp;quot; }&lt;br /&gt;
friendly_to_internal[&amp;quot;stamina&amp;quot;] = { &amp;quot;Stamina&amp;quot; }&lt;br /&gt;
friendly_to_internal[&amp;quot;slide distance&amp;quot;] = { &amp;quot;SlideScale&amp;quot; }&lt;br /&gt;
friendly_to_internal[&amp;quot;stamina recovery&amp;quot;] = { &amp;quot;StaminaCooldownReduction&amp;quot; }&lt;br /&gt;
friendly_to_internal[&amp;quot;healing reduction&amp;quot;] = { &amp;quot;HealAmpRegenPenaltyPercent&amp;quot; }&lt;br /&gt;
friendly_to_internal[&amp;quot;ability duration&amp;quot;] = { &amp;quot;ImbuedBonusDuration&amp;quot;, &amp;quot;BonusAbilityDurationPercent&amp;quot; }&lt;br /&gt;
friendly_to_internal[&amp;quot;ability cooldown reduction&amp;quot;] = { &amp;quot;ImbuedCooldownReduction&amp;quot;, &amp;quot;CooldownReduction&amp;quot; }&lt;br /&gt;
friendly_to_internal[&amp;quot;item cooldown reduction&amp;quot;] = { &amp;quot;ItemCooldownReduction&amp;quot; }&lt;br /&gt;
friendly_to_internal[&amp;quot;charge cooldown reduction&amp;quot;] = { &amp;quot;CooldownReductionOnChargedAbilities&amp;quot; }&lt;br /&gt;
friendly_to_internal[&amp;quot;debuff resist&amp;quot;] = { &amp;quot;StatusResistancePercent&amp;quot;, &amp;quot;FervorStatusResistancePercent&amp;quot; }&lt;br /&gt;
friendly_to_internal[&amp;quot;ability range&amp;quot;] = { &amp;quot;TechRangeMultiplier&amp;quot;, &amp;quot;ImbuedTechRangeMultiplier&amp;quot;}&lt;br /&gt;
friendly_to_internal[&amp;quot;falloff range&amp;quot;] = { &amp;quot;BonusAttackRangePercent&amp;quot; }&lt;br /&gt;
friendly_to_internal[&amp;quot;spirit amp&amp;quot;] = { &amp;quot;ShreddersTechAmp&amp;quot;, &amp;quot;MagicIncreasePerStack&amp;quot; }&lt;br /&gt;
friendly_to_internal[&amp;quot;spirit damage reduction&amp;quot;] = { &amp;quot;TechDamageReduction&amp;quot; }&lt;br /&gt;
friendly_to_internal[&amp;quot;dash distance&amp;quot;] = { &amp;quot;GroundDashReductionPercent&amp;quot;, &amp;quot;AirMoveIncreasePercent&amp;quot; }&lt;br /&gt;
friendly_to_internal[&amp;quot;damage reduction&amp;quot;] = { &amp;quot;OutgoingDamagePenaltyPercent&amp;quot;, &amp;quot;DeathImmunityDamageReduction&amp;quot; }&lt;br /&gt;
friendly_to_internal[&amp;quot;gravity scale&amp;quot;] = { &amp;quot;GravityScale&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
-- Override dead/hidden stats that exist in data but don&#039;t actually work in‑game.&lt;br /&gt;
-- Keys are item Names, values are tables of { [internalStatName] = replacementValue }&lt;br /&gt;
local deadStatOverrides = {&lt;br /&gt;
    [&amp;quot;Witchmail&amp;quot;] = { CooldownReduction = &amp;quot;0&amp;quot; },&lt;br /&gt;
    [&amp;quot;Refresher&amp;quot;] = { BulletResist = &amp;quot;0&amp;quot;, TechResist = &amp;quot;0&amp;quot; },&lt;br /&gt;
    [&amp;quot;Glass Cannon&amp;quot;] = { SlowPercent = &amp;quot;0&amp;quot;, MovementSpeedSlow = &amp;quot;0&amp;quot; },&lt;br /&gt;
    [&amp;quot;Majestic Leap&amp;quot;] = { SlowPercent = &amp;quot;0&amp;quot;, MovementSpeedSlow = &amp;quot;0&amp;quot; },&lt;br /&gt;
    [&amp;quot;Improved Spirit&amp;quot;] = { BonusSprintSpeed = &amp;quot;0&amp;quot;},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
--- Copies original table with its children as deep as possible. Does not handle metatables. (Copy is needed because Lua passes by reference, not value)&lt;br /&gt;
-- @function   Deepcopy&lt;br /&gt;
-- @param      {n-D table}&lt;br /&gt;
-- @return     {n-D table}&lt;br /&gt;
function Deepcopy(orig)&lt;br /&gt;
    local orig_type = type(orig)&lt;br /&gt;
    local copy&lt;br /&gt;
    if orig_type == &#039;table&#039; then&lt;br /&gt;
        copy = {}&lt;br /&gt;
        for orig_key, orig_value in next, orig, nil do&lt;br /&gt;
            copy[Deepcopy(orig_key)] = Deepcopy(orig_value)&lt;br /&gt;
        end&lt;br /&gt;
    else&lt;br /&gt;
        copy = orig&lt;br /&gt;
    end&lt;br /&gt;
    return copy&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Helper to resolve a stat value, applying any dead‑stat override if defined.&lt;br /&gt;
local function resolveStatValue(itemName, t)&lt;br /&gt;
    if deadStatOverrides[itemName.Name] and deadStatOverrides[itemName.Name][t] ~= nil then&lt;br /&gt;
        return deadStatOverrides[itemName.Name][t]&lt;br /&gt;
    end&lt;br /&gt;
    return itemName[t]&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Returns a table of internal properties &lt;br /&gt;
-- @function   friendlyNames&lt;br /&gt;
-- @param      {string}&lt;br /&gt;
-- @return     {table}&lt;br /&gt;
local function friendlyNames(desc)&lt;br /&gt;
	local keysTable = {}&lt;br /&gt;
	desc = string.lower(desc or &amp;quot;&amp;quot;)&lt;br /&gt;
	for link, patterns in pairs(friendly_to_internal) do&lt;br /&gt;
		if (desc == link) then keysTable = patterns end &lt;br /&gt;
	end&lt;br /&gt;
	return keysTable&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local unitSuffix = {&lt;br /&gt;
	[&amp;quot;%&amp;quot;] = { &amp;quot;BonusClipSizePercent&amp;quot;, &amp;quot;ActiveReloadPercent&amp;quot;, &lt;br /&gt;
		&amp;quot;BaseAttackDamagePercent&amp;quot;, &amp;quot;CloseRangeBonusWeaponPower&amp;quot;, &amp;quot;LongRangeBonusWeaponPower&amp;quot;, &amp;quot;AttackDamageWhenShielded&amp;quot;,&lt;br /&gt;
		&amp;quot;TechResist&amp;quot;, &amp;quot;BulletResist&amp;quot;,&lt;br /&gt;
		&amp;quot;BonusFireRate&amp;quot;, &amp;quot;FireRateWhenShielded&amp;quot;, &amp;quot;FervorFireRate&amp;quot;, &amp;quot;FireRateBonus&amp;quot;, &amp;quot;AmbushBonusFireRate&amp;quot;, &amp;quot;ActiveBonusFireRate&amp;quot;, &amp;quot;ActivatedFireRate&amp;quot;, &amp;quot;FireRateSlow&amp;quot;,&lt;br /&gt;
		&amp;quot;LocalBulletArmorReduction&amp;quot;, &amp;quot;ReturnFireBulletResist&amp;quot;, &amp;quot;BulletArmorReduction&amp;quot;, &amp;quot;BulletResistReduction&amp;quot;, &amp;quot;BulletResistPerStack&amp;quot;,&lt;br /&gt;
		&amp;quot;TechArmorDamageReduction&amp;quot;, &amp;quot;MagicResistReduction&amp;quot;,&lt;br /&gt;
		&amp;quot;BonusBulletSpeedPercent&amp;quot;,&lt;br /&gt;
		&amp;quot;BulletLifestealPercent&amp;quot;, &amp;quot;ActiveBonusLifesteal&amp;quot;, &amp;quot;AbilityLifestealPercentHero&amp;quot;,&lt;br /&gt;
		&amp;quot;HealLifePercentOutOfCombat&amp;quot;,&lt;br /&gt;
		&amp;quot;ReloadSpeedMultipler&amp;quot;,&lt;br /&gt;
		&amp;quot;MeleeDistanceScale&amp;quot;, &amp;quot;BonusHeavyMeleeDamage&amp;quot;, &amp;quot;BonusMeleeDamagePercent&amp;quot;, &amp;quot;MeleeResistPercent&amp;quot;, &amp;quot;AmbushBonusMeleeDamage&amp;quot;,&lt;br /&gt;
		&amp;quot;SlideScale&amp;quot;,&lt;br /&gt;
		&amp;quot;StaminaCooldownReduction&amp;quot;,&lt;br /&gt;
		&amp;quot;SlowPercent&amp;quot;, &amp;quot;MovementSpeedSlow&amp;quot;,&lt;br /&gt;
		&amp;quot;HealAmpReceivePenaltyPercent&amp;quot;, &amp;quot;HealAmpRegenPenaltyPercent&amp;quot;,&lt;br /&gt;
		&amp;quot;ImbuedBonusDuration&amp;quot;, &amp;quot;NonImbuedBonusDuration&amp;quot;, &amp;quot;BonusAbilityDurationPercent&amp;quot;,&lt;br /&gt;
		&amp;quot;ImbuedCooldownReduction&amp;quot;, &amp;quot;CooldownReduction&amp;quot;,&lt;br /&gt;
		&amp;quot;ItemCooldownReduction&amp;quot;,&lt;br /&gt;
		&amp;quot;CooldownReductionOnChargedAbilities&amp;quot;,&lt;br /&gt;
		&amp;quot;StatusResistancePercent&amp;quot;,&lt;br /&gt;
		&amp;quot;TechRangeMultiplier&amp;quot;, &amp;quot;ImbuedTechRangeMultiplier&amp;quot;,&lt;br /&gt;
		&amp;quot;BonusAttackRangePercent&amp;quot;,&lt;br /&gt;
		&amp;quot;ShreddersTechAmp&amp;quot;, &amp;quot;BonusAmpPerHeadshot&amp;quot;, &amp;quot;MagicIncreasePerStack&amp;quot;,&lt;br /&gt;
		&amp;quot;TechDamageReduction&amp;quot;,&lt;br /&gt;
		&amp;quot;OutgoingDamagePenaltyPercent&amp;quot;, &amp;quot;DeathImmunityDamageReduction&amp;quot;, &amp;quot;TechPowerPercent&amp;quot;,&lt;br /&gt;
		&amp;quot;GroundDashReductionPercent&amp;quot;, &amp;quot;AirMoveIncreasePercent&amp;quot;,&lt;br /&gt;
		&amp;quot;GravityScale&amp;quot;,&lt;br /&gt;
		&amp;quot;BonusBaseHealth&amp;quot;, &amp;quot;MaxHealthLossPercent&amp;quot;&lt;br /&gt;
    	},&lt;br /&gt;
	[&amp;quot;m/s&amp;quot;] = { &amp;quot;BonusMoveSpeed&amp;quot;, &amp;quot;ActiveBonusMoveSpeed&amp;quot;, &amp;quot;BonusSprintSpeed&amp;quot;, &amp;quot;FervorMovespeed&amp;quot;, &amp;quot;InvisMoveSpeedMod&amp;quot; },&lt;br /&gt;
	[&amp;quot; HP&amp;quot;] = {&amp;quot;CombatBarrier&amp;quot;, &amp;quot;GuardianWardCombatBarrier&amp;quot;, &amp;quot;VexBarrierCombatBarrier&amp;quot;}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local function appendSuffix(internal)&lt;br /&gt;
	local unitName = &amp;quot;&amp;quot;&lt;br /&gt;
	for key, s in pairs(unitSuffix) do&lt;br /&gt;
		for _, pattern in pairs(s) do&lt;br /&gt;
			if (internal == pattern) then return key end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return unitName&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local sortByWeapon = {}&lt;br /&gt;
sortByWeapon[&amp;quot;Weapon&amp;quot;] = 1&lt;br /&gt;
sortByWeapon[&amp;quot;Armor&amp;quot;] = 10000&lt;br /&gt;
sortByWeapon[&amp;quot;Tech&amp;quot;] = 100000000&lt;br /&gt;
&lt;br /&gt;
-- Sort the order of items in a preset as it appears when no filtered ordering is applied. &lt;br /&gt;
-- Ordered first by slot and cost increasing, then alphabetical within same slot and cost.&lt;br /&gt;
function defaultSort()&lt;br /&gt;
    return function(a, b)&lt;br /&gt;
    	if (get_cost(a[&amp;quot;Name&amp;quot;]) == get_cost(b[&amp;quot;Name&amp;quot;]) and sortByWeapon[a[&amp;quot;Slot&amp;quot;]] == sortByWeapon[b[&amp;quot;Slot&amp;quot;]]) then return a[&amp;quot;Name&amp;quot;] &amp;lt; b[&amp;quot;Name&amp;quot;] end&lt;br /&gt;
        return get_cost(a[&amp;quot;Name&amp;quot;]) * sortByWeapon[a[&amp;quot;Slot&amp;quot;]] &amp;lt; get_cost(b[&amp;quot;Name&amp;quot;]) * sortByWeapon[b[&amp;quot;Slot&amp;quot;]]&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Formats a stat value with a leading + or - sign and makes it bold.&lt;br /&gt;
-- The function is robust and handles nil, number, string, or table inputs safely.&lt;br /&gt;
-- @function   signPrefix&lt;br /&gt;
-- @param      {any} The stat value to format.&lt;br /&gt;
-- @return     {string} The formatted wikitext string.&lt;br /&gt;
local function signPrefix(value)&lt;br /&gt;
	if value == nil then&lt;br /&gt;
		return &amp;quot;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	value = tostring(value)&lt;br /&gt;
	value = value:gsub(&amp;quot;m&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
	value = tonumber(value)&lt;br /&gt;
	if not value then&lt;br /&gt;
		return &amp;quot;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	if (value &amp;gt;= 0) then&lt;br /&gt;
		return &amp;quot;+&amp;lt;b&amp;gt;&amp;quot; .. value .. &amp;quot;&amp;lt;/b&amp;gt;&amp;quot;&lt;br /&gt;
	elseif (value &amp;lt; 0) then&lt;br /&gt;
		value = math.abs(value)&lt;br /&gt;
		return &amp;quot;-&amp;lt;b&amp;gt;&amp;quot; .. value .. &amp;quot;&amp;lt;/b&amp;gt;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Outputs a wikitable of items that increase a specified stat. Invoked by {{Item stat table}}&lt;br /&gt;
-- @function   p.itemPropTable&lt;br /&gt;
-- @param      {string}&lt;br /&gt;
-- @return     {string}&lt;br /&gt;
p.itemPropTable = function(frame)&lt;br /&gt;
	local requirements = {}&lt;br /&gt;
	local listofKeysTable = {}&lt;br /&gt;
	local property = frame:getParent().args[1] or mw.title.getCurrentTitle().text&lt;br /&gt;
	local copyVar = property&lt;br /&gt;
&lt;br /&gt;
	-- Get internal keys corresponding to the friendly property name&lt;br /&gt;
	listofKeysTable = friendlyNames(property) &lt;br /&gt;
&lt;br /&gt;
	local filteredData = GameData.get_entities(GameData.Dataset.ITEMS, listofKeysTable)&lt;br /&gt;
	table.sort(filteredData, defaultSort())&lt;br /&gt;
&lt;br /&gt;
	local createTable = mw.html.create(&#039;table&#039;)&lt;br /&gt;
    :addClass(&#039;wikitable sortable item-stat-table&#039;)&lt;br /&gt;
    :tag(&#039;caption&#039;):done()&lt;br /&gt;
&lt;br /&gt;
	local soulIcon = frame:expandTemplate{ title = &#039;Souls&#039; }&lt;br /&gt;
&lt;br /&gt;
	local createTableHeader = mw.html.create(&#039;tr&#039;)&lt;br /&gt;
	createTableHeader&lt;br /&gt;
		:tag(&#039;th&#039;):wikitext(&#039;Name&#039;):done()&lt;br /&gt;
		:tag(&#039;th&#039;):wikitext(soulIcon .. &#039;Cost&#039;):done()&lt;br /&gt;
		:tag(&#039;th&#039;):wikitext(&#039;Category&#039;):done()&lt;br /&gt;
		:tag(&#039;th&#039;):wikitext(&#039;Stat change&#039;):done()&lt;br /&gt;
	createTable:node(createTableHeader)&lt;br /&gt;
&lt;br /&gt;
	-- Track rowspans for items with multiple stats&lt;br /&gt;
	local rowspanTracker = {}&lt;br /&gt;
&lt;br /&gt;
	for _, itemName in ipairs(filteredData) do &lt;br /&gt;
		local display = frame:expandTemplate{&lt;br /&gt;
			title = &#039;ItemIcon&#039;,&lt;br /&gt;
			args = { itemName[&amp;quot;Name&amp;quot;] }&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		local statCount = 0&lt;br /&gt;
		for _, t in pairs(listofKeysTable) do&lt;br /&gt;
			local statVal = resolveStatValue(itemName, t)&lt;br /&gt;
			if(statVal ~= nil and statVal ~= &amp;quot;0&amp;quot;) then&lt;br /&gt;
				statCount = statCount + 1&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if statCount == 0 then statCount = 1 end&lt;br /&gt;
		rowspanTracker[itemName[&amp;quot;Name&amp;quot;]] = statCount&lt;br /&gt;
&lt;br /&gt;
		local firstStat = true&lt;br /&gt;
		for _, t in pairs(listofKeysTable) do&lt;br /&gt;
			local statValue = resolveStatValue(itemName, t)&lt;br /&gt;
			if(statValue ~= nil and statValue ~= &amp;quot;0&amp;quot;) then&lt;br /&gt;
				-- Handles complex stat values from the JSON data.&lt;br /&gt;
				if type(statValue) == &#039;table&#039; and statValue.Value ~= nil then&lt;br /&gt;
					statValue = statValue.Value&lt;br /&gt;
				end&lt;br /&gt;
&lt;br /&gt;
				copyVar = copyVar:gsub(&amp;quot;^%l&amp;quot;, string.upper)&lt;br /&gt;
&lt;br /&gt;
				local categoryDisplay&lt;br /&gt;
				if itemName[&amp;quot;Slot&amp;quot;] == &amp;quot;Armor&amp;quot; then&lt;br /&gt;
					categoryDisplay = frame:expandTemplate{&lt;br /&gt;
						title = &#039;ItemType&#039;,&lt;br /&gt;
						args = { &amp;quot;Armor&amp;quot;, &amp;quot;Vitality&amp;quot; }&lt;br /&gt;
					}&lt;br /&gt;
				elseif itemName[&amp;quot;Slot&amp;quot;] == &amp;quot;Tech&amp;quot; then&lt;br /&gt;
					categoryDisplay = frame:expandTemplate{&lt;br /&gt;
						title = &#039;ItemType&#039;,&lt;br /&gt;
						args = { &amp;quot;Tech&amp;quot;, &amp;quot;Spirit&amp;quot; }&lt;br /&gt;
					}&lt;br /&gt;
				else&lt;br /&gt;
					categoryDisplay = frame:expandTemplate{&lt;br /&gt;
						title = &#039;ItemType&#039;,&lt;br /&gt;
						args = { &amp;quot;Weapon&amp;quot;, &amp;quot;Weapon&amp;quot; }&lt;br /&gt;
					}&lt;br /&gt;
				end&lt;br /&gt;
&lt;br /&gt;
				local tableData = mw.html.create(&#039;tr&#039;)&lt;br /&gt;
&lt;br /&gt;
				if firstStat then&lt;br /&gt;
					tableData&lt;br /&gt;
						:tag(&#039;td&#039;):attr(&#039;rowspan&#039;, statCount):wikitext(display):done()&lt;br /&gt;
						:tag(&#039;td&#039;):attr(&#039;rowspan&#039;, statCount):wikitext(&lt;br /&gt;
							(get_cost(itemName[&amp;quot;Name&amp;quot;]) == 9999)&lt;br /&gt;
							and &amp;quot;Legendary&amp;quot;&lt;br /&gt;
							or commas._add(get_cost(itemName[&amp;quot;Name&amp;quot;]))&lt;br /&gt;
						):done()&lt;br /&gt;
						:tag(&#039;td&#039;):attr(&#039;rowspan&#039;, statCount):wikitext(categoryDisplay):done()&lt;br /&gt;
					firstStat = false&lt;br /&gt;
				end&lt;br /&gt;
&lt;br /&gt;
				tableData:tag(&#039;td&#039;):wikitext(signPrefix(statValue) .. appendSuffix(t) .. &amp;quot; &amp;quot; .. copyVar):done()&lt;br /&gt;
				table.insert(requirements, tableData)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
    for _, row in ipairs(requirements) do&lt;br /&gt;
        createTable:node(row)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local edit_url = mw.uri.fullUrl(&amp;quot;Module:ItemTables&amp;quot;, { action = &amp;quot;edit&amp;quot; })&lt;br /&gt;
    local disclaimer = frame:preprocess(&lt;br /&gt;
        &#039;&amp;lt;div class=&amp;quot;item-stat-table-disclaimer&amp;quot;&amp;gt;&#039;&lt;br /&gt;
        .. &#039;This is a dynamic list &#039;&lt;br /&gt;
        .. &#039;&amp;lt;span class=&amp;quot;item-stat-table-list-name&amp;quot;&amp;gt;&amp;quot;&#039; .. property .. &#039;&amp;quot;&amp;lt;/span&amp;gt;. &#039;&lt;br /&gt;
        .. &#039;[&#039; .. tostring(edit_url) .. &#039; Edit contents].&#039;&lt;br /&gt;
        .. &#039;&amp;lt;/div&amp;gt;&#039;&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    return disclaimer .. tostring(createTable)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>~2026-ChargeKnockdownSiphon975</name></author>
	</entry>
</feed>