<?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=SerpentofSet</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=SerpentofSet"/>
	<link rel="alternate" type="text/html" href="https://deadlock.wiki/Special:Contributions/SerpentofSet"/>
	<updated>2026-09-15T16:18:18Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.46.0</generator>
	<entry>
		<id>https://deadlock.wiki/Health?diff=46950</id>
		<title>Health</title>
		<link rel="alternate" type="text/html" href="https://deadlock.wiki/Health?diff=46950"/>
		<updated>2025-11-20T14:29:48Z</updated>

		<summary type="html">&lt;p&gt;SerpentofSet: /* Miscellaneous Health Modifiers */ Update glass cannon note&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Vitality Icon.png|right|frameless]]&lt;br /&gt;
&#039;&#039;&#039;Health&#039;&#039;&#039; measures the amount of [[damage]] that can be taken before [[Death|dying]], and is fundamental to all [[heroes]] and units. Units and players with health are allowed to interact with the game, and consequently when your health drops to zero you are disabled from playing until respawning.&lt;br /&gt;
&lt;br /&gt;
== Maximum Health ==&lt;br /&gt;
[[File:Kelvin base health 1.png|thumb|263x263px|Kelvin&#039;s starting base health at {{Souls|0}}]]&lt;br /&gt;
The formula for maximum health &amp;lt;math&amp;gt;HP_{Max}&amp;lt;/math&amp;gt; is: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
HP_{Max} = \left( HP_0 + N_{Boons} \times HP_{Boon} \right) \times (1 + \textstyle\sum HP_{Shop} ) + \textstyle\sum HP_{Bonus}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &amp;lt;math&amp;gt;HP_0&amp;lt;/math&amp;gt; is hero-specific starting base health, &amp;lt;math&amp;gt;N_{Boons}&amp;lt;/math&amp;gt; is the number of [[Boons]] earned, &amp;lt;math&amp;gt;HP_{Boon}&amp;lt;/math&amp;gt; is hero-specific added base health from each boon, &amp;lt;math&amp;gt;HP_{Shop}&amp;lt;/math&amp;gt; are implicit base health percent increases from [[Vitality]] items, and &amp;lt;math&amp;gt;HP_{Bonus}&amp;lt;/math&amp;gt; are bonus health flat increases from various sources. &amp;lt;math&amp;gt;HP_{Shop}&amp;lt;/math&amp;gt; starts at 8% and increases with additional investment in the vitality items category.&lt;br /&gt;
&lt;br /&gt;
Note that the max health presented in-game is rounded up to the nearest integer.&lt;br /&gt;
&lt;br /&gt;
=== Base Health ===&lt;br /&gt;
[[File:Kelvin base health 2.png|thumb|247x247px|Kelvin&#039;s base health at {{Souls|20.0k}}]]&lt;br /&gt;
Base health is the sum of starting base health and added base health from boons. It is scaled by the inherent increased base health stats of Vitality items. Different heroes have different amounts of starting base health and added base health from boons.&lt;br /&gt;
&lt;br /&gt;
Values referenced from [[Hero Attributes Table]].&lt;br /&gt;
&lt;br /&gt;
{{#invoke:HeroDataArrays|heroHealthTable}}&lt;br /&gt;
&lt;br /&gt;
{{#invoke:LevelTables|write_power_increase_table|MaxHealth|title=Base Health based on Boons}}&lt;br /&gt;
&lt;br /&gt;
=== Bonus Health ===&lt;br /&gt;
[[File:Survival Power buff.png|thumb|179x179px|Survival power-up located in the training map]]&lt;br /&gt;
Bonus health comes from a variety of sources:&lt;br /&gt;
&lt;br /&gt;
* Items are the most common source of added bonus health. Bonus health can be found on all three item types, but Vitality items tend to provide the largest amounts.&lt;br /&gt;
* [[Golden Statue|Golden statues]] occasionally drop small but permanent added bonus health buffs: &#039;&#039;&#039;+20&#039;&#039;&#039; before 10 minutes, &#039;&#039;&#039;+30&#039;&#039;&#039; between 10 and 30 minutes, or &#039;&#039;&#039;+40&#039;&#039;&#039; after 30 minutes.&lt;br /&gt;
* The [[Powerup|Survival Powerup]] immediately grants &#039;&#039;&#039;+200&#039;&#039;&#039; to &#039;&#039;&#039;+700&#039;&#039;&#039; bonus health (scales as game goes on), but only for 160 seconds or until death.&lt;br /&gt;
* The [[Rejuvenator]] immediately grants &#039;&#039;&#039;+200&#039;&#039;&#039; bonus health, but only for 4 minutes or until death.&lt;br /&gt;
&lt;br /&gt;
Bonus Health is not scaled by increased base health. Bonus health is added after the increased base health multiplier has been applied to base health.&lt;br /&gt;
&lt;br /&gt;
=== Miscellaneous Health Modifiers ===&lt;br /&gt;
With the purchase of [[Glass Cannon]], the hero&#039;s max health is reduced by 10% after the above calculations.&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
[[Kelvin]] begins the game with 600 Base HP. If Kelvin purchases two tier 1 vitality items, one of which grants 100 bonus health, his max health becomes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;HP_{Max} = 600 \times (1 + (0.10 + 0.10)) + 100 = 820&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If Kelvin then earns a power increase, his base health increases by 50, and his max health becomes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;HP_{Max} = (600 + 50) \times (1 + (0.10 + 0.10)) + 100 = 880&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Regaining Health ==&lt;br /&gt;
{{Main|Healing|Health Regen}}&lt;br /&gt;
From the start of the match, heroes will regenerate health slowly over time, typically 2 HP per second. This rate can be increased by purchasing items such as [[Extra Regen]] and [[Fortitude]]. Health can be regained quickly by returning to the spawn room of the team&#039;s base. Various hero abilities can heal, such as Dynamo&#039;s [[Dynamo#3(3)_Rejuvenating_Aurora|Rejuvenating Aurora]]. Sources of [[Spirit Lifesteal|spirit]] and [[Bullet Lifesteal|bullet lifesteal]] grant heroes the opportunity to regain health by dealing the respective damage type.&lt;br /&gt;
&lt;br /&gt;
== Health Bars ==&lt;br /&gt;
[[File:600 vs 1300.png|thumb|A 600 HP Kelvin right next to a 1300 HP Kelvin]]&lt;br /&gt;
&amp;lt;!--[[File:New healthbar.png|thumb|Examples of how health and shields are displayed in the alternate health bar]]--&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Health Bars&#039;&#039;&#039; are visual indicators of a hero&#039;s current health, located just above each hero. Health bars consist of filled rectangles, arranged in rows of up to ten. Enemy heroes are displayed with orange rectangles, while allied heroes use an off-white color. As the hero loses health, the rectangles deplete horizontally. Each full rectangle represents 100 health, and each full row represents 1000 health.&lt;br /&gt;
&lt;br /&gt;
The small yellow and blue bars above the health bar represent bullet [[Damage Shield|shields]] and spirit shields, respectively.&lt;br /&gt;
&lt;br /&gt;
=== Alternate health bar ===&lt;br /&gt;
The alternate health bar is an experimental bar that can be tested by players. This bar always has the same size, and the health count is displayed as markings instead of rectangles. One marking represents 100 health, and a line represents 500 health (from left to right).&lt;br /&gt;
&lt;br /&gt;
This health bar also indicates when other players have ultimates ready, represented by an eye icon that fills up when the ultimate is recharged. Shields are represented by a purple bar.&lt;br /&gt;
&lt;br /&gt;
The alternate health bar can be enabled with the console command &amp;lt;code&amp;gt;citadel_unit_status_use_new true&amp;lt;/code&amp;gt;. The command can be added with a &amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt; to the game launch options on Steam to be enabled on startup.&lt;br /&gt;
&lt;br /&gt;
== Sources ==&lt;br /&gt;
All [[Vitality|vitality items]] provide an increase in base health based on the player&#039;s total investment in the category.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Souls&lt;br /&gt;
!Health Increases&lt;br /&gt;
|-&lt;br /&gt;
|{{Souls|800}}&lt;br /&gt;
| +8%&lt;br /&gt;
|-&lt;br /&gt;
|{{Souls|1,600}}&lt;br /&gt;
| +10%&lt;br /&gt;
|-&lt;br /&gt;
|{{Souls|2,400}}&lt;br /&gt;
| +13%&lt;br /&gt;
|-&lt;br /&gt;
|{{Souls|3,200}}&lt;br /&gt;
| +17%&lt;br /&gt;
|-&lt;br /&gt;
|{{Souls|4,800}}&lt;br /&gt;
| +22%&lt;br /&gt;
|-&lt;br /&gt;
|{{Souls|7,200}}&lt;br /&gt;
| +27%&lt;br /&gt;
|-&lt;br /&gt;
|{{Souls|9,600}}&lt;br /&gt;
| +32%&lt;br /&gt;
|-&lt;br /&gt;
|{{Souls|16,000}}&lt;br /&gt;
| +36%&lt;br /&gt;
|-&lt;br /&gt;
|{{Souls|22,400}}&lt;br /&gt;
| +40%&lt;br /&gt;
|-&lt;br /&gt;
|{{Souls|28,800}}&lt;br /&gt;
| +44%&lt;br /&gt;
|}&lt;br /&gt;
The following items explicitly grant increased bonus health:&lt;br /&gt;
{{Item stat table|Bonus Health}}&lt;br /&gt;
	&lt;br /&gt;
=== Map spawns ===&lt;br /&gt;
* [[Golden Statue]]s can provide a permanent increase: +&amp;lt;b&amp;gt;20&amp;lt;/b&amp;gt; Health before 10 minutes, +&amp;lt;b&amp;gt;30&amp;lt;/b&amp;gt; Health before 30 minutes, or +&amp;lt;b&amp;gt;40&amp;lt;/b&amp;gt; Health after 30 minutes.&lt;br /&gt;
* [[Powerup]] runes can provide a temporary Survival buff that provides +&#039;&#039;&#039;200&#039;&#039;&#039; to +&#039;&#039;&#039;700&#039;&#039;&#039; Bonus Health for 160 seconds (scaling with game time from 5 to 40 minutes).&lt;br /&gt;
* [[Mid-Boss]] can provide a temporary Rejuvenator Credit buff that provides +200 Bonus Health for four minutes or until death, whichever comes first.&lt;br /&gt;
&lt;br /&gt;
{{Stat navbox}}&lt;br /&gt;
{{Navbox gameplay}}&lt;/div&gt;</summary>
		<author><name>SerpentofSet</name></author>
	</entry>
	<entry>
		<id>https://deadlock.wiki/Health?diff=46914</id>
		<title>Health</title>
		<link rel="alternate" type="text/html" href="https://deadlock.wiki/Health?diff=46914"/>
		<updated>2025-11-18T14:34:09Z</updated>

		<summary type="html">&lt;p&gt;SerpentofSet: /* Maximum Health */ Moved from &amp;quot;PI&amp;quot; (power increase) terminology to &amp;quot;boons&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Vitality Icon.png|right|frameless]]&lt;br /&gt;
&#039;&#039;&#039;Health&#039;&#039;&#039; measures the amount of [[damage]] that can be taken before [[Death|dying]], and is fundamental to all [[heroes]] and units. Units and players with health are allowed to interact with the game, and consequently when your health drops to zero you are disabled from playing until respawning.&lt;br /&gt;
&lt;br /&gt;
== Maximum Health ==&lt;br /&gt;
[[File:Kelvin base health 1.png|thumb|263x263px|Kelvin&#039;s starting base health at {{Souls|0}}]]&lt;br /&gt;
The formula for maximum health &amp;lt;math&amp;gt;HP_{Max}&amp;lt;/math&amp;gt; is: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
HP_{Max} = \left( HP_0 + N_{Boons} \times HP_{Boon} \right) \times (1 + \textstyle\sum HP_{Shop} ) + \textstyle\sum HP_{Bonus}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &amp;lt;math&amp;gt;HP_0&amp;lt;/math&amp;gt; is hero-specific starting base health, &amp;lt;math&amp;gt;N_{Boons}&amp;lt;/math&amp;gt; is the number of [[Boons]] earned, &amp;lt;math&amp;gt;HP_{Boon}&amp;lt;/math&amp;gt; is hero-specific added base health from each boon, &amp;lt;math&amp;gt;HP_{Shop}&amp;lt;/math&amp;gt; are implicit base health percent increases from [[Vitality]] items, and &amp;lt;math&amp;gt;HP_{Bonus}&amp;lt;/math&amp;gt; are bonus health flat increases from various sources. &amp;lt;math&amp;gt;HP_{Shop}&amp;lt;/math&amp;gt; starts at 8% and increases with additional investment in the vitality items category.&lt;br /&gt;
&lt;br /&gt;
Note that the max health presented in-game is rounded up to the nearest integer.&lt;br /&gt;
&lt;br /&gt;
=== Base Health ===&lt;br /&gt;
[[File:Kelvin base health 2.png|thumb|247x247px|Kelvin&#039;s base health at {{Souls|20.0k}}]]&lt;br /&gt;
Base health is the sum of starting base health and added base health from boons. It is scaled by the inherent increased base health stats of Vitality items. Different heroes have different amounts of starting base health and added base health from boons.&lt;br /&gt;
&lt;br /&gt;
Values referenced from [[Hero Attributes Table]].&lt;br /&gt;
&lt;br /&gt;
{{#invoke:HeroDataArrays|heroHealthTable}}&lt;br /&gt;
&lt;br /&gt;
{{#invoke:LevelTables|write_power_increase_table|MaxHealth|title=Base Health based on Boons}}&lt;br /&gt;
&lt;br /&gt;
=== Bonus Health ===&lt;br /&gt;
[[File:Survival Power buff.png|thumb|179x179px|Survival power-up located in the training map]]&lt;br /&gt;
Bonus health comes from a variety of sources:&lt;br /&gt;
&lt;br /&gt;
* Items are the most common source of added bonus health. Bonus health can be found on all three item types, but Vitality items tend to provide the largest amounts.&lt;br /&gt;
* [[Golden Statue|Golden statues]] occasionally drop small but permanent added bonus health buffs: &#039;&#039;&#039;+20&#039;&#039;&#039; before 10 minutes, &#039;&#039;&#039;+30&#039;&#039;&#039; between 10 and 30 minutes, or &#039;&#039;&#039;+40&#039;&#039;&#039; after 30 minutes.&lt;br /&gt;
* The [[Powerup|Survival Powerup]] immediately grants &#039;&#039;&#039;+200&#039;&#039;&#039; to &#039;&#039;&#039;+700&#039;&#039;&#039; bonus health (scales as game goes on), but only for 160 seconds or until death.&lt;br /&gt;
* The [[Rejuvenator]] immediately grants &#039;&#039;&#039;+200&#039;&#039;&#039; bonus health, but only for 4 minutes or until death.&lt;br /&gt;
&lt;br /&gt;
Bonus Health is not scaled by increased base health. Bonus health is added after the increased base health multiplier has been applied to base health.&lt;br /&gt;
&lt;br /&gt;
=== Miscellaneous Health Modifiers ===&lt;br /&gt;
With the purchase of [[Glass Cannon]], the hero&#039;s max health is reduced by 15% after the above calculations.&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
[[Kelvin]] begins the game with 600 Base HP. If Kelvin purchases two tier 1 vitality items, one of which grants 100 bonus health, his max health becomes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;HP_{Max} = 600 \times (1 + (0.10 + 0.10)) + 100 = 820&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If Kelvin then earns a power increase, his base health increases by 50, and his max health becomes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;HP_{Max} = (600 + 50) \times (1 + (0.10 + 0.10)) + 100 = 880&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Regaining Health ==&lt;br /&gt;
{{Main|Healing|Health Regen}}&lt;br /&gt;
From the start of the match, heroes will regenerate health slowly over time, typically 2 HP per second. This rate can be increased by purchasing items such as [[Extra Regen]] and [[Fortitude]]. Health can be regained quickly by returning to the spawn room of the team&#039;s base. Various hero abilities can heal, such as Dynamo&#039;s [[Dynamo#3(3)_Rejuvenating_Aurora|Rejuvenating Aurora]]. Sources of [[Spirit Lifesteal|spirit]] and [[Bullet Lifesteal|bullet lifesteal]] grant heroes the opportunity to regain health by dealing the respective damage type.&lt;br /&gt;
&lt;br /&gt;
== Health Bars ==&lt;br /&gt;
[[File:600 vs 1300.png|thumb|A 600 HP Kelvin right next to a 1300 HP Kelvin]]&lt;br /&gt;
&amp;lt;!--[[File:New healthbar.png|thumb|Examples of how health and shields are displayed in the alternate health bar]]--&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Health Bars&#039;&#039;&#039; are visual indicators of a hero&#039;s current health, located just above each hero. Health bars consist of filled rectangles, arranged in rows of up to ten. Enemy heroes are displayed with orange rectangles, while allied heroes use an off-white color. As the hero loses health, the rectangles deplete horizontally. Each full rectangle represents 100 health, and each full row represents 1000 health.&lt;br /&gt;
&lt;br /&gt;
The small yellow and blue bars above the health bar represent bullet [[Damage Shield|shields]] and spirit shields, respectively.&lt;br /&gt;
&lt;br /&gt;
=== Alternate health bar ===&lt;br /&gt;
The alternate health bar is an experimental bar that can be tested by players. This bar always has the same size, and the health count is displayed as markings instead of rectangles. One marking represents 100 health, and a line represents 500 health (from left to right).&lt;br /&gt;
&lt;br /&gt;
This health bar also indicates when other players have ultimates ready, represented by an eye icon that fills up when the ultimate is recharged. Shields are represented by a purple bar.&lt;br /&gt;
&lt;br /&gt;
The alternate health bar can be enabled with the console command &amp;lt;code&amp;gt;citadel_unit_status_use_new true&amp;lt;/code&amp;gt;. The command can be added with a &amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt; to the game launch options on Steam to be enabled on startup.&lt;br /&gt;
&lt;br /&gt;
== Sources ==&lt;br /&gt;
All [[Vitality|vitality items]] provide an increase in base health based on the player&#039;s total investment in the category.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Souls&lt;br /&gt;
!Health Increases&lt;br /&gt;
|-&lt;br /&gt;
|{{Souls|800}}&lt;br /&gt;
| +8%&lt;br /&gt;
|-&lt;br /&gt;
|{{Souls|1,600}}&lt;br /&gt;
| +10%&lt;br /&gt;
|-&lt;br /&gt;
|{{Souls|2,400}}&lt;br /&gt;
| +13%&lt;br /&gt;
|-&lt;br /&gt;
|{{Souls|3,200}}&lt;br /&gt;
| +17%&lt;br /&gt;
|-&lt;br /&gt;
|{{Souls|4,800}}&lt;br /&gt;
| +22%&lt;br /&gt;
|-&lt;br /&gt;
|{{Souls|7,200}}&lt;br /&gt;
| +27%&lt;br /&gt;
|-&lt;br /&gt;
|{{Souls|9,600}}&lt;br /&gt;
| +32%&lt;br /&gt;
|-&lt;br /&gt;
|{{Souls|16,000}}&lt;br /&gt;
| +36%&lt;br /&gt;
|-&lt;br /&gt;
|{{Souls|22,400}}&lt;br /&gt;
| +40%&lt;br /&gt;
|-&lt;br /&gt;
|{{Souls|28,800}}&lt;br /&gt;
| +44%&lt;br /&gt;
|}&lt;br /&gt;
The following items explicitly grant increased bonus health:&lt;br /&gt;
{{Item stat table|Bonus Health}}&lt;br /&gt;
	&lt;br /&gt;
=== Map spawns ===&lt;br /&gt;
* [[Golden Statue]]s can provide a permanent increase: +&amp;lt;b&amp;gt;20&amp;lt;/b&amp;gt; Health before 10 minutes, +&amp;lt;b&amp;gt;30&amp;lt;/b&amp;gt; Health before 30 minutes, or +&amp;lt;b&amp;gt;40&amp;lt;/b&amp;gt; Health after 30 minutes.&lt;br /&gt;
* [[Powerup]] runes can provide a temporary Survival buff that provides +&#039;&#039;&#039;200&#039;&#039;&#039; to +&#039;&#039;&#039;700&#039;&#039;&#039; Bonus Health for 160 seconds (scaling with game time from 5 to 40 minutes).&lt;br /&gt;
* [[Mid-Boss]] can provide a temporary Rejuvenator Credit buff that provides +200 Bonus Health for four minutes or until death, whichever comes first.&lt;br /&gt;
&lt;br /&gt;
{{Stat navbox}}&lt;br /&gt;
{{Navbox gameplay}}&lt;/div&gt;</summary>
		<author><name>SerpentofSet</name></author>
	</entry>
	<entry>
		<id>https://deadlock.wiki/Health?diff=43462</id>
		<title>Health</title>
		<link rel="alternate" type="text/html" href="https://deadlock.wiki/Health?diff=43462"/>
		<updated>2025-11-13T19:27:54Z</updated>

		<summary type="html">&lt;p&gt;SerpentofSet: /* Maximum Health */ Added a note about investment increasing the scaling of vitality item increased health&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Vitality Icon.png|right|frameless]]&lt;br /&gt;
&#039;&#039;&#039;Health&#039;&#039;&#039; measures the amount of [[damage]] that can be taken before [[Death|dying]], and is fundamental to all [[heroes]] and units. Units and players with health are allowed to interact with the game, and consequently when your health drops to zero you are disabled from playing until respawning.&lt;br /&gt;
&lt;br /&gt;
== Maximum Health ==&lt;br /&gt;
[[File:Kelvin base health 1.png|thumb|263x263px|Kelvin&#039;s starting base health at {{Souls|0}}]]&lt;br /&gt;
The formula for maximum health &amp;lt;math&amp;gt;HP_{Max}&amp;lt;/math&amp;gt; is: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
HP_{Max} = \left( HP_0 + N_{PI} \times PI_{HP} \right) \times (1 + \textstyle\sum HP_{Shop} ) + \textstyle\sum HP_{Bonus}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &amp;lt;math&amp;gt;HP_0&amp;lt;/math&amp;gt; is hero-specific starting base health, &amp;lt;math&amp;gt;N_{PI}&amp;lt;/math&amp;gt; is the number of [[Boons]] earned, &amp;lt;math&amp;gt;PI_{HP}&amp;lt;/math&amp;gt; is hero-specific added base health from each boon, &amp;lt;math&amp;gt;HP_{Shop}&amp;lt;/math&amp;gt; are implicit base health percent increases from [[Vitality]] items, and &amp;lt;math&amp;gt;HP_{Bonus}&amp;lt;/math&amp;gt; are bonus health flat increases from various sources. &amp;lt;math&amp;gt;HP_{Shop}&amp;lt;/math&amp;gt; starts at 8% and increases with additional investment in the vitality items category.&lt;br /&gt;
&lt;br /&gt;
Note that the max health presented in-game is rounded up to the nearest integer.&lt;br /&gt;
&lt;br /&gt;
=== Base Health ===&lt;br /&gt;
[[File:Kelvin base health 2.png|thumb|247x247px|Kelvin&#039;s base health at {{Souls|20.0k}}]]&lt;br /&gt;
Base health is the sum of starting base health and added base health from boons. It is scaled by the inherent increased base health stats of Vitality items. Different heroes have different amounts of starting base health and added base health from boons.&lt;br /&gt;
&lt;br /&gt;
Values referenced from [[Hero Attributes Table]].&lt;br /&gt;
&lt;br /&gt;
{{#invoke:HeroDataArrays|heroHealthTable}}&lt;br /&gt;
&lt;br /&gt;
{{#invoke:LevelTables|write_power_increase_table|MaxHealth|title=Base Health based on Boons}}&lt;br /&gt;
&lt;br /&gt;
=== Bonus Health ===&lt;br /&gt;
[[File:Survival Power buff.png|thumb|179x179px|Survival power-up located in the training map]]&lt;br /&gt;
Bonus health comes from a variety of sources:&lt;br /&gt;
&lt;br /&gt;
* Items are the most common source of added bonus health. Bonus health can be found on all three item types, but Vitality items tend to provide the largest amounts.&lt;br /&gt;
* [[Golden Statue|Golden statues]] occasionally drop small but permanent added bonus health buffs: &#039;&#039;&#039;+20&#039;&#039;&#039; before 10 minutes, &#039;&#039;&#039;+30&#039;&#039;&#039; between 10 and 30 minutes, or &#039;&#039;&#039;+40&#039;&#039;&#039; after 30 minutes.&lt;br /&gt;
* The [[Powerup|Survival Powerup]] immediately grants &#039;&#039;&#039;+200&#039;&#039;&#039; to &#039;&#039;&#039;+700&#039;&#039;&#039; bonus health (scales as game goes on), but only for 160 seconds or until death.&lt;br /&gt;
* The [[Rejuvenator]] immediately grants &#039;&#039;&#039;+200&#039;&#039;&#039; bonus health, but only for 4 minutes or until death.&lt;br /&gt;
&lt;br /&gt;
Bonus Health is not scaled by increased base health. Bonus health is added after the increased base health multiplier has been applied to base health.&lt;br /&gt;
&lt;br /&gt;
=== Miscellaneous Health Modifiers ===&lt;br /&gt;
With the purchase of [[Glass Cannon]], the hero&#039;s max health is reduced by 15% after the above calculations.&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
[[Kelvin]] begins the game with 600 Base HP. If Kelvin purchases two tier 1 vitality items, one of which grants 100 bonus health, his max health becomes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;HP_{Max} = 600 \times (1 + (0.10 + 0.10)) + 100 = 820&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If Kelvin then earns a power increase, his base health increases by 50, and his max health becomes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;HP_{Max} = (600 + 50) \times (1 + (0.10 + 0.10)) + 100 = 880&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Regaining Health ==&lt;br /&gt;
{{Main|Healing|Health Regen}}&lt;br /&gt;
From the start of the match, heroes will regenerate health slowly over time, typically 2 HP per second. This rate can be increased by purchasing items such as [[Extra Regen]] and [[Fortitude]]. Health can be regained quickly by returning to the spawn room of the team&#039;s base. Various hero abilities can heal, such as Dynamo&#039;s [[Dynamo#3(3)_Rejuvenating_Aurora|Rejuvenating Aurora]]. Sources of [[Spirit Lifesteal|spirit]] and [[Bullet Lifesteal|bullet lifesteal]] grant heroes the opportunity to regain health by dealing the respective damage type.&lt;br /&gt;
&lt;br /&gt;
== Health Bars ==&lt;br /&gt;
[[File:600 vs 1300.png|thumb|A 600 HP Kelvin right next to a 1300 HP Kelvin]]&lt;br /&gt;
&amp;lt;!--[[File:New healthbar.png|thumb|Examples of how health and shields are displayed in the alternate health bar]]--&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Health Bars&#039;&#039;&#039; are visual indicators of a hero&#039;s current health, located just above each hero. Health bars consist of filled rectangles, arranged in rows of up to ten. Enemy heroes are displayed with orange rectangles, while allied heroes use an off-white color. As the hero loses health, the rectangles deplete horizontally. Each full rectangle represents 100 health, and each full row represents 1000 health.&lt;br /&gt;
&lt;br /&gt;
The small yellow and blue bars above the health bar represent bullet [[Damage Shield|shields]] and spirit shields, respectively.&lt;br /&gt;
&lt;br /&gt;
=== Alternate health bar ===&lt;br /&gt;
The alternate health bar is an experimental bar that can be tested by players. This bar always has the same size, and the health count is displayed as markings instead of rectangles. One marking represents 100 health, and a line represents 500 health (from left to right).&lt;br /&gt;
&lt;br /&gt;
This health bar also indicates when other players have ultimates ready, represented by an eye icon that fills up when the ultimate is recharged. Shields are represented by a purple bar.&lt;br /&gt;
&lt;br /&gt;
The alternate health bar can be enabled with the console command &amp;lt;code&amp;gt;citadel_unit_status_use_new true&amp;lt;/code&amp;gt;. The command can be added with a &amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt; to the game launch options on Steam to be enabled on startup.&lt;br /&gt;
&lt;br /&gt;
== Sources ==&lt;br /&gt;
All [[Vitality|vitality items]] provide an increase in base health based on the player&#039;s total investment in the category.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Souls&lt;br /&gt;
!Health Increases&lt;br /&gt;
|-&lt;br /&gt;
|{{Souls|800}}&lt;br /&gt;
| +8%&lt;br /&gt;
|-&lt;br /&gt;
|{{Souls|1,600}}&lt;br /&gt;
| +10%&lt;br /&gt;
|-&lt;br /&gt;
|{{Souls|2,400}}&lt;br /&gt;
| +13%&lt;br /&gt;
|-&lt;br /&gt;
|{{Souls|3,200}}&lt;br /&gt;
| +17%&lt;br /&gt;
|-&lt;br /&gt;
|{{Souls|4,800}}&lt;br /&gt;
| +22%&lt;br /&gt;
|-&lt;br /&gt;
|{{Souls|7,200}}&lt;br /&gt;
| +27%&lt;br /&gt;
|-&lt;br /&gt;
|{{Souls|9,600}}&lt;br /&gt;
| +32%&lt;br /&gt;
|-&lt;br /&gt;
|{{Souls|16,000}}&lt;br /&gt;
| +36%&lt;br /&gt;
|-&lt;br /&gt;
|{{Souls|22,400}}&lt;br /&gt;
| +40%&lt;br /&gt;
|-&lt;br /&gt;
|{{Souls|28,800}}&lt;br /&gt;
| +44%&lt;br /&gt;
|}&lt;br /&gt;
The following items explicitly grant increased bonus health:&lt;br /&gt;
{{Item stat table|Bonus Health}}&lt;br /&gt;
	&lt;br /&gt;
=== Map spawns ===&lt;br /&gt;
* [[Golden Statue]]s can provide a permanent increase: +&amp;lt;b&amp;gt;20&amp;lt;/b&amp;gt; Health before 10 minutes, +&amp;lt;b&amp;gt;30&amp;lt;/b&amp;gt; Health before 30 minutes, or +&amp;lt;b&amp;gt;40&amp;lt;/b&amp;gt; Health after 30 minutes.&lt;br /&gt;
* [[Powerup]] runes can provide a temporary Survival buff that provides +&#039;&#039;&#039;200&#039;&#039;&#039; to +&#039;&#039;&#039;700&#039;&#039;&#039; Bonus Health for 160 seconds (scaling with game time from 5 to 40 minutes).&lt;br /&gt;
* [[Mid-Boss]] can provide a temporary Rejuvenator Credit buff that provides +200 Bonus Health for four minutes or until death, whichever comes first.&lt;br /&gt;
&lt;br /&gt;
{{Stat navbox}}&lt;br /&gt;
{{Navbox gameplay}}&lt;/div&gt;</summary>
		<author><name>SerpentofSet</name></author>
	</entry>
	<entry>
		<id>https://deadlock.wiki/Health?diff=43461</id>
		<title>Health</title>
		<link rel="alternate" type="text/html" href="https://deadlock.wiki/Health?diff=43461"/>
		<updated>2025-11-13T19:24:45Z</updated>

		<summary type="html">&lt;p&gt;SerpentofSet: /* Example */ Edited to reflect new vitality item % increases based on investment&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Vitality Icon.png|right|frameless]]&lt;br /&gt;
&#039;&#039;&#039;Health&#039;&#039;&#039; measures the amount of [[damage]] that can be taken before [[Death|dying]], and is fundamental to all [[heroes]] and units. Units and players with health are allowed to interact with the game, and consequently when your health drops to zero you are disabled from playing until respawning.&lt;br /&gt;
&lt;br /&gt;
== Maximum Health ==&lt;br /&gt;
[[File:Kelvin base health 1.png|thumb|263x263px|Kelvin&#039;s starting base health at {{Souls|0}}]]&lt;br /&gt;
The formula for maximum health &amp;lt;math&amp;gt;HP_{Max}&amp;lt;/math&amp;gt; is: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
HP_{Max} = \left( HP_0 + N_{PI} \times PI_{HP} \right) \times (1 + \textstyle\sum HP_{Shop} ) + \textstyle\sum HP_{Bonus}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &amp;lt;math&amp;gt;HP_0&amp;lt;/math&amp;gt; is hero-specific starting base health, &amp;lt;math&amp;gt;N_{PI}&amp;lt;/math&amp;gt; is the number of [[Boons]] earned, &amp;lt;math&amp;gt;PI_{HP}&amp;lt;/math&amp;gt; is hero-specific added base health from each boon, &amp;lt;math&amp;gt;HP_{Shop}&amp;lt;/math&amp;gt; are implicit base health percent increases from [[Vitality]] items, and &amp;lt;math&amp;gt;HP_{Bonus}&amp;lt;/math&amp;gt; are bonus health flat increases from various sources. Note that the max health presented in-game is rounded up to the nearest integer.&lt;br /&gt;
&lt;br /&gt;
=== Base Health ===&lt;br /&gt;
[[File:Kelvin base health 2.png|thumb|247x247px|Kelvin&#039;s base health at {{Souls|20.0k}}]]&lt;br /&gt;
Base health is the sum of starting base health and added base health from boons. It is scaled by the inherent increased base health stats of Vitality items. Different heroes have different amounts of starting base health and added base health from boons.&lt;br /&gt;
&lt;br /&gt;
Values referenced from [[Hero Attributes Table]].&lt;br /&gt;
&lt;br /&gt;
{{#invoke:HeroDataArrays|heroHealthTable}}&lt;br /&gt;
&lt;br /&gt;
{{#invoke:LevelTables|write_power_increase_table|MaxHealth|title=Base Health based on Boons}}&lt;br /&gt;
&lt;br /&gt;
=== Bonus Health ===&lt;br /&gt;
[[File:Survival Power buff.png|thumb|179x179px|Survival power-up located in the training map]]&lt;br /&gt;
Bonus health comes from a variety of sources:&lt;br /&gt;
&lt;br /&gt;
* Items are the most common source of added bonus health. Bonus health can be found on all three item types, but Vitality items tend to provide the largest amounts.&lt;br /&gt;
* [[Golden Statue|Golden statues]] occasionally drop small but permanent added bonus health buffs: &#039;&#039;&#039;+20&#039;&#039;&#039; before 10 minutes, &#039;&#039;&#039;+30&#039;&#039;&#039; between 10 and 30 minutes, or &#039;&#039;&#039;+40&#039;&#039;&#039; after 30 minutes.&lt;br /&gt;
* The [[Powerup|Survival Powerup]] immediately grants &#039;&#039;&#039;+200&#039;&#039;&#039; to &#039;&#039;&#039;+700&#039;&#039;&#039; bonus health (scales as game goes on), but only for 160 seconds or until death.&lt;br /&gt;
* The [[Rejuvenator]] immediately grants &#039;&#039;&#039;+200&#039;&#039;&#039; bonus health, but only for 4 minutes or until death.&lt;br /&gt;
&lt;br /&gt;
Bonus Health is not scaled by increased base health. Bonus health is added after the increased base health multiplier has been applied to base health.&lt;br /&gt;
&lt;br /&gt;
=== Miscellaneous Health Modifiers ===&lt;br /&gt;
With the purchase of [[Glass Cannon]], the hero&#039;s max health is reduced by 15% after the above calculations.&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
[[Kelvin]] begins the game with 600 Base HP. If Kelvin purchases two tier 1 vitality items, one of which grants 100 bonus health, his max health becomes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;HP_{Max} = 600 \times (1 + (0.10 + 0.10)) + 100 = 820&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If Kelvin then earns a power increase, his base health increases by 50, and his max health becomes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;HP_{Max} = (600 + 50) \times (1 + (0.10 + 0.10)) + 100 = 880&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Regaining Health ==&lt;br /&gt;
{{Main|Healing|Health Regen}}&lt;br /&gt;
From the start of the match, heroes will regenerate health slowly over time, typically 2 HP per second. This rate can be increased by purchasing items such as [[Extra Regen]] and [[Fortitude]]. Health can be regained quickly by returning to the spawn room of the team&#039;s base. Various hero abilities can heal, such as Dynamo&#039;s [[Dynamo#3(3)_Rejuvenating_Aurora|Rejuvenating Aurora]]. Sources of [[Spirit Lifesteal|spirit]] and [[Bullet Lifesteal|bullet lifesteal]] grant heroes the opportunity to regain health by dealing the respective damage type.&lt;br /&gt;
&lt;br /&gt;
== Health Bars ==&lt;br /&gt;
[[File:600 vs 1300.png|thumb|A 600 HP Kelvin right next to a 1300 HP Kelvin]]&lt;br /&gt;
&amp;lt;!--[[File:New healthbar.png|thumb|Examples of how health and shields are displayed in the alternate health bar]]--&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Health Bars&#039;&#039;&#039; are visual indicators of a hero&#039;s current health, located just above each hero. Health bars consist of filled rectangles, arranged in rows of up to ten. Enemy heroes are displayed with orange rectangles, while allied heroes use an off-white color. As the hero loses health, the rectangles deplete horizontally. Each full rectangle represents 100 health, and each full row represents 1000 health.&lt;br /&gt;
&lt;br /&gt;
The small yellow and blue bars above the health bar represent bullet [[Damage Shield|shields]] and spirit shields, respectively.&lt;br /&gt;
&lt;br /&gt;
=== Alternate health bar ===&lt;br /&gt;
The alternate health bar is an experimental bar that can be tested by players. This bar always has the same size, and the health count is displayed as markings instead of rectangles. One marking represents 100 health, and a line represents 500 health (from left to right).&lt;br /&gt;
&lt;br /&gt;
This health bar also indicates when other players have ultimates ready, represented by an eye icon that fills up when the ultimate is recharged. Shields are represented by a purple bar.&lt;br /&gt;
&lt;br /&gt;
The alternate health bar can be enabled with the console command &amp;lt;code&amp;gt;citadel_unit_status_use_new true&amp;lt;/code&amp;gt;. The command can be added with a &amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt; to the game launch options on Steam to be enabled on startup.&lt;br /&gt;
&lt;br /&gt;
== Sources ==&lt;br /&gt;
All [[Vitality|vitality items]] provide an increase in base health based on the player&#039;s total investment in the category.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Souls&lt;br /&gt;
!Health Increases&lt;br /&gt;
|-&lt;br /&gt;
|{{Souls|800}}&lt;br /&gt;
| +8%&lt;br /&gt;
|-&lt;br /&gt;
|{{Souls|1,600}}&lt;br /&gt;
| +10%&lt;br /&gt;
|-&lt;br /&gt;
|{{Souls|2,400}}&lt;br /&gt;
| +13%&lt;br /&gt;
|-&lt;br /&gt;
|{{Souls|3,200}}&lt;br /&gt;
| +17%&lt;br /&gt;
|-&lt;br /&gt;
|{{Souls|4,800}}&lt;br /&gt;
| +22%&lt;br /&gt;
|-&lt;br /&gt;
|{{Souls|7,200}}&lt;br /&gt;
| +27%&lt;br /&gt;
|-&lt;br /&gt;
|{{Souls|9,600}}&lt;br /&gt;
| +32%&lt;br /&gt;
|-&lt;br /&gt;
|{{Souls|16,000}}&lt;br /&gt;
| +36%&lt;br /&gt;
|-&lt;br /&gt;
|{{Souls|22,400}}&lt;br /&gt;
| +40%&lt;br /&gt;
|-&lt;br /&gt;
|{{Souls|28,800}}&lt;br /&gt;
| +44%&lt;br /&gt;
|}&lt;br /&gt;
The following items explicitly grant increased bonus health:&lt;br /&gt;
{{Item stat table|Bonus Health}}&lt;br /&gt;
	&lt;br /&gt;
=== Map spawns ===&lt;br /&gt;
* [[Golden Statue]]s can provide a permanent increase: +&amp;lt;b&amp;gt;20&amp;lt;/b&amp;gt; Health before 10 minutes, +&amp;lt;b&amp;gt;30&amp;lt;/b&amp;gt; Health before 30 minutes, or +&amp;lt;b&amp;gt;40&amp;lt;/b&amp;gt; Health after 30 minutes.&lt;br /&gt;
* [[Powerup]] runes can provide a temporary Survival buff that provides +&#039;&#039;&#039;200&#039;&#039;&#039; to +&#039;&#039;&#039;700&#039;&#039;&#039; Bonus Health for 160 seconds (scaling with game time from 5 to 40 minutes).&lt;br /&gt;
* [[Mid-Boss]] can provide a temporary Rejuvenator Credit buff that provides +200 Bonus Health for four minutes or until death, whichever comes first.&lt;br /&gt;
&lt;br /&gt;
{{Stat navbox}}&lt;br /&gt;
{{Navbox gameplay}}&lt;/div&gt;</summary>
		<author><name>SerpentofSet</name></author>
	</entry>
	<entry>
		<id>https://deadlock.wiki/Health?diff=43460</id>
		<title>Health</title>
		<link rel="alternate" type="text/html" href="https://deadlock.wiki/Health?diff=43460"/>
		<updated>2025-11-13T19:11:45Z</updated>

		<summary type="html">&lt;p&gt;SerpentofSet: /* Maximum Health */ Future-proofing the example by removing the specific items listed and just giving an unnamed +100 bonus health item&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Vitality Icon.png|right|frameless]]&lt;br /&gt;
&#039;&#039;&#039;Health&#039;&#039;&#039; measures the amount of [[damage]] that can be taken before [[Death|dying]], and is fundamental to all [[heroes]] and units. Units and players with health are allowed to interact with the game, and consequently when your health drops to zero you are disabled from playing until respawning.&lt;br /&gt;
&lt;br /&gt;
== Maximum Health ==&lt;br /&gt;
[[File:Kelvin base health 1.png|thumb|263x263px|Kelvin&#039;s starting base health at {{Souls|0}}]]&lt;br /&gt;
The formula for maximum health &amp;lt;math&amp;gt;HP_{Max}&amp;lt;/math&amp;gt; is: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
HP_{Max} = \left( HP_0 + N_{PI} \times PI_{HP} \right) \times (1 + \textstyle\sum HP_{Shop} ) + \textstyle\sum HP_{Bonus}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &amp;lt;math&amp;gt;HP_0&amp;lt;/math&amp;gt; is hero-specific starting base health, &amp;lt;math&amp;gt;N_{PI}&amp;lt;/math&amp;gt; is the number of [[Boons]] earned, &amp;lt;math&amp;gt;PI_{HP}&amp;lt;/math&amp;gt; is hero-specific added base health from each boon, &amp;lt;math&amp;gt;HP_{Shop}&amp;lt;/math&amp;gt; are implicit base health percent increases from [[Vitality]] items, and &amp;lt;math&amp;gt;HP_{Bonus}&amp;lt;/math&amp;gt; are bonus health flat increases from various sources. Note that the max health presented in-game is rounded up to the nearest integer.&lt;br /&gt;
&lt;br /&gt;
=== Base Health ===&lt;br /&gt;
[[File:Kelvin base health 2.png|thumb|247x247px|Kelvin&#039;s base health at {{Souls|20.0k}}]]&lt;br /&gt;
Base health is the sum of starting base health and added base health from boons. It is scaled by the inherent increased base health stats of Vitality items. Different heroes have different amounts of starting base health and added base health from boons.&lt;br /&gt;
&lt;br /&gt;
Values referenced from [[Hero Attributes Table]].&lt;br /&gt;
&lt;br /&gt;
{{#invoke:HeroDataArrays|heroHealthTable}}&lt;br /&gt;
&lt;br /&gt;
{{#invoke:LevelTables|write_power_increase_table|MaxHealth|title=Base Health based on Boons}}&lt;br /&gt;
&lt;br /&gt;
=== Bonus Health ===&lt;br /&gt;
[[File:Survival Power buff.png|thumb|179x179px|Survival power-up located in the training map]]&lt;br /&gt;
Bonus health comes from a variety of sources:&lt;br /&gt;
&lt;br /&gt;
* Items are the most common source of added bonus health. Bonus health can be found on all three item types, but Vitality items tend to provide the largest amounts.&lt;br /&gt;
* [[Golden Statue|Golden statues]] occasionally drop small but permanent added bonus health buffs: &#039;&#039;&#039;+20&#039;&#039;&#039; before 10 minutes, &#039;&#039;&#039;+30&#039;&#039;&#039; between 10 and 30 minutes, or &#039;&#039;&#039;+40&#039;&#039;&#039; after 30 minutes.&lt;br /&gt;
* The [[Powerup|Survival Powerup]] immediately grants &#039;&#039;&#039;+200&#039;&#039;&#039; to &#039;&#039;&#039;+700&#039;&#039;&#039; bonus health (scales as game goes on), but only for 160 seconds or until death.&lt;br /&gt;
* The [[Rejuvenator]] immediately grants &#039;&#039;&#039;+200&#039;&#039;&#039; bonus health, but only for 4 minutes or until death.&lt;br /&gt;
&lt;br /&gt;
Bonus Health is not scaled by increased base health. Bonus health is added after the increased base health multiplier has been applied to base health.&lt;br /&gt;
&lt;br /&gt;
=== Miscellaneous Health Modifiers ===&lt;br /&gt;
With the purchase of [[Glass Cannon]], the hero&#039;s max health is reduced by 15% after the above calculations.&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
[[Kelvin]] begins the game with 600 Base HP. If Kelvin purchases two tier 1 vitality items, one of which grants 100 bonus health, his max health becomes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;HP_{Max} = 600 \times (1 + (0.11 + 0.11)) + 100 = 832&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If Kelvin then earns a power increase, his base health increases by 50, and his max health becomes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;HP_{Max} = (600 + 50) \times (1 + (0.11 + 0.11)) + 100 = 893&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Regaining Health ==&lt;br /&gt;
{{Main|Healing|Health Regen}}&lt;br /&gt;
From the start of the match, heroes will regenerate health slowly over time, typically 2 HP per second. This rate can be increased by purchasing items such as [[Extra Regen]] and [[Fortitude]]. Health can be regained quickly by returning to the spawn room of the team&#039;s base. Various hero abilities can heal, such as Dynamo&#039;s [[Dynamo#3(3)_Rejuvenating_Aurora|Rejuvenating Aurora]]. Sources of [[Spirit Lifesteal|spirit]] and [[Bullet Lifesteal|bullet lifesteal]] grant heroes the opportunity to regain health by dealing the respective damage type.&lt;br /&gt;
&lt;br /&gt;
== Health Bars ==&lt;br /&gt;
[[File:600 vs 1300.png|thumb|A 600 HP Kelvin right next to a 1300 HP Kelvin]]&lt;br /&gt;
&amp;lt;!--[[File:New healthbar.png|thumb|Examples of how health and shields are displayed in the alternate health bar]]--&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Health Bars&#039;&#039;&#039; are visual indicators of a hero&#039;s current health, located just above each hero. Health bars consist of filled rectangles, arranged in rows of up to ten. Enemy heroes are displayed with orange rectangles, while allied heroes use an off-white color. As the hero loses health, the rectangles deplete horizontally. Each full rectangle represents 100 health, and each full row represents 1000 health.&lt;br /&gt;
&lt;br /&gt;
The small yellow and blue bars above the health bar represent bullet [[Damage Shield|shields]] and spirit shields, respectively.&lt;br /&gt;
&lt;br /&gt;
=== Alternate health bar ===&lt;br /&gt;
The alternate health bar is an experimental bar that can be tested by players. This bar always has the same size, and the health count is displayed as markings instead of rectangles. One marking represents 100 health, and a line represents 500 health (from left to right).&lt;br /&gt;
&lt;br /&gt;
This health bar also indicates when other players have ultimates ready, represented by an eye icon that fills up when the ultimate is recharged. Shields are represented by a purple bar.&lt;br /&gt;
&lt;br /&gt;
The alternate health bar can be enabled with the console command &amp;lt;code&amp;gt;citadel_unit_status_use_new true&amp;lt;/code&amp;gt;. The command can be added with a &amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt; to the game launch options on Steam to be enabled on startup.&lt;br /&gt;
&lt;br /&gt;
== Sources ==&lt;br /&gt;
All [[Vitality|vitality items]] provide an increase in base health based on the player&#039;s total investment in the category.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Souls&lt;br /&gt;
!Health Increases&lt;br /&gt;
|-&lt;br /&gt;
|{{Souls|800}}&lt;br /&gt;
| +8%&lt;br /&gt;
|-&lt;br /&gt;
|{{Souls|1,600}}&lt;br /&gt;
| +10%&lt;br /&gt;
|-&lt;br /&gt;
|{{Souls|2,400}}&lt;br /&gt;
| +13%&lt;br /&gt;
|-&lt;br /&gt;
|{{Souls|3,200}}&lt;br /&gt;
| +17%&lt;br /&gt;
|-&lt;br /&gt;
|{{Souls|4,800}}&lt;br /&gt;
| +22%&lt;br /&gt;
|-&lt;br /&gt;
|{{Souls|7,200}}&lt;br /&gt;
| +27%&lt;br /&gt;
|-&lt;br /&gt;
|{{Souls|9,600}}&lt;br /&gt;
| +32%&lt;br /&gt;
|-&lt;br /&gt;
|{{Souls|16,000}}&lt;br /&gt;
| +36%&lt;br /&gt;
|-&lt;br /&gt;
|{{Souls|22,400}}&lt;br /&gt;
| +40%&lt;br /&gt;
|-&lt;br /&gt;
|{{Souls|28,800}}&lt;br /&gt;
| +44%&lt;br /&gt;
|}&lt;br /&gt;
The following items explicitly grant increased bonus health:&lt;br /&gt;
{{Item stat table|Bonus Health}}&lt;br /&gt;
	&lt;br /&gt;
=== Map spawns ===&lt;br /&gt;
* [[Golden Statue]]s can provide a permanent increase: +&amp;lt;b&amp;gt;20&amp;lt;/b&amp;gt; Health before 10 minutes, +&amp;lt;b&amp;gt;30&amp;lt;/b&amp;gt; Health before 30 minutes, or +&amp;lt;b&amp;gt;40&amp;lt;/b&amp;gt; Health after 30 minutes.&lt;br /&gt;
* [[Powerup]] runes can provide a temporary Survival buff that provides +&#039;&#039;&#039;200&#039;&#039;&#039; to +&#039;&#039;&#039;700&#039;&#039;&#039; Bonus Health for 160 seconds (scaling with game time from 5 to 40 minutes).&lt;br /&gt;
* [[Mid-Boss]] can provide a temporary Rejuvenator Credit buff that provides +200 Bonus Health for four minutes or until death, whichever comes first.&lt;br /&gt;
&lt;br /&gt;
{{Stat navbox}}&lt;br /&gt;
{{Navbox gameplay}}&lt;/div&gt;</summary>
		<author><name>SerpentofSet</name></author>
	</entry>
	<entry>
		<id>https://deadlock.wiki/Ability_Cooldown?diff=13088</id>
		<title>Ability Cooldown</title>
		<link rel="alternate" type="text/html" href="https://deadlock.wiki/Ability_Cooldown?diff=13088"/>
		<updated>2024-10-25T16:43:47Z</updated>

		<summary type="html">&lt;p&gt;SerpentofSet: /* Overview */ Charged abilities have a second &amp;quot;cooldown&amp;quot; which I&amp;#039;ve added notes on here and expanded to it&amp;#039;s own section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Stub}}&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
The &#039;&#039;&#039;Ability Cooldown&#039;&#039;&#039; of an ability is a period of time after being used that the ability cannot be used again. Cooldowns range from a few seconds, as in [[Lady Geist|Lady Geist&#039;s]] Malice, to a few minutes, as [[Dynamo|Dynamo&#039;s]] Singularity.  Ability cooldowns can be reduced by acquiring the Cooldown Reduction stat, which reduces the cooldown by a percentage of base [[ability]] time.&lt;br /&gt;
&lt;br /&gt;
===Charged Abilities===&lt;br /&gt;
Some abilities can acquire multiple charges. In those cases, the ability cooldown represents the time for a charge to become available again after being used. This should not be confused with the time between charges, which describes the delay after using a charge that a different charge can be used.&lt;br /&gt;
&lt;br /&gt;
===Stacking===&lt;br /&gt;
Despite being presented in-game as +X% Cooldown Reduction, different sources of cooldown reduction stack multiplicatively, not additively. With &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; different sources of cooldown reduction, total cooldown reduction is given by:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;CR_{Total} = 1 - \prod_{i=1}^n (1 - CR_i)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example, with 12% Cooldown Reduction from [[Diviner&#039;s Kevlar]] and 16% Cooldown Reduction from [[Improved Cooldown]], total cooldown reduction is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;CR_{Total} = 1 - (1 - 0.12) \times (1 - 0.16) \approx 26%&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sources of Cooldown Reduction ==&lt;br /&gt;
[[Golden Statue|Golden Statues]] have a chance to drop a permanent Cooldown Reduction buff.{{#invoke:ItemsByStat|tablefy|CooldownReduction|+X% Cooldown Reduction|%}}In addition to the generic cooldown reduction items listed above, [[Superior Cooldown]] provides +32% Imbued Ability Cooldown Reduction for a single chosen ability and +24% Non-Imbued Ability Cooldown Reduction for those abilities not chosen.{{Stats}}&lt;/div&gt;</summary>
		<author><name>SerpentofSet</name></author>
	</entry>
	<entry>
		<id>https://deadlock.wiki/Health_Regen?diff=13087</id>
		<title>Health Regen</title>
		<link rel="alternate" type="text/html" href="https://deadlock.wiki/Health_Regen?diff=13087"/>
		<updated>2024-10-25T16:28:28Z</updated>

		<summary type="html">&lt;p&gt;SerpentofSet: /* Starting Base Regeneration */ added a table for starting regen&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Health Regen&#039;&#039;&#039; is a stat that [[heroes]] start with and can obtain more through [[items]]. Per second, heroes will regenerate their amount of health regeneration as [[health]]. It must not be confused with healing, which refers to the ability of helping both the player and other players regain health.&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
As players take damage, their health will slowly recover over time. While [[Death|dead]], players will not be able to regenerate health. Standing in base will quickly regenerate the player&#039;s health, allowing them recover from fights. Most sources of health regen are additive (Health regen), with a few instead being multiplicative (Max Health regen). both types of regen do not increase by leveling up.&lt;br /&gt;
&lt;br /&gt;
== Starting Base Regeneration ==&lt;br /&gt;
[[File:Regen2.png|thumb|Health Regeneration on the player&#039;s HUD]]&lt;br /&gt;
{{#invoke:HeroDataArrays|heroRegenTable}}&lt;br /&gt;
&lt;br /&gt;
== Sources ==&lt;br /&gt;
=== Health Regen ===&lt;br /&gt;
{{Item stat table|Health Regen}}&lt;br /&gt;
&lt;br /&gt;
=== Max Health Regen ===&lt;br /&gt;
{{Item stat table|Max Health Regen}}&lt;br /&gt;
&lt;br /&gt;
=== Map spawns for Max Health Regen ===&lt;br /&gt;
* Power up runes can provide a temporary Survival buff that provides +&amp;lt;b&amp;gt;1&amp;lt;/b&amp;gt;% Max Health Regen for 160 seconds.&lt;br /&gt;
&lt;br /&gt;
{{Stat navbox}}&lt;/div&gt;</summary>
		<author><name>SerpentofSet</name></author>
	</entry>
	<entry>
		<id>https://deadlock.wiki/Spirit_Lifesteal?diff=13086</id>
		<title>Spirit Lifesteal</title>
		<link rel="alternate" type="text/html" href="https://deadlock.wiki/Spirit_Lifesteal?diff=13086"/>
		<updated>2024-10-25T16:26:17Z</updated>

		<summary type="html">&lt;p&gt;SerpentofSet: /* Sources of Spirit Lifesteal */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Otheruses|the stat|the item|Spirit Lifesteal (item)}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Spirit Lifesteal&#039;&#039;&#039; is a stat that causes a percentage of spirit damage dealt to be gained as health.&lt;br /&gt;
&lt;br /&gt;
==Sources of Spirit Lifesteal==&lt;br /&gt;
{{#invoke:ItemsByStat|tablefy|AbilityLifestealPercentHero|+X% Spirit Lifesteal|%}}&lt;br /&gt;
{{Stats}}&lt;/div&gt;</summary>
		<author><name>SerpentofSet</name></author>
	</entry>
	<entry>
		<id>https://deadlock.wiki/Module:HeroDataArrays?diff=13084</id>
		<title>Module:HeroDataArrays</title>
		<link rel="alternate" type="text/html" href="https://deadlock.wiki/Module:HeroDataArrays?diff=13084"/>
		<updated>2024-10-25T16:22:58Z</updated>

		<summary type="html">&lt;p&gt;SerpentofSet: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local allHeroData = mw.loadJsonData(&amp;quot;Data:HeroData.json&amp;quot;)&lt;br /&gt;
local inGameHeroData = {}&lt;br /&gt;
&lt;br /&gt;
-- Just get heroes that are playable&lt;br /&gt;
for i, heroData in pairs(allHeroData) do&lt;br /&gt;
	if heroData[&amp;quot;IsDisabled&amp;quot;] == false and heroData[&amp;quot;InDevelopment&amp;quot;] == false then&lt;br /&gt;
		table.insert(inGameHeroData, heroData)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- heroDataArray takes as argument a table of any length containing keys or &lt;br /&gt;
-- paths of keys in the HeroData JSON, e.g. {Name, MaxHealth, LevelScaling&amp;gt;Health}.&lt;br /&gt;
-- A path of keys should be specified as such, with the &amp;quot;&amp;gt;&amp;quot; character separating&lt;br /&gt;
-- subsequent keys.&lt;br /&gt;
local heroDataArray = function(args)&lt;br /&gt;
	local outData = {}&lt;br /&gt;
	&lt;br /&gt;
	for i, heroData in ipairs(inGameHeroData) do			-- Iterate over each hero&lt;br /&gt;
		local out = {}										-- First creating a table to hold data&lt;br /&gt;
		for j, key in pairs(args) do						-- Iterate over each key:&lt;br /&gt;
			if string.find(key, &amp;quot;&amp;gt;&amp;quot;) ~= nil then			-- If the key is actually a path of keys,&lt;br /&gt;
				local node = heroData           			-- start with the biggest node heroData, and&lt;br /&gt;
				for k in string.gmatch(key, &amp;quot;([^&amp;gt;]+)&amp;quot;) do	-- iterate over each key, splitting on &amp;quot;&amp;gt;&amp;quot;,&lt;br /&gt;
					if node[k] ~= nil then					-- trying the key as a string e.g. &amp;quot;1&amp;quot;,&lt;br /&gt;
						node = node[k]						&lt;br /&gt;
					else									-- else using the key as numeric,&lt;br /&gt;
						node = node[tonumber(k)]&lt;br /&gt;
					end										-- drilling down the JSON node after node&lt;br /&gt;
				end&lt;br /&gt;
				out[key] = node								-- until outputting the final node&lt;br /&gt;
			else&lt;br /&gt;
				out[key] = heroData[key]					-- or just grab the data if not a path&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		outData[heroData[&amp;quot;Name&amp;quot;]] = out						-- Save data in the big table of heroes&lt;br /&gt;
	end&lt;br /&gt;
	return(outData)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.heroHealthTable = function(frame)&lt;br /&gt;
	-- Pull data&lt;br /&gt;
	heroHealthData = heroDataArray({&amp;quot;Name&amp;quot;, &amp;quot;MaxHealth&amp;quot;, &amp;quot;LevelScaling&amp;gt;MaxHealth&amp;quot;})&lt;br /&gt;
&lt;br /&gt;
	-- Input table will be called a, output wikitable will be called z&lt;br /&gt;
	-- From a to z, haha get it&lt;br /&gt;
	z = &amp;quot;{| class=\&amp;quot;wikitable sortable mw-collapsible\&amp;quot; style=\&amp;quot;text-align:center\&amp;quot; \n&amp;quot;..&lt;br /&gt;
		&amp;quot;|+ Hero Base Health Stats \n&amp;quot;..&lt;br /&gt;
		&amp;quot;! Hero !! Starting !! Added per PI !! At Max PI \n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	-- Iterate over heroes adding a new row to the wikitable for each&lt;br /&gt;
	for i,a in pairs(heroHealthData) do&lt;br /&gt;
		z = z..&lt;br /&gt;
			&amp;quot;|- \n&amp;quot;..&lt;br /&gt;
			&amp;quot;| style=\&amp;quot;text-align:left;\&amp;quot; | &amp;quot;..&lt;br /&gt;
				frame:expandTemplate{title=&amp;quot;PageRef&amp;quot;, args={a[&amp;quot;Name&amp;quot;]}}..&lt;br /&gt;
				&amp;quot; || &amp;quot;..a[&amp;quot;MaxHealth&amp;quot;]..&amp;quot; || +&amp;quot;..a[&amp;quot;LevelScaling&amp;gt;MaxHealth&amp;quot;]..&amp;quot; || &amp;quot;..&lt;br /&gt;
				tostring(tonumber(a[&amp;quot;MaxHealth&amp;quot;])+tonumber(a[&amp;quot;LevelScaling&amp;gt;MaxHealth&amp;quot;])*14)..&amp;quot; \n&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Cap it off&lt;br /&gt;
	z = z..&amp;quot;|}&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	return z&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.heroRegenTable = function(frame)&lt;br /&gt;
	heroRegenData = heroDataArray({&amp;quot;Name&amp;quot;, &amp;quot;BaseHealthRegen&amp;quot;})&lt;br /&gt;
	&lt;br /&gt;
	z = &amp;quot;{| class=\&amp;quot;wikitable sortable mw-collapsible\&amp;quot; style=\&amp;quot;text-align:center\&amp;quot; \n&amp;quot;..&lt;br /&gt;
		&amp;quot;|+ Hero Base Health Regen \n&amp;quot;..&lt;br /&gt;
		&amp;quot;! Hero !! HP/s \n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	for i,a in pairs(heroRegenData) do&lt;br /&gt;
		z = z..&lt;br /&gt;
			&amp;quot;|- \n&amp;quot;..&lt;br /&gt;
			&amp;quot;| style=\&amp;quot;text-align:left;\&amp;quot; | &amp;quot;..&lt;br /&gt;
				frame:expandTemplate{title=&amp;quot;PageRef&amp;quot;, args={a[&amp;quot;Name&amp;quot;]}}..&lt;br /&gt;
				&amp;quot; || &amp;quot;..a[&amp;quot;BaseHealthRegen&amp;quot;]..&amp;quot; \n&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	z = z..&amp;quot;|}&amp;quot;&lt;br /&gt;
	return z&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.heroDpsTable = function(frame)&lt;br /&gt;
	heroDpsData = heroDataArray({&amp;quot;Name&amp;quot;,&amp;quot;ReloadSingle&amp;quot;,&amp;quot;ReloadDelay&amp;quot;,&amp;quot;ReloadTime&amp;quot;,&lt;br /&gt;
		&amp;quot;ClipSize&amp;quot;,&amp;quot;RoundsPerSecond&amp;quot;,&amp;quot;BulletDamage&amp;quot;,&amp;quot;BulletsPerShot&amp;quot;})&lt;br /&gt;
   &lt;br /&gt;
    mw.logObject(heroDpsData)&lt;br /&gt;
end&lt;br /&gt;
	&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>SerpentofSet</name></author>
	</entry>
	<entry>
		<id>https://deadlock.wiki/Module:HeroDataArrays/doc?diff=13081</id>
		<title>Module:HeroDataArrays/doc</title>
		<link rel="alternate" type="text/html" href="https://deadlock.wiki/Module:HeroDataArrays/doc?diff=13081"/>
		<updated>2024-10-25T16:16:00Z</updated>

		<summary type="html">&lt;p&gt;SerpentofSet: Created page with &amp;quot;== Overview == This module consists of one generic function, heroDataArray, and a series of functions that create specific wikitables using the output from heroDataArray.&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
This module consists of one generic function, heroDataArray, and a series of functions that create specific wikitables using the output from heroDataArray.&lt;/div&gt;</summary>
		<author><name>SerpentofSet</name></author>
	</entry>
	<entry>
		<id>https://deadlock.wiki/Module:HeroDataArrays?diff=13077</id>
		<title>Module:HeroDataArrays</title>
		<link rel="alternate" type="text/html" href="https://deadlock.wiki/Module:HeroDataArrays?diff=13077"/>
		<updated>2024-10-25T15:43:21Z</updated>

		<summary type="html">&lt;p&gt;SerpentofSet: key got renamed&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local allHeroData = mw.loadJsonData(&amp;quot;Data:HeroData.json&amp;quot;)&lt;br /&gt;
local inGameHeroData = {}&lt;br /&gt;
&lt;br /&gt;
-- Just get heroes that are playable&lt;br /&gt;
for i, heroData in pairs(allHeroData) do&lt;br /&gt;
	if heroData[&amp;quot;IsDisabled&amp;quot;] == false and heroData[&amp;quot;InDevelopment&amp;quot;] == false then&lt;br /&gt;
		table.insert(inGameHeroData, heroData)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- heroDataArray takes as argument a table of any length containing keys or &lt;br /&gt;
-- paths of keys in the HeroData JSON, e.g. {Name, MaxHealth, LevelScaling&amp;gt;Health}.&lt;br /&gt;
-- A path of keys should be specified as such, with the &amp;quot;&amp;gt;&amp;quot; character separating&lt;br /&gt;
-- subsequent keys.&lt;br /&gt;
local heroDataArray = function(args)&lt;br /&gt;
	local outData = {}&lt;br /&gt;
	&lt;br /&gt;
	for i, heroData in ipairs(inGameHeroData) do			-- Iterate over each hero&lt;br /&gt;
		local out = {}										-- First creating a table to hold data&lt;br /&gt;
		for j, key in pairs(args) do						-- Iterate over each key:&lt;br /&gt;
			if string.find(key, &amp;quot;&amp;gt;&amp;quot;) ~= nil then			-- If the key is actually a path of keys,&lt;br /&gt;
				local node = heroData           			-- start with the biggest node heroData, and&lt;br /&gt;
				for k in string.gmatch(key, &amp;quot;([^&amp;gt;]+)&amp;quot;) do	-- iterate over each key, splitting on &amp;quot;&amp;gt;&amp;quot;,&lt;br /&gt;
					if node[k] ~= nil then					-- trying the key as a string e.g. &amp;quot;1&amp;quot;,&lt;br /&gt;
						node = node[k]						&lt;br /&gt;
					else									-- else using the key as numeric,&lt;br /&gt;
						node = node[tonumber(k)]&lt;br /&gt;
					end										-- drilling down the JSON node after node&lt;br /&gt;
				end&lt;br /&gt;
				out[key] = node								-- until outputting the final node&lt;br /&gt;
			else&lt;br /&gt;
				out[key] = heroData[key]					-- or just grab the data if not a path&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		outData[heroData[&amp;quot;Name&amp;quot;]] = out						-- Save data in the big table of heroes&lt;br /&gt;
	end&lt;br /&gt;
	return(outData)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.heroHealthTable = function(frame)&lt;br /&gt;
	-- Pull data&lt;br /&gt;
	heroHealthData = heroDataArray({&amp;quot;Name&amp;quot;, &amp;quot;MaxHealth&amp;quot;, &amp;quot;LevelScaling&amp;gt;MaxHealth&amp;quot;})&lt;br /&gt;
&lt;br /&gt;
	-- Input table will be called a, output wikitable will be called z&lt;br /&gt;
	-- From a to z, haha get it&lt;br /&gt;
	z = &amp;quot;{| class=\&amp;quot;wikitable sortable mw-collapsible\&amp;quot; style=\&amp;quot;text-align:center\&amp;quot; \n&amp;quot;..&lt;br /&gt;
		&amp;quot;|+ Hero Base Health Stats \n&amp;quot;..&lt;br /&gt;
		&amp;quot;! Hero !! Starting !! Added per PI !! At Max PI \n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	-- Iterate over heroes adding a new row to the wikitable for each&lt;br /&gt;
	for i,a in pairs(heroHealthData) do&lt;br /&gt;
		z = z..&lt;br /&gt;
			&amp;quot;|- \n&amp;quot;..&lt;br /&gt;
			&amp;quot;| style=\&amp;quot;text-align:left;\&amp;quot; | &amp;quot;..&lt;br /&gt;
				frame:expandTemplate{title=&amp;quot;PageRef&amp;quot;, args={a[&amp;quot;Name&amp;quot;]}}..&lt;br /&gt;
				&amp;quot; || &amp;quot;..a[&amp;quot;MaxHealth&amp;quot;]..&amp;quot; || +&amp;quot;..a[&amp;quot;LevelScaling&amp;gt;MaxHealth&amp;quot;]..&amp;quot; || &amp;quot;..&lt;br /&gt;
				tostring(tonumber(a[&amp;quot;MaxHealth&amp;quot;])+tonumber(a[&amp;quot;LevelScaling&amp;gt;MaxHealth&amp;quot;])*14)..&amp;quot; \n&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Cap it off&lt;br /&gt;
	z = z..&amp;quot;|}&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	return z&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.heroDpsTable = function(frame)&lt;br /&gt;
	heroDpsData = heroDataArray({&amp;quot;Name&amp;quot;,&amp;quot;ReloadSingle&amp;quot;,&amp;quot;ReloadDelay&amp;quot;,&amp;quot;ReloadTime&amp;quot;,&lt;br /&gt;
		&amp;quot;ClipSize&amp;quot;,&amp;quot;RoundsPerSecond&amp;quot;,&amp;quot;BulletDamage&amp;quot;,&amp;quot;BulletsPerShot&amp;quot;})&lt;br /&gt;
   &lt;br /&gt;
    mw.logObject(heroDpsData)&lt;br /&gt;
end&lt;br /&gt;
	&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>SerpentofSet</name></author>
	</entry>
	<entry>
		<id>https://deadlock.wiki/User:SerpentofSet?diff=12904</id>
		<title>User:SerpentofSet</title>
		<link rel="alternate" type="text/html" href="https://deadlock.wiki/User:SerpentofSet?diff=12904"/>
		<updated>2024-10-23T22:08:38Z</updated>

		<summary type="html">&lt;p&gt;SerpentofSet: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible&amp;quot;&amp;gt;I am bad at the game so I edit the wiki&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==How to Debug in Scribunto==&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{#invoke:Test|a|sep=;|b}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
=p.main(&lt;br /&gt;
   mw.getCurrentFrame():newChild{&lt;br /&gt;
      title=&amp;quot;Module:Test&amp;quot;,&lt;br /&gt;
      args={&amp;quot;a&amp;quot;,[&amp;quot;sep&amp;quot;]=&amp;quot;;&amp;quot;,&amp;quot;b&amp;quot;}&lt;br /&gt;
   }&lt;br /&gt;
)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
===Simplified version===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
=p.main{&lt;br /&gt;
   args={&amp;quot;a&amp;quot;,[&amp;quot;sep&amp;quot;]=&amp;quot;;&amp;quot;,&amp;quot;b&amp;quot;}&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==What&#039;s a sandbox==&lt;br /&gt;
===DPS calcs===&lt;br /&gt;
&lt;br /&gt;
    def _calc_dps(self, dps_stats, type=&#039;burst&#039;):&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;Calculates Burst or Sustained DPS of a weapon&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        # Burst, not to be confused with burst as in burst fire, but rather&lt;br /&gt;
        # a burst of damage where delta time is 0&lt;br /&gt;
        # sustained has delta time of infinity&lt;br /&gt;
        # meaning, sustained takes into account time-to-empty clip and reload time&lt;br /&gt;
        # All reload actions have ReloadDelay played first,&lt;br /&gt;
        # but typically only single bullet reloads have a non-zero delay&lt;br /&gt;
        # i.e.&lt;br /&gt;
        # ReloadDelay of .5,&lt;br /&gt;
        # ReloadTime of 1,&lt;br /&gt;
        # ClipSize of 10,&lt;br /&gt;
        # =time to reload 1 bullet is 1.5s, time to reload 10 bullets is 10.5s&lt;br /&gt;
        # BurstInterShotInterval represents time between shots in a burst&lt;br /&gt;
        # Abbreivated dictionary for easier access&lt;br /&gt;
        d = dps_stats.copy()&lt;br /&gt;
        cycle_time = 1 / d[&#039;RoundsPerSecond&#039;]&lt;br /&gt;
        total_cycle_time = cycle_time + d[&#039;BulletsPerBurst&#039;] * d[&#039;BurstInterShotInterval&#039;]&lt;br /&gt;
        if type == &#039;burst&#039;:&lt;br /&gt;
            return (&lt;br /&gt;
                d[&#039;BulletDamage&#039;] * d[&#039;BulletsPerShot&#039;] * d[&#039;BulletsPerBurst&#039;] / (total_cycle_time)&lt;br /&gt;
            )&lt;br /&gt;
        elif type == &#039;sustained&#039;:&lt;br /&gt;
            if d[&#039;ReloadSingle&#039;]:&lt;br /&gt;
                # If reloading 1 bullet at a time, reload time is actually per bullet&lt;br /&gt;
                time_to_reload = d[&#039;ReloadTime&#039;] * d[&#039;ClipSize&#039;]&lt;br /&gt;
            else:&lt;br /&gt;
                time_to_reload = d[&#039;ReloadTime&#039;]&lt;br /&gt;
            time_to_reload += d[&#039;ReloadDelay&#039;]&lt;br /&gt;
            time_to_empty_clip = d[&#039;ClipSize&#039;] / d[&#039;BulletsPerBurst&#039;] * (total_cycle_time)&lt;br /&gt;
            # More bullets per shot doesn&#039;t consume more bullets in the clip,&lt;br /&gt;
            # so think of it as bullet per bullet&lt;br /&gt;
            # BulletsPerBurst does consume more bullets in the clip&lt;br /&gt;
            damage_from_clip = d[&#039;BulletDamage&#039;] * d[&#039;BulletsPerShot&#039;] * d[&#039;ClipSize&#039;]&lt;br /&gt;
            return damage_from_clip / (time_to_empty_clip + time_to_reload)&lt;br /&gt;
        else:&lt;br /&gt;
===Input for JS?===&lt;br /&gt;
&amp;lt;input id=&amp;quot;spirit&amp;quot; type=&amp;quot;number&amp;quot; value=&amp;quot;100&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;input id=&amp;quot;pi&amp;quot; type=&amp;quot;number&amp;quot; value=&amp;quot;14&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Light/Dark Mode Fiddling===&lt;br /&gt;
[[File:Siphon Life.png|class=abilityicon]]&lt;br /&gt;
[[File:Tornado.png|class=abilityicon]]&lt;/div&gt;</summary>
		<author><name>SerpentofSet</name></author>
	</entry>
	<entry>
		<id>https://deadlock.wiki/User:SerpentofSet/Testbox?diff=12903</id>
		<title>User:SerpentofSet/Testbox</title>
		<link rel="alternate" type="text/html" href="https://deadlock.wiki/User:SerpentofSet/Testbox?diff=12903"/>
		<updated>2024-10-23T22:05:24Z</updated>

		<summary type="html">&lt;p&gt;SerpentofSet: makin it&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 2em;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;infobox&amp;quot; style=&amp;quot;border-left:solid 5px #2F2F2F;border-right:solid 5px #2F2F2F;border-top:solid 2px #2F2F2F;border-bottom:solid 0px #2F2F2F; font-family: &#039;PT Serif&#039;,&#039;Palatino&#039;,&#039;FreeSerif&#039;,&#039;Liberation Serif&#039;, serif;padding:0px;border-radius: 13px;color: #FFEFD7;width: 270px; background-color: #2F2F2F; font-weight: bold&amp;quot;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;color: #FFEFD7; background-color: #2F2F2F; font-size: 25px; font-family: &#039;PT Serif&#039;,&#039;Palatino&#039;,&#039;FreeSerif&#039;,&#039;Liberation Serif&#039;, serif; font-weight: bold; text-shadow: 1.2px 2px 3px black, 1.2px 1.2px 0.1px #A69885;border-bottom: none&amp;quot; |&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: flex; justify-content: space-between&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width: 50px;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;infobox-hero-name&amp;quot; style=&amp;quot;margin-top:4px;font-family:&#039;Forevs Demo&#039;, &#039;PT Serif&#039;,&#039;Palatino&#039;,serif;&#039;;&amp;quot;&amp;gt;Abrams&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding-left: 10px;&amp;quot;&amp;gt;[[Image:Abrams_MM.png|frameless|center|35px]]&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot;style=&amp;quot;margin:auto;text-align:center;border:none;&amp;quot; |&amp;lt;div style=&amp;quot;overflow:hidden;border-radius: 15px;background-image: linear-gradient(#A69885, #72695A);padding:0px; background-color:#a79986;text-align:center;max-width:190px;height: auto;margin:auto;box-shadow: 2px 2px 8px rgba(0, 0, 0, 0.7);&amp;quot;&amp;gt;[[File:Abrams card.png|190px]]&amp;lt;/div&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
! Charges into close combat&lt;br /&gt;
|- &lt;br /&gt;
! Voice Actor: IDK&lt;br /&gt;
|-&lt;br /&gt;
! Release Date: A while ago&lt;br /&gt;
|-&lt;br /&gt;
! Last Updated: Like, something&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
{| class=&amp;quot;wikitable mw-collapsible mw-collapsed&amp;quot; style=&amp;quot;width:100%&amp;quot;&lt;br /&gt;
|+ Stats&lt;br /&gt;
!&lt;br /&gt;
|-&lt;br /&gt;
! Hidden? || 100 &amp;lt;/div&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>SerpentofSet</name></author>
	</entry>
	<entry>
		<id>https://deadlock.wiki/User:SerpentofSet?diff=12902</id>
		<title>User:SerpentofSet</title>
		<link rel="alternate" type="text/html" href="https://deadlock.wiki/User:SerpentofSet?diff=12902"/>
		<updated>2024-10-23T22:03:26Z</updated>

		<summary type="html">&lt;p&gt;SerpentofSet: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible&amp;quot;&amp;gt;I am bad at the game so I edit the wiki&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 2em;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;infobox&amp;quot; style=&amp;quot;border-left:solid 5px #2F2F2F;border-right:solid 5px #2F2F2F;border-top:solid 2px #2F2F2F;border-bottom:solid 0px #2F2F2F; font-family: &#039;PT Serif&#039;,&#039;Palatino&#039;,&#039;FreeSerif&#039;,&#039;Liberation Serif&#039;, serif;padding:0px;border-radius: 13px;color: #FFEFD7;width: 270px; background-color: #2F2F2F; font-weight: bold&amp;quot;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;color: #FFEFD7; background-color: #2F2F2F; font-size: 25px; font-family: &#039;PT Serif&#039;,&#039;Palatino&#039;,&#039;FreeSerif&#039;,&#039;Liberation Serif&#039;, serif; font-weight: bold; text-shadow: 1.2px 2px 3px black, 1.2px 1.2px 0.1px #A69885;border-bottom: none&amp;quot; |&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: flex; justify-content: space-between&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width: 50px;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;infobox-hero-name&amp;quot; style=&amp;quot;margin-top:4px;font-family:&#039;Forevs Demo&#039;, &#039;PT Serif&#039;,&#039;Palatino&#039;,serif;&#039;;&amp;quot;&amp;gt;Abrams&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding-left: 10px;&amp;quot;&amp;gt;[[Image:Abrams_MM.png|frameless|center|35px]]&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot;style=&amp;quot;margin:auto;text-align:center;border:none;&amp;quot; |&amp;lt;div style=&amp;quot;overflow:hidden;border-radius: 15px;background-image: linear-gradient(#A69885, #72695A);padding:0px; background-color:#a79986;text-align:center;max-width:190px;height: auto;margin:auto;box-shadow: 2px 2px 8px rgba(0, 0, 0, 0.7);&amp;quot;&amp;gt;[[File:Abrams card.png|190px]]&amp;lt;/div&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
! Charges into close combat&lt;br /&gt;
|- &lt;br /&gt;
! Voice Actor: IDK&lt;br /&gt;
|-&lt;br /&gt;
! Release Date: A while ago&lt;br /&gt;
|-&lt;br /&gt;
! Last Updated: Like, something&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
{| class=&amp;quot;wikitable mw-collapsible&amp;quot; style=&amp;quot;width:100%&amp;quot;&lt;br /&gt;
|+ Stats&lt;br /&gt;
!&lt;br /&gt;
|-&lt;br /&gt;
! Hidden? || 100 &amp;lt;/div&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
==How to Debug in Scribunto==&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{#invoke:Test|a|sep=;|b}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
=p.main(&lt;br /&gt;
   mw.getCurrentFrame():newChild{&lt;br /&gt;
      title=&amp;quot;Module:Test&amp;quot;,&lt;br /&gt;
      args={&amp;quot;a&amp;quot;,[&amp;quot;sep&amp;quot;]=&amp;quot;;&amp;quot;,&amp;quot;b&amp;quot;}&lt;br /&gt;
   }&lt;br /&gt;
)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
===Simplified version===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
=p.main{&lt;br /&gt;
   args={&amp;quot;a&amp;quot;,[&amp;quot;sep&amp;quot;]=&amp;quot;;&amp;quot;,&amp;quot;b&amp;quot;}&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==What&#039;s a sandbox==&lt;br /&gt;
===DPS calcs===&lt;br /&gt;
&lt;br /&gt;
    def _calc_dps(self, dps_stats, type=&#039;burst&#039;):&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;Calculates Burst or Sustained DPS of a weapon&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        # Burst, not to be confused with burst as in burst fire, but rather&lt;br /&gt;
        # a burst of damage where delta time is 0&lt;br /&gt;
        # sustained has delta time of infinity&lt;br /&gt;
        # meaning, sustained takes into account time-to-empty clip and reload time&lt;br /&gt;
&lt;br /&gt;
        # All reload actions have ReloadDelay played first,&lt;br /&gt;
        # but typically only single bullet reloads have a non-zero delay&lt;br /&gt;
        # i.e.&lt;br /&gt;
        # ReloadDelay of .5,&lt;br /&gt;
        # ReloadTime of 1,&lt;br /&gt;
        # ClipSize of 10,&lt;br /&gt;
        # =time to reload 1 bullet is 1.5s, time to reload 10 bullets is 10.5s&lt;br /&gt;
&lt;br /&gt;
        # BurstInterShotInterval represents time between shots in a burst&lt;br /&gt;
&lt;br /&gt;
        # Abbreivated dictionary for easier access&lt;br /&gt;
        d = dps_stats.copy()&lt;br /&gt;
&lt;br /&gt;
        cycle_time = 1 / d[&#039;RoundsPerSecond&#039;]&lt;br /&gt;
        total_cycle_time = cycle_time + d[&#039;BulletsPerBurst&#039;] * d[&#039;BurstInterShotInterval&#039;]&lt;br /&gt;
&lt;br /&gt;
        if type == &#039;burst&#039;:&lt;br /&gt;
            return (&lt;br /&gt;
                d[&#039;BulletDamage&#039;] * d[&#039;BulletsPerShot&#039;] * d[&#039;BulletsPerBurst&#039;] / (total_cycle_time)&lt;br /&gt;
            )&lt;br /&gt;
&lt;br /&gt;
        elif type == &#039;sustained&#039;:&lt;br /&gt;
            if d[&#039;ReloadSingle&#039;]:&lt;br /&gt;
                # If reloading 1 bullet at a time, reload time is actually per bullet&lt;br /&gt;
                time_to_reload = d[&#039;ReloadTime&#039;] * d[&#039;ClipSize&#039;]&lt;br /&gt;
            else:&lt;br /&gt;
                time_to_reload = d[&#039;ReloadTime&#039;]&lt;br /&gt;
            time_to_reload += d[&#039;ReloadDelay&#039;]&lt;br /&gt;
            time_to_empty_clip = d[&#039;ClipSize&#039;] / d[&#039;BulletsPerBurst&#039;] * (total_cycle_time)&lt;br /&gt;
            # More bullets per shot doesn&#039;t consume more bullets in the clip,&lt;br /&gt;
            # so think of it as bullet per bullet&lt;br /&gt;
            # BulletsPerBurst does consume more bullets in the clip&lt;br /&gt;
            damage_from_clip = d[&#039;BulletDamage&#039;] * d[&#039;BulletsPerShot&#039;] * d[&#039;ClipSize&#039;]&lt;br /&gt;
            return damage_from_clip / (time_to_empty_clip + time_to_reload)&lt;br /&gt;
&lt;br /&gt;
        else:&lt;br /&gt;
===Input for JS?===&lt;br /&gt;
&amp;lt;input id=&amp;quot;spirit&amp;quot; type=&amp;quot;number&amp;quot; value=&amp;quot;100&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;input id=&amp;quot;pi&amp;quot; type=&amp;quot;number&amp;quot; value=&amp;quot;14&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Light/Dark Mode Fiddling===&lt;br /&gt;
[[File:Siphon Life.png|class=abilityicon]]&lt;br /&gt;
[[File:Tornado.png|class=abilityicon]]&lt;/div&gt;</summary>
		<author><name>SerpentofSet</name></author>
	</entry>
	<entry>
		<id>https://deadlock.wiki/User:SerpentofSet?diff=12901</id>
		<title>User:SerpentofSet</title>
		<link rel="alternate" type="text/html" href="https://deadlock.wiki/User:SerpentofSet?diff=12901"/>
		<updated>2024-10-23T22:01:40Z</updated>

		<summary type="html">&lt;p&gt;SerpentofSet: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible&amp;quot;&amp;gt;I am bad at the game so I edit the wiki&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin-left: 2em;&amp;quot;&amp;gt;&lt;br /&gt;
{| class=&amp;quot;infobox&amp;quot; style=&amp;quot;border-left:solid 5px #2F2F2F;border-right:solid 5px #2F2F2F;border-top:solid 2px #2F2F2F;border-bottom:solid 0px #2F2F2F; font-family: &#039;PT Serif&#039;,&#039;Palatino&#039;,&#039;FreeSerif&#039;,&#039;Liberation Serif&#039;, serif;padding:0px;border-radius: 13px;color: #FFEFD7;width: 270px; background-color: #2F2F2F; font-weight: bold&amp;quot;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;color: #FFEFD7; background-color: #2F2F2F; font-size: 25px; font-family: &#039;PT Serif&#039;,&#039;Palatino&#039;,&#039;FreeSerif&#039;,&#039;Liberation Serif&#039;, serif; font-weight: bold; text-shadow: 1.2px 2px 3px black, 1.2px 1.2px 0.1px #A69885;border-bottom: none&amp;quot; |&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: flex; justify-content: space-between&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width: 50px;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;infobox-hero-name&amp;quot; style=&amp;quot;margin-top:4px;font-family:&#039;Forevs Demo&#039;, &#039;PT Serif&#039;,&#039;Palatino&#039;,serif;&#039;;&amp;quot;&amp;gt;Abrams&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding-left: 10px;&amp;quot;&amp;gt;[[Image:Abrams_MM.png|frameless|center|35px]]&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot;style=&amp;quot;margin:auto;text-align:center;border:none;&amp;quot; |&amp;lt;div style=&amp;quot;overflow:hidden;border-radius: 15px;background-image: linear-gradient(#A69885, #72695A);padding:0px; background-color:#a79986;text-align:center;max-width:190px;height: auto;margin:auto;box-shadow: 2px 2px 8px rgba(0, 0, 0, 0.7);&amp;quot;&amp;gt;[[File:Abrams card.png|190px]]&amp;lt;/div&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
! Charges into close combat&lt;br /&gt;
|- &lt;br /&gt;
! Voice Actor: IDK&lt;br /&gt;
|-&lt;br /&gt;
! Release Date: A while ago&lt;br /&gt;
|-&lt;br /&gt;
! Last Updated: Like, something&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
{| class=&amp;quot;wikitable mw-collapsible&amp;quot;&lt;br /&gt;
!&lt;br /&gt;
|-&lt;br /&gt;
! Hidden? &amp;lt;/div&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
==How to Debug in Scribunto==&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{#invoke:Test|a|sep=;|b}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
=p.main(&lt;br /&gt;
   mw.getCurrentFrame():newChild{&lt;br /&gt;
      title=&amp;quot;Module:Test&amp;quot;,&lt;br /&gt;
      args={&amp;quot;a&amp;quot;,[&amp;quot;sep&amp;quot;]=&amp;quot;;&amp;quot;,&amp;quot;b&amp;quot;}&lt;br /&gt;
   }&lt;br /&gt;
)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
===Simplified version===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
=p.main{&lt;br /&gt;
   args={&amp;quot;a&amp;quot;,[&amp;quot;sep&amp;quot;]=&amp;quot;;&amp;quot;,&amp;quot;b&amp;quot;}&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==What&#039;s a sandbox==&lt;br /&gt;
===DPS calcs===&lt;br /&gt;
&lt;br /&gt;
    def _calc_dps(self, dps_stats, type=&#039;burst&#039;):&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;Calculates Burst or Sustained DPS of a weapon&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        # Burst, not to be confused with burst as in burst fire, but rather&lt;br /&gt;
        # a burst of damage where delta time is 0&lt;br /&gt;
        # sustained has delta time of infinity&lt;br /&gt;
        # meaning, sustained takes into account time-to-empty clip and reload time&lt;br /&gt;
&lt;br /&gt;
        # All reload actions have ReloadDelay played first,&lt;br /&gt;
        # but typically only single bullet reloads have a non-zero delay&lt;br /&gt;
        # i.e.&lt;br /&gt;
        # ReloadDelay of .5,&lt;br /&gt;
        # ReloadTime of 1,&lt;br /&gt;
        # ClipSize of 10,&lt;br /&gt;
        # =time to reload 1 bullet is 1.5s, time to reload 10 bullets is 10.5s&lt;br /&gt;
&lt;br /&gt;
        # BurstInterShotInterval represents time between shots in a burst&lt;br /&gt;
&lt;br /&gt;
        # Abbreivated dictionary for easier access&lt;br /&gt;
        d = dps_stats.copy()&lt;br /&gt;
&lt;br /&gt;
        cycle_time = 1 / d[&#039;RoundsPerSecond&#039;]&lt;br /&gt;
        total_cycle_time = cycle_time + d[&#039;BulletsPerBurst&#039;] * d[&#039;BurstInterShotInterval&#039;]&lt;br /&gt;
&lt;br /&gt;
        if type == &#039;burst&#039;:&lt;br /&gt;
            return (&lt;br /&gt;
                d[&#039;BulletDamage&#039;] * d[&#039;BulletsPerShot&#039;] * d[&#039;BulletsPerBurst&#039;] / (total_cycle_time)&lt;br /&gt;
            )&lt;br /&gt;
&lt;br /&gt;
        elif type == &#039;sustained&#039;:&lt;br /&gt;
            if d[&#039;ReloadSingle&#039;]:&lt;br /&gt;
                # If reloading 1 bullet at a time, reload time is actually per bullet&lt;br /&gt;
                time_to_reload = d[&#039;ReloadTime&#039;] * d[&#039;ClipSize&#039;]&lt;br /&gt;
            else:&lt;br /&gt;
                time_to_reload = d[&#039;ReloadTime&#039;]&lt;br /&gt;
            time_to_reload += d[&#039;ReloadDelay&#039;]&lt;br /&gt;
            time_to_empty_clip = d[&#039;ClipSize&#039;] / d[&#039;BulletsPerBurst&#039;] * (total_cycle_time)&lt;br /&gt;
            # More bullets per shot doesn&#039;t consume more bullets in the clip,&lt;br /&gt;
            # so think of it as bullet per bullet&lt;br /&gt;
            # BulletsPerBurst does consume more bullets in the clip&lt;br /&gt;
            damage_from_clip = d[&#039;BulletDamage&#039;] * d[&#039;BulletsPerShot&#039;] * d[&#039;ClipSize&#039;]&lt;br /&gt;
            return damage_from_clip / (time_to_empty_clip + time_to_reload)&lt;br /&gt;
&lt;br /&gt;
        else:&lt;br /&gt;
===Input for JS?===&lt;br /&gt;
&amp;lt;input id=&amp;quot;spirit&amp;quot; type=&amp;quot;number&amp;quot; value=&amp;quot;100&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;input id=&amp;quot;pi&amp;quot; type=&amp;quot;number&amp;quot; value=&amp;quot;14&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Light/Dark Mode Fiddling===&lt;br /&gt;
[[File:Siphon Life.png|class=abilityicon]]&lt;br /&gt;
[[File:Tornado.png|class=abilityicon]]&lt;/div&gt;</summary>
		<author><name>SerpentofSet</name></author>
	</entry>
	<entry>
		<id>https://deadlock.wiki/Health?diff=12831</id>
		<title>Health</title>
		<link rel="alternate" type="text/html" href="https://deadlock.wiki/Health?diff=12831"/>
		<updated>2024-10-22T15:07:52Z</updated>

		<summary type="html">&lt;p&gt;SerpentofSet: /* Health Bars */ colors for allied/enemy heroes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Vitality Icon.png|right|frameless]]&lt;br /&gt;
&#039;&#039;&#039;Health&#039;&#039;&#039; measures the amount of [[damage]] that can be taken before [[Death|dying]], and is fundamental to all [[heroes]] and units. Units and players with health are allowed to interact with the game, and consequently when your health drops to zero you are disabled from playing until respawning.&lt;br /&gt;
&lt;br /&gt;
== Maximum Health ==&lt;br /&gt;
[[File:Captura de pantalla 2024-10-03 115540.png|thumb|263x263px|Kelvin&#039;s starting base health at {{Souls|0}}]]&lt;br /&gt;
The formula for maximum health &amp;lt;math&amp;gt;HP_{Max}&amp;lt;/math&amp;gt; is: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
HP_{Max} = \left( HP_0 + N_{PI} \times PI_{HP} \right) \times (1 + \textstyle\sum HP_{Shop} ) + \textstyle\sum HP_{Bonus}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &amp;lt;math&amp;gt;HP_0&amp;lt;/math&amp;gt; is hero-specific starting base health, &amp;lt;math&amp;gt;N_{PI}&amp;lt;/math&amp;gt; is the number of [[Level|Power Increases]] earned, &amp;lt;math&amp;gt;PI_{HP}&amp;lt;/math&amp;gt; is hero-specific added base health from each power increase, &amp;lt;math&amp;gt;HP_{Shop}&amp;lt;/math&amp;gt; are implicit base health percent increases from [[Vitality]] items, and &amp;lt;math&amp;gt;HP_{Bonus}&amp;lt;/math&amp;gt; are bonus health flat increases from various sources. Note that the max health presented in-game is rounded up to the nearest integer.&lt;br /&gt;
&lt;br /&gt;
=== Base Health ===&lt;br /&gt;
[[File:Captura de pantalla 2024-10-03 115848.png|thumb|247x247px|Kelvin&#039;s base health at {{Souls|20.0k}}]]&lt;br /&gt;
Base health is the sum of starting base health and added base health from power increases. It is scaled by the inherent increased base health stats of Vitality items. Different heroes have different amounts of starting base health and added base health from power increases.&lt;br /&gt;
&lt;br /&gt;
{{#invoke:HeroDataArrays|heroHealthTable}}&lt;br /&gt;
&lt;br /&gt;
=== Increased Base Health ===&lt;br /&gt;
Each Vitality item purchased grants a percentage increase to base health based on its tier. Higher tier items grant larger percentage increases. These increases are summed together before being multiplied with base health.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
!Vitality Item Tier !! % Increased Base Health&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 11%&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 14%&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 17%&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 20%&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Bonus Health ===&lt;br /&gt;
[[File:Survival Power buff.png|thumb|179x179px|Survival power-up located in the training map]]&lt;br /&gt;
Bonus health comes from a variety of sources:&lt;br /&gt;
&lt;br /&gt;
* Items are the most common source of added bonus health. Bonus health can be found on all three item types, but Vitality items tend to provide the largest amounts.&lt;br /&gt;
* [[Golden Statue|Golden statues]] occasionally drop small but permanent added bonus health buffs: &#039;&#039;&#039;+20&#039;&#039;&#039; before 10 minutes, &#039;&#039;&#039;+30&#039;&#039;&#039; between 10 and 30 minutes, or &#039;&#039;&#039;+40&#039;&#039;&#039; after 30 minutes.&lt;br /&gt;
* The [[Powerup|Survival Powerup]] immediately grants &#039;&#039;&#039;+400&#039;&#039;&#039; bonus health, but only for 160 seconds or until death.&lt;br /&gt;
* The [[Rejuvenator]] immediately grants &#039;&#039;&#039;+200&#039;&#039;&#039; bonus health, but only for 3 minutes or until death.&lt;br /&gt;
&lt;br /&gt;
Bonus Health is not scaled by increased base health. Bonus health is added after the increased base health multiplier has been applied to base health.&lt;br /&gt;
&lt;br /&gt;
=== Miscellaneous Health Modifiers ===&lt;br /&gt;
With the purchase of [[Glass Cannon]], the hero&#039;s max health is reduced by 15% after the above calculations.&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
[[Kelvin]] begins the game with 600 Base HP. If Kelvin purchases the tier 1 vitality items [[Extra Health]] and [[Extra Stamina]], the first of which also grants 160 bonus health, his max health becomes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;HP_{Max} = 600 \times (1 + (0.11 + 0.11)) + 160 = 892&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If Kelvin then earns a power increase, his base health increases by 50, and his max health becomes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;HP_{Max} = (600 + 50) \times (1 + (0.11 + 0.11)) + 160 = 953&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Regaining Health ==&lt;br /&gt;
From the start of the match, heroes will regenerate health slowly over time, typically 2 HP per second. This rate can be increased by purchasing items such as [[Extra Regen]] and [[Fortitude]]. Health can be regained quickly by returning to the spawn room of the team&#039;s base. Various hero abilities can heal, such as Dynamo&#039;s [[Dynamo#3(3)_Rejuvenating_Aurora|Rejuvenating Aurora]]. Sources of [[Spirit Lifesteal|spirit]] and [[Bullet Lifesteal|bullet lifesteal]] grant heroes the opportunity to regain health by dealing the respective damage type.&lt;br /&gt;
&lt;br /&gt;
== Health Bars ==&lt;br /&gt;
[[File:600 vs 1300.png|thumb|A 600 HP Kelvin right next to a 1300 HP Kelvin]]&lt;br /&gt;
&#039;&#039;&#039;Health Bars&#039;&#039;&#039; are visual indicators of a hero&#039;s current health, located just above each hero. Health bars consist of filled rectangles, arranged in rows of up to ten. Enemy heroes are displayed with orange rectangles, while allied heroes use an off-white color. As the hero loses health, the rectangles deplete horizontally. Each full rectangle represents 100 health, and each full row represents 1000 health.&lt;br /&gt;
&lt;br /&gt;
== Sources ==&lt;br /&gt;
All [[Vitality|vitality items]] implicitly provide base health based on tier, represented as &amp;quot;Shop Bonuses&amp;quot; in the ingame stats calculation. Tier 1 items provide +11%, Tier 2 items provide +14%, Tier 3 items provide +17%, and Tier 4 items provide +20%. The following items explicitly grant increased bonus health:&lt;br /&gt;
{{Item stat table|Bonus Health}}&lt;br /&gt;
	&lt;br /&gt;
=== Map spawns ===&lt;br /&gt;
* [[Golden Statue]]s can provide a permanent increase: +&amp;lt;b&amp;gt;20&amp;lt;/b&amp;gt; Health before 10 minutes, +&amp;lt;b&amp;gt;30&amp;lt;/b&amp;gt; Health before 30 minutes, or +&amp;lt;b&amp;gt;40&amp;lt;/b&amp;gt; Health after 30 minutes.&lt;br /&gt;
* Power up runes can provide a temporary Survival buff that provides +&amp;lt;b&amp;gt;400&amp;lt;/b&amp;gt; Bonus Health for 160 seconds.&lt;br /&gt;
* [[Mid-Boss]] can provide a temporary Rejuvenator Credit buff that provides +200 Bonus Health for three minutes or until death, whichever comes first.&lt;br /&gt;
&lt;br /&gt;
{{Stat navbox}}&lt;br /&gt;
{{Navbox gameplay}}&lt;/div&gt;</summary>
		<author><name>SerpentofSet</name></author>
	</entry>
	<entry>
		<id>https://deadlock.wiki/Module:HeroDataArrays?diff=12689</id>
		<title>Module:HeroDataArrays</title>
		<link rel="alternate" type="text/html" href="https://deadlock.wiki/Module:HeroDataArrays?diff=12689"/>
		<updated>2024-10-21T15:46:13Z</updated>

		<summary type="html">&lt;p&gt;SerpentofSet: type is deprecated&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local allHeroData = mw.loadJsonData(&amp;quot;Data:HeroData.json&amp;quot;)&lt;br /&gt;
local inGameHeroData = {}&lt;br /&gt;
&lt;br /&gt;
-- Just get heroes that are playable&lt;br /&gt;
for i, heroData in pairs(allHeroData) do&lt;br /&gt;
	if heroData[&amp;quot;IsDisabled&amp;quot;] == false and heroData[&amp;quot;InDevelopment&amp;quot;] == false then&lt;br /&gt;
		table.insert(inGameHeroData, heroData)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- heroDataArray takes as argument a table of any length containing keys or &lt;br /&gt;
-- paths of keys in the HeroData JSON, e.g. {Name, MaxHealth, LevelScaling&amp;gt;Health}.&lt;br /&gt;
-- A path of keys should be specified as such, with the &amp;quot;&amp;gt;&amp;quot; character separating&lt;br /&gt;
-- subsequent keys.&lt;br /&gt;
local heroDataArray = function(args)&lt;br /&gt;
	local outData = {}&lt;br /&gt;
	&lt;br /&gt;
	for i, heroData in ipairs(inGameHeroData) do			-- Iterate over each hero&lt;br /&gt;
		local out = {}										-- First creating a table to hold data&lt;br /&gt;
		for j, key in pairs(args) do						-- Iterate over each key:&lt;br /&gt;
			if string.find(key, &amp;quot;&amp;gt;&amp;quot;) ~= nil then			-- If the key is actually a path of keys,&lt;br /&gt;
				local node = heroData           			-- start with the biggest node heroData, and&lt;br /&gt;
				for k in string.gmatch(key, &amp;quot;([^&amp;gt;]+)&amp;quot;) do	-- iterate over each key, splitting on &amp;quot;&amp;gt;&amp;quot;,&lt;br /&gt;
					if node[k] ~= nil then					-- trying the key as a string e.g. &amp;quot;1&amp;quot;,&lt;br /&gt;
						node = node[k]						&lt;br /&gt;
					else									-- else using the key as numeric,&lt;br /&gt;
						node = node[tonumber(k)]&lt;br /&gt;
					end										-- drilling down the JSON node after node&lt;br /&gt;
				end&lt;br /&gt;
				out[key] = node								-- until outputting the final node&lt;br /&gt;
			else&lt;br /&gt;
				out[key] = heroData[key]					-- or just grab the data if not a path&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		outData[heroData[&amp;quot;Name&amp;quot;]] = out						-- Save data in the big table of heroes&lt;br /&gt;
	end&lt;br /&gt;
	return(outData)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.heroHealthTable = function(frame)&lt;br /&gt;
	-- Pull data&lt;br /&gt;
	heroHealthData = heroDataArray({&amp;quot;Name&amp;quot;, &amp;quot;MaxHealth&amp;quot;, &amp;quot;LevelScaling&amp;gt;Health&amp;quot;})&lt;br /&gt;
&lt;br /&gt;
	-- Input table will be called a, output wikitable will be called z&lt;br /&gt;
	-- From a to z, haha get it&lt;br /&gt;
	z = &amp;quot;{| class=\&amp;quot;wikitable sortable mw-collapsible\&amp;quot; style=\&amp;quot;text-align:center\&amp;quot; \n&amp;quot;..&lt;br /&gt;
		&amp;quot;|+ Hero Base Health Stats \n&amp;quot;..&lt;br /&gt;
		&amp;quot;! Hero !! Starting !! Added per PI !! At Max PI \n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	-- Iterate over heroes adding a new row to the wikitable for each&lt;br /&gt;
	for i,a in pairs(heroHealthData) do&lt;br /&gt;
		z = z..&lt;br /&gt;
			&amp;quot;|- \n&amp;quot;..&lt;br /&gt;
			&amp;quot;| style=\&amp;quot;text-align:left;\&amp;quot; | &amp;quot;..&lt;br /&gt;
				frame:expandTemplate{title=&amp;quot;PageRef&amp;quot;, args={a[&amp;quot;Name&amp;quot;]}}..&lt;br /&gt;
				&amp;quot; || &amp;quot;..a[&amp;quot;MaxHealth&amp;quot;]..&amp;quot; || +&amp;quot;..a[&amp;quot;LevelScaling&amp;gt;Health&amp;quot;]..&amp;quot; || &amp;quot;..&lt;br /&gt;
				tostring(tonumber(a[&amp;quot;MaxHealth&amp;quot;])+tonumber(a[&amp;quot;LevelScaling&amp;gt;Health&amp;quot;])*14)..&amp;quot; \n&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Cap it off&lt;br /&gt;
	z = z..&amp;quot;|}&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	return z&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.heroDpsTable = function(frame)&lt;br /&gt;
	heroDpsData = heroDataArray({&amp;quot;Name&amp;quot;,&amp;quot;ReloadSingle&amp;quot;,&amp;quot;ReloadDelay&amp;quot;,&amp;quot;ReloadTime&amp;quot;,&lt;br /&gt;
		&amp;quot;ClipSize&amp;quot;,&amp;quot;RoundsPerSecond&amp;quot;,&amp;quot;BulletDamage&amp;quot;,&amp;quot;BulletsPerShot&amp;quot;})&lt;br /&gt;
   &lt;br /&gt;
    mw.logObject(heroDpsData)&lt;br /&gt;
end&lt;br /&gt;
	&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>SerpentofSet</name></author>
	</entry>
	<entry>
		<id>https://deadlock.wiki/User:SerpentofSet?diff=12333</id>
		<title>User:SerpentofSet</title>
		<link rel="alternate" type="text/html" href="https://deadlock.wiki/User:SerpentofSet?diff=12333"/>
		<updated>2024-10-20T18:29:39Z</updated>

		<summary type="html">&lt;p&gt;SerpentofSet: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I am bad at the game so I edit the wiki&lt;br /&gt;
==How to Debug in Scribunto==&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{#invoke:Test|a|sep=;|b}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
=p.main(&lt;br /&gt;
   mw.getCurrentFrame():newChild{&lt;br /&gt;
      title=&amp;quot;Module:Test&amp;quot;,&lt;br /&gt;
      args={&amp;quot;a&amp;quot;,[&amp;quot;sep&amp;quot;]=&amp;quot;;&amp;quot;,&amp;quot;b&amp;quot;}&lt;br /&gt;
   }&lt;br /&gt;
)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
===Simplified version===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
=p.main{&lt;br /&gt;
   args={&amp;quot;a&amp;quot;,[&amp;quot;sep&amp;quot;]=&amp;quot;;&amp;quot;,&amp;quot;b&amp;quot;}&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==What&#039;s a sandbox==&lt;br /&gt;
===DPS calcs===&lt;br /&gt;
&lt;br /&gt;
    def _calc_dps(self, dps_stats, type=&#039;burst&#039;):&lt;br /&gt;
        &amp;quot;&amp;quot;&amp;quot;Calculates Burst or Sustained DPS of a weapon&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
        # Burst, not to be confused with burst as in burst fire, but rather&lt;br /&gt;
        # a burst of damage where delta time is 0&lt;br /&gt;
        # sustained has delta time of infinity&lt;br /&gt;
        # meaning, sustained takes into account time-to-empty clip and reload time&lt;br /&gt;
&lt;br /&gt;
        # All reload actions have ReloadDelay played first,&lt;br /&gt;
        # but typically only single bullet reloads have a non-zero delay&lt;br /&gt;
        # i.e.&lt;br /&gt;
        # ReloadDelay of .5,&lt;br /&gt;
        # ReloadTime of 1,&lt;br /&gt;
        # ClipSize of 10,&lt;br /&gt;
        # =time to reload 1 bullet is 1.5s, time to reload 10 bullets is 10.5s&lt;br /&gt;
&lt;br /&gt;
        # BurstInterShotInterval represents time between shots in a burst&lt;br /&gt;
&lt;br /&gt;
        # Abbreivated dictionary for easier access&lt;br /&gt;
        d = dps_stats.copy()&lt;br /&gt;
&lt;br /&gt;
        cycle_time = 1 / d[&#039;RoundsPerSecond&#039;]&lt;br /&gt;
        total_cycle_time = cycle_time + d[&#039;BulletsPerBurst&#039;] * d[&#039;BurstInterShotInterval&#039;]&lt;br /&gt;
&lt;br /&gt;
        if type == &#039;burst&#039;:&lt;br /&gt;
            return (&lt;br /&gt;
                d[&#039;BulletDamage&#039;] * d[&#039;BulletsPerShot&#039;] * d[&#039;BulletsPerBurst&#039;] / (total_cycle_time)&lt;br /&gt;
            )&lt;br /&gt;
&lt;br /&gt;
        elif type == &#039;sustained&#039;:&lt;br /&gt;
            if d[&#039;ReloadSingle&#039;]:&lt;br /&gt;
                # If reloading 1 bullet at a time, reload time is actually per bullet&lt;br /&gt;
                time_to_reload = d[&#039;ReloadTime&#039;] * d[&#039;ClipSize&#039;]&lt;br /&gt;
            else:&lt;br /&gt;
                time_to_reload = d[&#039;ReloadTime&#039;]&lt;br /&gt;
            time_to_reload += d[&#039;ReloadDelay&#039;]&lt;br /&gt;
            time_to_empty_clip = d[&#039;ClipSize&#039;] / d[&#039;BulletsPerBurst&#039;] * (total_cycle_time)&lt;br /&gt;
            # More bullets per shot doesn&#039;t consume more bullets in the clip,&lt;br /&gt;
            # so think of it as bullet per bullet&lt;br /&gt;
            # BulletsPerBurst does consume more bullets in the clip&lt;br /&gt;
            damage_from_clip = d[&#039;BulletDamage&#039;] * d[&#039;BulletsPerShot&#039;] * d[&#039;ClipSize&#039;]&lt;br /&gt;
            return damage_from_clip / (time_to_empty_clip + time_to_reload)&lt;br /&gt;
&lt;br /&gt;
        else:&lt;br /&gt;
===Input for JS?===&lt;br /&gt;
&amp;lt;input id=&amp;quot;spirit&amp;quot; type=&amp;quot;number&amp;quot; value=&amp;quot;100&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;input id=&amp;quot;pi&amp;quot; type=&amp;quot;number&amp;quot; value=&amp;quot;14&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Light/Dark Mode Fiddling===&lt;br /&gt;
[[File:Siphon Life.png|class=abilityicon]]&lt;br /&gt;
[[File:Tornado.png|class=abilityicon]]&lt;/div&gt;</summary>
		<author><name>SerpentofSet</name></author>
	</entry>
	<entry>
		<id>https://deadlock.wiki/User:SerpentofSet?diff=12332</id>
		<title>User:SerpentofSet</title>
		<link rel="alternate" type="text/html" href="https://deadlock.wiki/User:SerpentofSet?diff=12332"/>
		<updated>2024-10-20T18:28:25Z</updated>

		<summary type="html">&lt;p&gt;SerpentofSet: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I am bad at the game so I edit the wiki&lt;br /&gt;
==How to Debug in Scribunto==&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{#invoke:Test|a|sep=;|b}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
=p.main(&lt;br /&gt;
   mw.getCurrentFrame():newChild{&lt;br /&gt;
      title=&amp;quot;Module:Test&amp;quot;,&lt;br /&gt;
      args={&amp;quot;a&amp;quot;,[&amp;quot;sep&amp;quot;]=&amp;quot;;&amp;quot;,&amp;quot;b&amp;quot;}&lt;br /&gt;
   }&lt;br /&gt;
)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
===Simplified version===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
=p.main{&lt;br /&gt;
   args={&amp;quot;a&amp;quot;,[&amp;quot;sep&amp;quot;]=&amp;quot;;&amp;quot;,&amp;quot;b&amp;quot;}&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==What&#039;s a sandbox==&lt;br /&gt;
===Input for JS?===&lt;br /&gt;
&amp;lt;input id=&amp;quot;spirit&amp;quot; type=&amp;quot;number&amp;quot; value=&amp;quot;100&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;input id=&amp;quot;pi&amp;quot; type=&amp;quot;number&amp;quot; value=&amp;quot;14&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Light/Dark Mode Fiddling===&lt;br /&gt;
[[File:Siphon Life.png|class=abilityicon]]&lt;br /&gt;
[[File:Tornado.png|class=abilityicon]]&lt;/div&gt;</summary>
		<author><name>SerpentofSet</name></author>
	</entry>
	<entry>
		<id>https://deadlock.wiki/User:SerpentofSet?diff=12331</id>
		<title>User:SerpentofSet</title>
		<link rel="alternate" type="text/html" href="https://deadlock.wiki/User:SerpentofSet?diff=12331"/>
		<updated>2024-10-20T17:13:45Z</updated>

		<summary type="html">&lt;p&gt;SerpentofSet: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I am bad at the game so I edit the wiki&lt;br /&gt;
&lt;br /&gt;
==How to Debug in Scribunto==&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{#invoke:Test|a|sep=;|b}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
=p.main(&lt;br /&gt;
   mw.getCurrentFrame():newChild{&lt;br /&gt;
      title=&amp;quot;Module:Test&amp;quot;,&lt;br /&gt;
      args={&amp;quot;a&amp;quot;,[&amp;quot;sep&amp;quot;]=&amp;quot;;&amp;quot;,&amp;quot;b&amp;quot;}&lt;br /&gt;
   }&lt;br /&gt;
)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
====Simplified version====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
=p.main{&lt;br /&gt;
   args={&amp;quot;a&amp;quot;,[&amp;quot;sep&amp;quot;]=&amp;quot;;&amp;quot;,&amp;quot;b&amp;quot;}&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==What&#039;s a sandbox==&lt;br /&gt;
{{PageRef|Yamato|type=Hero}}&lt;br /&gt;
&lt;br /&gt;
{{#invoke:HeroDataArrays|heroHealthTable}}&lt;br /&gt;
&lt;br /&gt;
[[File:Siphon Life.png|class=abilityicon]]&lt;br /&gt;
[[File:Tornado.png|class=abilityicon]]&lt;br /&gt;
&lt;br /&gt;
{{#invoke:ItemsByStat|tablefy|BulletLifestealPercent|+X% Bullet Lifesteal|%}}&lt;br /&gt;
&lt;br /&gt;
Use this for the debug console when testing the ItemsByStat page: =p.tablefy(  mw.getCurrentFrame():newChild{&lt;br /&gt;
title=&amp;quot;Module:ItemsByStat&amp;quot;,      args={&amp;quot;BulletLifestealPercent&amp;quot;, &amp;quot;+X% Bullet Lifesteal&amp;quot;, &amp;quot;%&amp;quot;}  })&lt;/div&gt;</summary>
		<author><name>SerpentofSet</name></author>
	</entry>
	<entry>
		<id>https://deadlock.wiki/Module:HeroDataArrays?diff=12099</id>
		<title>Module:HeroDataArrays</title>
		<link rel="alternate" type="text/html" href="https://deadlock.wiki/Module:HeroDataArrays?diff=12099"/>
		<updated>2024-10-19T17:24:40Z</updated>

		<summary type="html">&lt;p&gt;SerpentofSet: starting dps table&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local allHeroData = mw.loadJsonData(&amp;quot;Data:HeroData.json&amp;quot;)&lt;br /&gt;
local inGameHeroData = {}&lt;br /&gt;
&lt;br /&gt;
-- Just get heroes that are playable&lt;br /&gt;
for i, heroData in pairs(allHeroData) do&lt;br /&gt;
	if heroData[&amp;quot;IsDisabled&amp;quot;] == false and heroData[&amp;quot;InDevelopment&amp;quot;] == false then&lt;br /&gt;
		table.insert(inGameHeroData, heroData)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- heroDataArray takes as argument a table of any length containing keys or &lt;br /&gt;
-- paths of keys in the HeroData JSON, e.g. {Name, MaxHealth, LevelScaling&amp;gt;Health}.&lt;br /&gt;
-- A path of keys should be specified as such, with the &amp;quot;&amp;gt;&amp;quot; character separating&lt;br /&gt;
-- subsequent keys.&lt;br /&gt;
local heroDataArray = function(args)&lt;br /&gt;
	local outData = {}&lt;br /&gt;
	&lt;br /&gt;
	for i, heroData in ipairs(inGameHeroData) do			-- Iterate over each hero&lt;br /&gt;
		local out = {}										-- First creating a table to hold data&lt;br /&gt;
		for j, key in pairs(args) do						-- Iterate over each key:&lt;br /&gt;
			if string.find(key, &amp;quot;&amp;gt;&amp;quot;) ~= nil then			-- If the key is actually a path of keys,&lt;br /&gt;
				local node = heroData           			-- start with the biggest node heroData, and&lt;br /&gt;
				for k in string.gmatch(key, &amp;quot;([^&amp;gt;]+)&amp;quot;) do	-- iterate over each key, splitting on &amp;quot;&amp;gt;&amp;quot;,&lt;br /&gt;
					if node[k] ~= nil then					-- trying the key as a string e.g. &amp;quot;1&amp;quot;,&lt;br /&gt;
						node = node[k]						&lt;br /&gt;
					else									-- else using the key as numeric,&lt;br /&gt;
						node = node[tonumber(k)]&lt;br /&gt;
					end										-- drilling down the JSON node after node&lt;br /&gt;
				end&lt;br /&gt;
				out[key] = node								-- until outputting the final node&lt;br /&gt;
			else&lt;br /&gt;
				out[key] = heroData[key]					-- or just grab the data if not a path&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		outData[heroData[&amp;quot;Name&amp;quot;]] = out						-- Save data in the big table of heroes&lt;br /&gt;
	end&lt;br /&gt;
	return(outData)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.heroHealthTable = function(frame)&lt;br /&gt;
	-- Pull data&lt;br /&gt;
	heroHealthData = heroDataArray({&amp;quot;Name&amp;quot;, &amp;quot;MaxHealth&amp;quot;, &amp;quot;LevelScaling&amp;gt;Health&amp;quot;})&lt;br /&gt;
&lt;br /&gt;
	-- Input table will be called a, output wikitable will be called z&lt;br /&gt;
	-- From a to z, haha get it&lt;br /&gt;
	z = &amp;quot;{| class=\&amp;quot;wikitable sortable mw-collapsible\&amp;quot; style=\&amp;quot;text-align:center\&amp;quot; \n&amp;quot;..&lt;br /&gt;
		&amp;quot;|+ Hero Base Health Stats \n&amp;quot;..&lt;br /&gt;
		&amp;quot;! Hero !! Starting !! Added per PI !! At Max PI \n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	-- Iterate over heroes adding a new row to the wikitable for each&lt;br /&gt;
	for i,a in pairs(heroHealthData) do&lt;br /&gt;
		z = z..&lt;br /&gt;
			&amp;quot;|- \n&amp;quot;..&lt;br /&gt;
			&amp;quot;| style=\&amp;quot;text-align:left;\&amp;quot; | &amp;quot;..&lt;br /&gt;
				frame:expandTemplate{title=&amp;quot;PageRef&amp;quot;, args={a[&amp;quot;Name&amp;quot;], [&amp;quot;type&amp;quot;]=&amp;quot;Hero&amp;quot;}}..&lt;br /&gt;
				&amp;quot; || &amp;quot;..a[&amp;quot;MaxHealth&amp;quot;]..&amp;quot; || +&amp;quot;..a[&amp;quot;LevelScaling&amp;gt;Health&amp;quot;]..&amp;quot; || &amp;quot;..&lt;br /&gt;
				tostring(tonumber(a[&amp;quot;MaxHealth&amp;quot;])+tonumber(a[&amp;quot;LevelScaling&amp;gt;Health&amp;quot;])*14)..&amp;quot; \n&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Cap it off&lt;br /&gt;
	z = z..&amp;quot;|}&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	return z&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.heroDpsTable = function(frame)&lt;br /&gt;
	heroDpsData = heroDataArray({&amp;quot;Name&amp;quot;,&amp;quot;ReloadSingle&amp;quot;,&amp;quot;ReloadDelay&amp;quot;,&amp;quot;ReloadTime&amp;quot;,&lt;br /&gt;
		&amp;quot;ClipSize&amp;quot;,&amp;quot;RoundsPerSecond&amp;quot;,&amp;quot;BulletDamage&amp;quot;,&amp;quot;BulletsPerShot&amp;quot;})&lt;br /&gt;
   &lt;br /&gt;
    mw.logObject(heroDpsData)&lt;br /&gt;
end&lt;br /&gt;
	&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>SerpentofSet</name></author>
	</entry>
	<entry>
		<id>https://deadlock.wiki/User:SerpentofSet?diff=12098</id>
		<title>User:SerpentofSet</title>
		<link rel="alternate" type="text/html" href="https://deadlock.wiki/User:SerpentofSet?diff=12098"/>
		<updated>2024-10-19T17:03:26Z</updated>

		<summary type="html">&lt;p&gt;SerpentofSet: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I am bad at the game so I edit the wiki&lt;br /&gt;
&lt;br /&gt;
Below stolen shamelessly from the MediaWiki Scribunto articles&lt;br /&gt;
&lt;br /&gt;
==Examples==&lt;br /&gt;
===Invoking module directly===&lt;br /&gt;
Given [[Module:Test]] with the following contents:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local p = {}&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
   local args = frame.args&lt;br /&gt;
   mw.log(&amp;quot;log test&amp;quot;)&lt;br /&gt;
   return args[1]..args[&amp;quot;sep&amp;quot;]..args[2]&lt;br /&gt;
end&lt;br /&gt;
return p&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The following invoke call:&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{#invoke:Test|a|sep=;|b}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
Can be simulated accurately with the following code in the debug console:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
=p.main(&lt;br /&gt;
   mw.getCurrentFrame():newChild{&lt;br /&gt;
      title=&amp;quot;Module:Test&amp;quot;,&lt;br /&gt;
      args={&amp;quot;a&amp;quot;,[&amp;quot;sep&amp;quot;]=&amp;quot;;&amp;quot;,&amp;quot;b&amp;quot;}&lt;br /&gt;
   }&lt;br /&gt;
)&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Note that in this example the element in the export table which is being evaluated is called &amp;quot;main&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
====Simplified version====&lt;br /&gt;
If the module you are debugging does not use any [[Extension:Scribunto/Lua_reference_manual#Frame_object|frame object methods]] (such as &amp;lt;code&amp;gt;frame:preprocess()&amp;lt;/code&amp;gt;), like the example [[#Invoking module directly|above]], then the frame object analog(?) does not have to be complete, and the debugging code can be simplified into the following:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
=p.main{&lt;br /&gt;
   args={&amp;quot;a&amp;quot;,[&amp;quot;sep&amp;quot;]=&amp;quot;;&amp;quot;,&amp;quot;b&amp;quot;}&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What&#039;s a sandbox&lt;br /&gt;
{{PageRef|Yamato|type=Hero}}&lt;br /&gt;
&lt;br /&gt;
{{#invoke:HeroDataArrays|heroHealthTable}}&lt;br /&gt;
&lt;br /&gt;
[[File:Siphon Life.png|class=abilityicon]]&lt;br /&gt;
[[File:Tornado.png|class=abilityicon]]&lt;br /&gt;
&lt;br /&gt;
{{#invoke:ItemsByStat|tablefy|BulletLifestealPercent|+X% Bullet Lifesteal|%}}&lt;br /&gt;
&lt;br /&gt;
Use this for the debug console when testing the ItemsByStat page: =p.tablefy(  mw.getCurrentFrame():newChild{&lt;br /&gt;
title=&amp;quot;Module:ItemsByStat&amp;quot;,      args={&amp;quot;BulletLifestealPercent&amp;quot;, &amp;quot;+X% Bullet Lifesteal&amp;quot;, &amp;quot;%&amp;quot;}  })&lt;/div&gt;</summary>
		<author><name>SerpentofSet</name></author>
	</entry>
	<entry>
		<id>https://deadlock.wiki/Module:HeroDataArrays?diff=12097</id>
		<title>Module:HeroDataArrays</title>
		<link rel="alternate" type="text/html" href="https://deadlock.wiki/Module:HeroDataArrays?diff=12097"/>
		<updated>2024-10-19T16:51:56Z</updated>

		<summary type="html">&lt;p&gt;SerpentofSet: better (?) comments&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local allHeroData = mw.loadJsonData(&amp;quot;Data:HeroData.json&amp;quot;)&lt;br /&gt;
local inGameHeroData = {}&lt;br /&gt;
&lt;br /&gt;
-- Just get heroes that are playable&lt;br /&gt;
for i, heroData in pairs(allHeroData) do&lt;br /&gt;
	if heroData[&amp;quot;IsDisabled&amp;quot;] == false and heroData[&amp;quot;InDevelopment&amp;quot;] == false then&lt;br /&gt;
		table.insert(inGameHeroData, heroData)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- heroDataArray takes as argument a table of any length containing keys or &lt;br /&gt;
-- paths of keys in the HeroData JSON, e.g. {Name, MaxHealth, LevelScaling&amp;gt;Health}.&lt;br /&gt;
-- A path of keys should be specified as such, with the &amp;quot;&amp;gt;&amp;quot; character separating&lt;br /&gt;
-- subsequent keys.&lt;br /&gt;
local heroDataArray = function(args)&lt;br /&gt;
	local outData = {}&lt;br /&gt;
	&lt;br /&gt;
	for i, heroData in ipairs(inGameHeroData) do			-- Iterate over each hero&lt;br /&gt;
		local out = {}										-- First creating a table to hold data&lt;br /&gt;
		for j, key in pairs(args) do						-- Iterate over each key:&lt;br /&gt;
			if string.find(key, &amp;quot;&amp;gt;&amp;quot;) ~= nil then			-- If the key is actually a path of keys,&lt;br /&gt;
				local node = heroData           			-- start with the biggest node heroData, and&lt;br /&gt;
				for k in string.gmatch(key, &amp;quot;([^&amp;gt;]+)&amp;quot;) do	-- iterate over each key, splitting on &amp;quot;&amp;gt;&amp;quot;,&lt;br /&gt;
					if node[k] ~= nil then					-- trying the key as a string e.g. &amp;quot;1&amp;quot;,&lt;br /&gt;
						node = node[k]						&lt;br /&gt;
					else									-- else using the key as numeric,&lt;br /&gt;
						node = node[tonumber(k)]&lt;br /&gt;
					end										-- drilling down the JSON node after node&lt;br /&gt;
				end&lt;br /&gt;
				out[key] = node								-- until outputting the final node&lt;br /&gt;
			else&lt;br /&gt;
				out[key] = heroData[key]					-- or just grab the data if not a path&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		outData[heroData[&amp;quot;Name&amp;quot;]] = out						-- Save data in the big table of heroes&lt;br /&gt;
	end&lt;br /&gt;
	return(outData)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.heroHealthTable = function(frame)&lt;br /&gt;
	heroHealthData = heroDataArray({&amp;quot;Name&amp;quot;, &amp;quot;MaxHealth&amp;quot;, &amp;quot;LevelScaling&amp;gt;Health&amp;quot;})&lt;br /&gt;
&lt;br /&gt;
	z = &amp;quot;{| class=\&amp;quot;wikitable sortable mw-collapsible\&amp;quot; style=\&amp;quot;text-align:center\&amp;quot; \n&amp;quot;..&lt;br /&gt;
		&amp;quot;|+ Hero Base Health Stats \n&amp;quot;..&lt;br /&gt;
		&amp;quot;! Hero !! Starting !! Added per PI !! At Max PI \n&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	for i,a in pairs(heroHealthData) do&lt;br /&gt;
		z = z..&lt;br /&gt;
			&amp;quot;|- \n&amp;quot;..&lt;br /&gt;
			&amp;quot;| style=\&amp;quot;text-align:left;\&amp;quot; | &amp;quot;..frame:expandTemplate{title=&amp;quot;PageRef&amp;quot;, args={a[&amp;quot;Name&amp;quot;], [&#039;type&#039;]=&amp;quot;Hero&amp;quot;}}..&lt;br /&gt;
				&amp;quot; || &amp;quot;..a[&amp;quot;MaxHealth&amp;quot;]..&amp;quot; || +&amp;quot;..a[&amp;quot;LevelScaling&amp;gt;Health&amp;quot;]..&amp;quot; || &amp;quot;..&lt;br /&gt;
				tostring(tonumber(a[&amp;quot;MaxHealth&amp;quot;])+tonumber(a[&amp;quot;LevelScaling&amp;gt;Health&amp;quot;])*14)..&amp;quot; \n&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	z = z..&amp;quot;|}&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	return z&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>SerpentofSet</name></author>
	</entry>
	<entry>
		<id>https://deadlock.wiki/Health?diff=12096</id>
		<title>Health</title>
		<link rel="alternate" type="text/html" href="https://deadlock.wiki/Health?diff=12096"/>
		<updated>2024-10-19T15:52:21Z</updated>

		<summary type="html">&lt;p&gt;SerpentofSet: /* Regaining Health */ oops, extra regen is the one that provides extra regen&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Vitality Icon.png|right|frameless]]&lt;br /&gt;
&#039;&#039;&#039;Health&#039;&#039;&#039; measures the amount of [[damage]] that can be taken before [[Death|dying]], and is fundamental to all [[heroes]] and units. Units and players with health are allowed to interact with the game, and consequently when your health drops to zero you are disabled from playing until respawning.&lt;br /&gt;
&lt;br /&gt;
== Maximum Health ==&lt;br /&gt;
[[File:Captura de pantalla 2024-10-03 115540.png|thumb|263x263px|Kelvin&#039;s starting base health at {{Souls|0}}]]&lt;br /&gt;
The formula for maximum health &amp;lt;math&amp;gt;HP_{Max}&amp;lt;/math&amp;gt; is: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
HP_{Max} = \left( HP_0 + N_{PI} \times PI_{HP} \right) \times (1 + \textstyle\sum HP_{Shop} ) + \textstyle\sum HP_{Bonus}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &amp;lt;math&amp;gt;HP_0&amp;lt;/math&amp;gt; is hero-specific starting base health, &amp;lt;math&amp;gt;N_{PI}&amp;lt;/math&amp;gt; is the number of [[Level|Power Increases]] earned, &amp;lt;math&amp;gt;PI_{HP}&amp;lt;/math&amp;gt; is hero-specific added base health from each power increase, &amp;lt;math&amp;gt;HP_{Shop}&amp;lt;/math&amp;gt; are implicit base health percent increases from [[Vitality]] items, and &amp;lt;math&amp;gt;HP_{Bonus}&amp;lt;/math&amp;gt; are bonus health flat increases from various sources. Note that the max health presented in-game is rounded to the nearest integer.&lt;br /&gt;
&lt;br /&gt;
=== Base Health ===&lt;br /&gt;
[[File:Captura de pantalla 2024-10-03 115848.png|thumb|247x247px|Kelvin&#039;s base health at {{Souls|20.0k}}]]&lt;br /&gt;
Base health is the sum of starting base health and added base health from power increases. It is scaled by the inherent increased base health stats of Vitality items. Different heroes have different amounts of starting base health and added base health from power increases.&lt;br /&gt;
&lt;br /&gt;
{{#invoke:HeroDataArrays|heroHealthTable}}&lt;br /&gt;
&lt;br /&gt;
=== Increased Base Health ===&lt;br /&gt;
Each Vitality item purchased grants a percentage increase to base health based on its tier. Higher tier items grant larger percentage increases. These increases are summed together before being multiplied with base health.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
!Vitality Item Tier !! % Increased Base Health&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 11%&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 14%&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 17%&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 20%&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Bonus Health ===&lt;br /&gt;
[[File:Survival Power buff.png|thumb|179x179px|Survival power-up located in the training map]]&lt;br /&gt;
Bonus health comes from a variety of sources:&lt;br /&gt;
&lt;br /&gt;
* Items are the most common source of added bonus health. Bonus health can be found on all three item types, but Vitality items tend to provide the largest amounts.&lt;br /&gt;
* [[Golden Statue|Golden statues]] occasionally drop small but permanent added bonus health buffs: &#039;&#039;&#039;+20&#039;&#039;&#039; before 10 minutes, &#039;&#039;&#039;+30&#039;&#039;&#039; between 10 and 30 minutes, or &#039;&#039;&#039;+40&#039;&#039;&#039; after 30 minutes.&lt;br /&gt;
* [[Powerup Buff|Survival Powerups]] immediately grant &#039;&#039;&#039;+400&#039;&#039;&#039; bonus health, but only for 160 seconds or until death.&lt;br /&gt;
* The [[Rejuvenator]] immediately grants &#039;&#039;&#039;+200&#039;&#039;&#039; bonus health, but only for 3 minutes or until death.&lt;br /&gt;
&lt;br /&gt;
Bonus Health is not scaled by increased base health. Bonus health is added after the increased base health multiplier has been applied to base health.&lt;br /&gt;
&lt;br /&gt;
=== Miscellaneous Health Modifiers ===&lt;br /&gt;
With the purchase of [[Glass Cannon]], the hero&#039;s max health is reduced by 15% after the above calculations.&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
[[Kelvin]] begins the game with 600 Base HP. If Kelvin purchases the tier 1 vitality items [[Extra Health]] and [[Extra Stamina]], the first of which also grants 160 bonus health, his max health becomes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;HP_{Max} = 600 \times (1 + (0.11 + 0.11)) + 160 = 892&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If Kelvin then earns a power increase, his base health increases by 50, and his max health becomes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;HP_{Max} = (600 + 50) \times (1 + (0.11 + 0.11)) + 160 = 953&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Regaining Health ==&lt;br /&gt;
From the start of the match, heroes will regenerate health slowly over time, typically 2 HP per second. This rate can be increased by purchasing items such as [[Extra Regen]] and [[Fortitude]]. Health can be regained quickly by returning to the spawn room of the team&#039;s base. Various hero abilities can heal, such as Dynamo&#039;s [[Dynamo#3(3)_Rejuvenating_Aurora|Rejuvenating Aurora]]. Sources of [[Spirit Lifesteal|spirit]] and [[Bullet Lifesteal|bullet lifesteal]] grant heroes the opportunity to regain health by dealing the respective damage type.&lt;br /&gt;
&lt;br /&gt;
== Health Bars ==&lt;br /&gt;
[[File:600 vs 1300.png|thumb|A 600 HP Kelvin right next to a 1300 HP Kelvin]]&lt;br /&gt;
&#039;&#039;&#039;Health Bars&#039;&#039;&#039; are visual indicators of a hero&#039;s current health, located just above each hero. Health bars consist of filled orange rectangles, arranged in rows of up to ten. As the hero loses health, the rectangles deplete horizontally. Each full rectangle represents 100 health, and each full row represents 1000 health.&lt;br /&gt;
&lt;br /&gt;
== Item Sources of Bonus Health ==&lt;br /&gt;
The following items explicitly grant added bonus health:&lt;br /&gt;
{{Item stat table|Bonus Health}}&lt;br /&gt;
&lt;br /&gt;
{{Stat navbox}}&lt;/div&gt;</summary>
		<author><name>SerpentofSet</name></author>
	</entry>
	<entry>
		<id>https://deadlock.wiki/Health?diff=11988</id>
		<title>Health</title>
		<link rel="alternate" type="text/html" href="https://deadlock.wiki/Health?diff=11988"/>
		<updated>2024-10-19T02:34:58Z</updated>

		<summary type="html">&lt;p&gt;SerpentofSet: /* Increased Base Health */ center align table elements&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Vitality Icon.png|right|frameless]]&lt;br /&gt;
&#039;&#039;&#039;Health&#039;&#039;&#039; measures the amount of [[damage]] that can be taken before [[Death|dying]], and is fundamental to all [[heroes]] and units. Units and players with health are allowed to interact with the game, and consequently when your health drops to zero you are disabled from playing until respawning.&lt;br /&gt;
&lt;br /&gt;
== Maximum Health ==&lt;br /&gt;
[[File:Captura de pantalla 2024-10-03 115540.png|thumb|263x263px|Kelvin&#039;s starting base health at {{Souls|0}}]]&lt;br /&gt;
The formula for maximum health &amp;lt;math&amp;gt;HP_{Max}&amp;lt;/math&amp;gt; is: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
HP_{Max} = \left( HP_0 + N_{PI} \times PI_{HP} \right) \times (1 + \textstyle\sum HP_{Shop} ) + \textstyle\sum HP_{Bonus}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &amp;lt;math&amp;gt;HP_0&amp;lt;/math&amp;gt; is hero-specific starting base health, &amp;lt;math&amp;gt;N_{PI}&amp;lt;/math&amp;gt; is the number of [[Level|Power Increases]] earned, &amp;lt;math&amp;gt;PI_{HP}&amp;lt;/math&amp;gt; is hero-specific added base health from each power increase, &amp;lt;math&amp;gt;HP_{Shop}&amp;lt;/math&amp;gt; are implicit base health percent increases from [[Vitality]] items, and &amp;lt;math&amp;gt;HP_{Bonus}&amp;lt;/math&amp;gt; are bonus health flat increases from various sources. Note that the max health presented in-game is rounded to the nearest integer.&lt;br /&gt;
&lt;br /&gt;
=== Base Health ===&lt;br /&gt;
[[File:Captura de pantalla 2024-10-03 115848.png|thumb|247x247px|Kelvin&#039;s base health at {{Souls|20.0k}}]]&lt;br /&gt;
Base health is the sum of starting base health and added base health from power increases. It is scaled by the inherent increased base health stats of Vitality items. Different heroes have different amounts of starting base health and added base health from power increases.&lt;br /&gt;
&lt;br /&gt;
{{#invoke:HeroDataArrays|heroHealthTable}}&lt;br /&gt;
&lt;br /&gt;
=== Increased Base Health ===&lt;br /&gt;
Each Vitality item purchased grants a percentage increase to base health based on its tier. Higher tier items grant larger percentage increases. These increases are summed together before being multiplied with base health.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align:center&amp;quot;&lt;br /&gt;
!Vitality Item Tier !! % Increased Base Health&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 11%&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 14%&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 17%&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 20%&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Bonus Health ===&lt;br /&gt;
[[File:Survival Power buff.png|thumb|179x179px|Survival power-up located in the training map]]&lt;br /&gt;
Bonus health comes from a variety of sources:&lt;br /&gt;
&lt;br /&gt;
* Items are the most common source of added bonus health. Bonus health can be found on all three item types, but Vitality items tend to provide the largest amounts.&lt;br /&gt;
* [[Golden Statue|Golden statues]] occasionally drop small but permanent added bonus health buffs: &#039;&#039;&#039;+20&#039;&#039;&#039; before 10 minutes, &#039;&#039;&#039;+30&#039;&#039;&#039; between 10 and 30 minutes, or &#039;&#039;&#039;+40&#039;&#039;&#039; after 30 minutes.&lt;br /&gt;
* [[Powerup Buff|Survival Powerups]] immediately grant &#039;&#039;&#039;+400&#039;&#039;&#039; bonus health, but only for 160 seconds or until death.&lt;br /&gt;
* The [[Rejuvenator]] immediately grants &#039;&#039;&#039;+200&#039;&#039;&#039; bonus health, but only for 3 minutes or until death.&lt;br /&gt;
&lt;br /&gt;
Bonus Health is not scaled by increased base health. Bonus health is added after the increased base health multiplier has been applied to base health.&lt;br /&gt;
&lt;br /&gt;
=== Miscellaneous Health Modifiers ===&lt;br /&gt;
With the purchase of [[Glass Cannon]], the hero&#039;s max health is reduced by 15% after the above calculations.&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
[[Kelvin]] begins the game with 600 Base HP. If Kelvin purchases the tier 1 vitality items [[Extra Health]] and [[Extra Stamina]], the first of which also grants 160 bonus health, his max health becomes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;HP_{Max} = 600 \times (1 + (0.11 + 0.11)) + 160 = 892&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If Kelvin then earns a power increase, his base health increases by 50, and his max health becomes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;HP_{Max} = (600 + 50) \times (1 + (0.11 + 0.11)) + 160 = 953&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Regaining Health ==&lt;br /&gt;
From the start of the match, heroes will regenerate health slowly over time, typically 2 HP per second. This rate can be increased by purchasing items such as [[Extra Health]] and [[Fortitude]]. Health can be regained quickly by returning to the spawn room of the team&#039;s base. Various hero abilities can heal, such as Dynamo&#039;s [[Dynamo#3(3)_Rejuvenating_Aurora|Rejuvenating Aurora]]. Sources of [[Spirit Lifesteal|spirit]] and [[Bullet Lifesteal|bullet lifesteal]] grant heroes the opportunity to regain health by dealing the respective damage type.&lt;br /&gt;
&lt;br /&gt;
== Health Bars ==&lt;br /&gt;
[[File:600 vs 1300.png|thumb|A 600 HP Kelvin right next to a 1300 HP Kelvin]]&lt;br /&gt;
&#039;&#039;&#039;Health Bars&#039;&#039;&#039; are visual indicators of a hero&#039;s current health, located just above each hero. Health bars consist of filled orange rectangles, arranged in rows of up to ten. As the hero loses health, the rectangles deplete horizontally. Each full rectangle represents 100 health, and each full row represents 1000 health.&lt;br /&gt;
&lt;br /&gt;
== Item Sources of Bonus Health ==&lt;br /&gt;
The following items explicitly grant added bonus health:&lt;br /&gt;
{{Item stat table|Bonus Health}}&lt;br /&gt;
&lt;br /&gt;
{{Stat navbox}}&lt;/div&gt;</summary>
		<author><name>SerpentofSet</name></author>
	</entry>
	<entry>
		<id>https://deadlock.wiki/Module:HeroDataArrays?diff=11986</id>
		<title>Module:HeroDataArrays</title>
		<link rel="alternate" type="text/html" href="https://deadlock.wiki/Module:HeroDataArrays?diff=11986"/>
		<updated>2024-10-19T02:21:22Z</updated>

		<summary type="html">&lt;p&gt;SerpentofSet: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local allHeroData = mw.loadJsonData(&amp;quot;Data:HeroData.json&amp;quot;)&lt;br /&gt;
local inGameHeroData = {}&lt;br /&gt;
&lt;br /&gt;
-- Just get heroes that are playable&lt;br /&gt;
for i, heroData in pairs(allHeroData) do&lt;br /&gt;
	if heroData[&amp;quot;IsDisabled&amp;quot;] == false and heroData[&amp;quot;InDevelopment&amp;quot;] == false then&lt;br /&gt;
		table.insert(inGameHeroData, heroData)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- heroDataArray takes as argument a table of any length containing keys or &lt;br /&gt;
-- paths of keys in the HeroData JSON, e.g. {Name, MaxHealth, LevelScaling&amp;gt;Health}.&lt;br /&gt;
-- A path of keys should be specified as such, with the &amp;quot;&amp;gt;&amp;quot; character separating&lt;br /&gt;
-- subsequent keys.&lt;br /&gt;
local heroDataArray = function(args)&lt;br /&gt;
	local outData = {}&lt;br /&gt;
	&lt;br /&gt;
	for i, heroData in ipairs(inGameHeroData) do -- Iterate over each hero&lt;br /&gt;
		local out = {}&lt;br /&gt;
		for j, key in pairs(args) do&lt;br /&gt;
			if string.find(key, &amp;quot;&amp;gt;&amp;quot;) ~= nil then			-- If key is actually a path of keys,&lt;br /&gt;
				local node = heroData           			-- starting with the biggest node heroData,&lt;br /&gt;
				for k in string.gmatch(key, &amp;quot;([^&amp;gt;]+)&amp;quot;) do	-- iterate over each key, separating by &amp;quot;&amp;gt;&amp;quot;,&lt;br /&gt;
					if node[k] ~= nil then					-- trying the key as a string e.g. &amp;quot;1&amp;quot;,&lt;br /&gt;
						node = node[k]						&lt;br /&gt;
					else									-- else using the key as numeric,&lt;br /&gt;
						node = node[tonumber(k)]&lt;br /&gt;
					end										-- drilling down the JSON node after node&lt;br /&gt;
				end&lt;br /&gt;
				out[key] = node								-- until outputting the final node&lt;br /&gt;
			else&lt;br /&gt;
				out[key] = heroData[key]&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		outData[heroData[&amp;quot;Name&amp;quot;]] = out&lt;br /&gt;
	end&lt;br /&gt;
	return(outData)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.heroHealthTable = function(frame)&lt;br /&gt;
	heroHealthData = heroDataArray({&amp;quot;Name&amp;quot;, &amp;quot;MaxHealth&amp;quot;, &amp;quot;LevelScaling&amp;gt;Health&amp;quot;})&lt;br /&gt;
&lt;br /&gt;
	z = &amp;quot;{| class=\&amp;quot;wikitable sortable mw-collapsible\&amp;quot; style=\&amp;quot;text-align:center\&amp;quot; \n&amp;quot;..&lt;br /&gt;
		&amp;quot;|+ Hero Base Health Stats \n&amp;quot;..&lt;br /&gt;
		&amp;quot;! Hero !! Starting !! Added per PI !! At Max PI \n&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	for i,a in pairs(heroHealthData) do&lt;br /&gt;
		z = z..&lt;br /&gt;
			&amp;quot;|- \n&amp;quot;..&lt;br /&gt;
			&amp;quot;| style=\&amp;quot;text-align:left;\&amp;quot; | &amp;quot;..frame:expandTemplate{title=&amp;quot;PageRef&amp;quot;, args={a[&amp;quot;Name&amp;quot;], [&#039;type&#039;]=&amp;quot;Hero&amp;quot;}}..&lt;br /&gt;
				&amp;quot; || &amp;quot;..a[&amp;quot;MaxHealth&amp;quot;]..&amp;quot; || +&amp;quot;..a[&amp;quot;LevelScaling&amp;gt;Health&amp;quot;]..&amp;quot; || &amp;quot;..&lt;br /&gt;
				tostring(tonumber(a[&amp;quot;MaxHealth&amp;quot;])+tonumber(a[&amp;quot;LevelScaling&amp;gt;Health&amp;quot;])*14)..&amp;quot; \n&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	z = z..&amp;quot;|}&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	return z&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>SerpentofSet</name></author>
	</entry>
	<entry>
		<id>https://deadlock.wiki/Health?diff=11815</id>
		<title>Health</title>
		<link rel="alternate" type="text/html" href="https://deadlock.wiki/Health?diff=11815"/>
		<updated>2024-10-18T17:48:42Z</updated>

		<summary type="html">&lt;p&gt;SerpentofSet: /* Base Health */ Added health table back in condensed form&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Vitality Icon.png|right|frameless]]&lt;br /&gt;
&#039;&#039;&#039;Health&#039;&#039;&#039; measures the amount of [[damage]] that can be taken before [[Death|dying]], and is fundamental to all [[heroes]] and units. Units and players with health are allowed to interact with the game, and consequently when your health drops to zero you are disabled from playing until respawning.&lt;br /&gt;
&lt;br /&gt;
== Maximum Health ==&lt;br /&gt;
[[File:Captura de pantalla 2024-10-03 115540.png|thumb|263x263px|Kelvin&#039;s starting base health at {{Souls|0}}]]&lt;br /&gt;
The formula for maximum health &amp;lt;math&amp;gt;HP_{Max}&amp;lt;/math&amp;gt; is: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
HP_{Max} = \left( HP_0 + N_{PI} \times PI_{HP} \right) \times (1 + \textstyle\sum HP_{Shop} ) + \textstyle\sum HP_{Bonus}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &amp;lt;math&amp;gt;HP_0&amp;lt;/math&amp;gt; is hero-specific starting base health, &amp;lt;math&amp;gt;N_{PI}&amp;lt;/math&amp;gt; is the number of [[Level|Power Increases]] earned, &amp;lt;math&amp;gt;PI_{HP}&amp;lt;/math&amp;gt; is hero-specific added base health from each power increase, &amp;lt;math&amp;gt;HP_{Shop}&amp;lt;/math&amp;gt; are implicit base health percent increases from [[Vitality]] items, and &amp;lt;math&amp;gt;HP_{Bonus}&amp;lt;/math&amp;gt; are bonus health flat increases from various sources. Note that the max health presented in-game is rounded to the nearest integer.&lt;br /&gt;
&lt;br /&gt;
=== Base Health ===&lt;br /&gt;
[[File:Captura de pantalla 2024-10-03 115848.png|thumb|247x247px|Kelvin&#039;s base health at {{Souls|20.0k}}]]&lt;br /&gt;
Base health is the sum of starting base health and added base health from power increases. It is scaled by the inherent increased base health stats of Vitality items. Different heroes have different amounts of starting base health and added base health from power increases.&lt;br /&gt;
&lt;br /&gt;
{{#invoke:HeroDataArrays|heroHealthTable}}&lt;br /&gt;
&lt;br /&gt;
=== Increased Base Health ===&lt;br /&gt;
Each Vitality item purchased grants a percentage increase to base health based on its tier. Higher tier items grant larger percentage increases. These increases are summed together before being multiplied with base health.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Vitality Item Tier!!% Increased Base Health&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 11%&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 14%&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 17%&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 20%&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Bonus Health ===&lt;br /&gt;
[[File:Survival Power buff.png|thumb|179x179px|Survival power-up located in the training map]]&lt;br /&gt;
Bonus health comes from a variety of sources:&lt;br /&gt;
&lt;br /&gt;
* Items are the most common source of added bonus health. Bonus health can be found on all three item types, but Vitality items tend to provide the largest amounts.&lt;br /&gt;
* [[Golden Statue|Golden statues]] occasionally drop small but permanent added bonus health buffs: &#039;&#039;&#039;+20&#039;&#039;&#039; before 10 minutes, &#039;&#039;&#039;+30&#039;&#039;&#039; between 10 and 30 minutes, or &#039;&#039;&#039;+40&#039;&#039;&#039; after 30 minutes.&lt;br /&gt;
* [[Powerup Buff|Survival Powerups]] immediately grant &#039;&#039;&#039;+400&#039;&#039;&#039; bonus health, but only for 160 seconds or until death.&lt;br /&gt;
* The [[Rejuvenator]] immediately grants &#039;&#039;&#039;+200&#039;&#039;&#039; bonus health, but only for 3 minutes or until death.&lt;br /&gt;
&lt;br /&gt;
Bonus Health is not scaled by increased base health. Bonus health is added after the increased base health multiplier has been applied to base health.&lt;br /&gt;
&lt;br /&gt;
=== Miscellaneous Health Modifiers ===&lt;br /&gt;
With the purchase of [[Glass Cannon]], the hero&#039;s max health is reduced by 15% after the above calculations.&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
[[Kelvin]] begins the game with 600 Base HP. If Kelvin purchases the tier 1 vitality items [[Extra Health]] and [[Extra Stamina]], the first of which also grants 160 bonus health, his max health becomes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;HP_{Max} = 600 \times (1 + (0.11 + 0.11)) + 160 = 892&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If Kelvin then earns a power increase, his base health increases by 50, and his max health becomes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;HP_{Max} = (600 + 50) \times (1 + (0.11 + 0.11)) + 160 = 953&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Regaining Health ==&lt;br /&gt;
From the start of the match, heroes will regenerate health slowly over time, typically 2 HP per second. This rate can be increased by purchasing items such as [[Extra Health]] and [[Fortitude]]. Health can be regained quickly by returning to the spawn room of the team&#039;s base. Various hero abilities can heal, such as Dynamo&#039;s [[Dynamo#3(3)_Rejuvenating_Aurora|Rejuvenating Aurora]]. Sources of [[Spirit Lifesteal|spirit]] and [[Bullet Lifesteal|bullet lifesteal]] grant heroes the opportunity to regain health by dealing the respective damage type.&lt;br /&gt;
&lt;br /&gt;
== Health Bars ==&lt;br /&gt;
[[File:600 vs 1300.png|thumb|A 600 HP Kelvin right next to a 1300 HP Kelvin]]&lt;br /&gt;
&#039;&#039;&#039;Health Bars&#039;&#039;&#039; are visual indicators of a hero&#039;s current health, located just above each hero. Health bars consist of filled orange rectangles, arranged in rows of up to ten. As the hero loses health, the rectangles deplete horizontally. Each full rectangle represents 100 health, and each full row represents 1000 health.&lt;br /&gt;
&lt;br /&gt;
== Item Sources of Bonus Health ==&lt;br /&gt;
The following items explicitly grant added bonus health:&lt;br /&gt;
{{Item stat table|Bonus Health}}&lt;br /&gt;
&lt;br /&gt;
{{Stat navbox}}&lt;/div&gt;</summary>
		<author><name>SerpentofSet</name></author>
	</entry>
	<entry>
		<id>https://deadlock.wiki/Module:HeroDataArrays?diff=11814</id>
		<title>Module:HeroDataArrays</title>
		<link rel="alternate" type="text/html" href="https://deadlock.wiki/Module:HeroDataArrays?diff=11814"/>
		<updated>2024-10-18T17:47:22Z</updated>

		<summary type="html">&lt;p&gt;SerpentofSet: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local allHeroData = mw.loadJsonData(&amp;quot;Data:HeroData.json&amp;quot;)&lt;br /&gt;
local inGameHeroData = {}&lt;br /&gt;
&lt;br /&gt;
-- Just get heroes that are playable&lt;br /&gt;
for i, heroData in pairs(allHeroData) do&lt;br /&gt;
	if heroData[&amp;quot;IsDisabled&amp;quot;] == false and heroData[&amp;quot;InDevelopment&amp;quot;] == false then&lt;br /&gt;
		table.insert(inGameHeroData, heroData)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- heroDataArray takes as argument a table of any length containing keys or &lt;br /&gt;
-- paths of keys in the HeroData JSON, e.g. {Name, MaxHealth, LevelScaling&amp;gt;Health}.&lt;br /&gt;
-- A path of keys should be specified as such, with the &amp;quot;&amp;gt;&amp;quot; character separating&lt;br /&gt;
-- subsequent keys.&lt;br /&gt;
local heroDataArray = function(args)&lt;br /&gt;
	local outData = {}&lt;br /&gt;
	&lt;br /&gt;
	for i, heroData in ipairs(inGameHeroData) do -- Iterate over each hero&lt;br /&gt;
		local out = {}&lt;br /&gt;
		for j, key in pairs(args) do&lt;br /&gt;
			if string.find(key, &amp;quot;&amp;gt;&amp;quot;) ~= nil then			-- If key is actually a path of keys,&lt;br /&gt;
				local node = heroData           			-- starting with the biggest node heroData,&lt;br /&gt;
				for k in string.gmatch(key, &amp;quot;([^&amp;gt;]+)&amp;quot;) do	-- iterate over each key,&lt;br /&gt;
					_node = node[k]							-- progressing down each node in the path,&lt;br /&gt;
					if _node == nil then					-- trying the numeric index if the string&lt;br /&gt;
						_node = node[tonumber(k)]			-- index fails.&lt;br /&gt;
					end&lt;br /&gt;
					node = _node&lt;br /&gt;
				end&lt;br /&gt;
				out[key] = node&lt;br /&gt;
			else&lt;br /&gt;
				out[key] = heroData[key]&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		outData[heroData[&amp;quot;Name&amp;quot;]] = out&lt;br /&gt;
	end&lt;br /&gt;
	return(outData)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.heroHealthTable = function(frame)&lt;br /&gt;
	heroHealthData = heroDataArray({&amp;quot;Name&amp;quot;, &amp;quot;MaxHealth&amp;quot;, &amp;quot;LevelScaling&amp;gt;Health&amp;quot;})&lt;br /&gt;
&lt;br /&gt;
	z = &amp;quot;{| class=\&amp;quot;wikitable sortable mw-collapsible\&amp;quot; style=\&amp;quot;text-align:center\&amp;quot; \n&amp;quot;..&lt;br /&gt;
		&amp;quot;|+ Hero Base Health Stats \n&amp;quot;..&lt;br /&gt;
		&amp;quot;! Hero !! Starting !! Added per PI !! At Max PI \n&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	for i,a in pairs(heroHealthData) do&lt;br /&gt;
		z = z..&lt;br /&gt;
			&amp;quot;|- \n&amp;quot;..&lt;br /&gt;
			&amp;quot;| style=\&amp;quot;text-align:left;\&amp;quot; | &amp;quot;..frame:expandTemplate{title=&amp;quot;PageRef&amp;quot;, args={a[&amp;quot;Name&amp;quot;], [&#039;type&#039;]=&amp;quot;Hero&amp;quot;}}..&lt;br /&gt;
				&amp;quot; || &amp;quot;..a[&amp;quot;MaxHealth&amp;quot;]..&amp;quot; || +&amp;quot;..a[&amp;quot;LevelScaling&amp;gt;Health&amp;quot;]..&amp;quot; || &amp;quot;..&lt;br /&gt;
				tostring(tonumber(a[&amp;quot;MaxHealth&amp;quot;])+tonumber(a[&amp;quot;LevelScaling&amp;gt;Health&amp;quot;])*14)..&amp;quot; \n&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	z = z..&amp;quot;|}&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	return z&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>SerpentofSet</name></author>
	</entry>
	<entry>
		<id>https://deadlock.wiki/Module:HeroDataArrays?diff=11813</id>
		<title>Module:HeroDataArrays</title>
		<link rel="alternate" type="text/html" href="https://deadlock.wiki/Module:HeroDataArrays?diff=11813"/>
		<updated>2024-10-18T17:37:44Z</updated>

		<summary type="html">&lt;p&gt;SerpentofSet: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local allHeroData = mw.loadJsonData(&amp;quot;Data:HeroData.json&amp;quot;)&lt;br /&gt;
local inGameHeroData = {}&lt;br /&gt;
&lt;br /&gt;
-- Just get heroes that are playable&lt;br /&gt;
for i, heroData in pairs(allHeroData) do&lt;br /&gt;
	if heroData[&amp;quot;IsDisabled&amp;quot;] == false and heroData[&amp;quot;InDevelopment&amp;quot;] == false then&lt;br /&gt;
		table.insert(inGameHeroData, heroData)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- heroDataArray takes as argument a table of any length containing keys or &lt;br /&gt;
-- paths of keys in the HeroData JSON, e.g. {Name, MaxHealth, LevelScaling&amp;gt;Health}.&lt;br /&gt;
-- A path of keys should be specified as such, with the &amp;quot;&amp;gt;&amp;quot; character separating&lt;br /&gt;
-- subsequent keys.&lt;br /&gt;
local heroDataArray = function(args)&lt;br /&gt;
	local outData = {}&lt;br /&gt;
	&lt;br /&gt;
	for i, heroData in ipairs(inGameHeroData) do -- Iterate over each hero&lt;br /&gt;
		local out = {}&lt;br /&gt;
		for j, key in pairs(args) do&lt;br /&gt;
			if string.find(key, &amp;quot;&amp;gt;&amp;quot;) ~= nil then			-- If key is actually a path of keys,&lt;br /&gt;
				local node = heroData           			-- starting with the biggest node heroData,&lt;br /&gt;
				for k in string.gmatch(key, &amp;quot;([^&amp;gt;]+)&amp;quot;) do	-- iterate over each key,&lt;br /&gt;
					_node = node[k]							-- progressing down each node in the path,&lt;br /&gt;
					if _node == nil then					-- trying the numeric index if the string&lt;br /&gt;
						_node = node[tonumber(k)]			-- index fails.&lt;br /&gt;
					end&lt;br /&gt;
					node = _node&lt;br /&gt;
				end&lt;br /&gt;
				out[key] = node&lt;br /&gt;
			else&lt;br /&gt;
				out[key] = heroData[key]&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		outData[heroData[&amp;quot;Name&amp;quot;]] = out&lt;br /&gt;
	end&lt;br /&gt;
	return(outData)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.heroHealthTable = function(frame)&lt;br /&gt;
	heroHealthData = heroDataArray({&amp;quot;Name&amp;quot;, &amp;quot;MaxHealth&amp;quot;, &amp;quot;LevelScaling&amp;gt;Health&amp;quot;})&lt;br /&gt;
&lt;br /&gt;
	z = &amp;quot;{| class=\&amp;quot;wikitable sortable mw-collapsible\&amp;quot; \n&amp;quot;..&lt;br /&gt;
		&amp;quot;|+ Hero Base Health Stats \n&amp;quot;..&lt;br /&gt;
		&amp;quot;! Hero !! style=\&amp;quot;text-align: center\&amp;quot; | Starting !! style=\&amp;quot;text-align: center\&amp;quot; | Added per PI !! style=\&amp;quot;text-align: center\&amp;quot; | At Max PI \n&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	for i,a in pairs(heroHealthData) do&lt;br /&gt;
		z = z..&lt;br /&gt;
			&amp;quot;|- \n&amp;quot;..&lt;br /&gt;
			&amp;quot;| &amp;quot;..frame:expandTemplate{title=&amp;quot;PageRef&amp;quot;, args={a[&amp;quot;Name&amp;quot;], [&#039;type&#039;]=&amp;quot;Hero&amp;quot;}}..&lt;br /&gt;
				&amp;quot; || &amp;quot;..a[&amp;quot;MaxHealth&amp;quot;]..&amp;quot; || +&amp;quot;..a[&amp;quot;LevelScaling&amp;gt;Health&amp;quot;]..&amp;quot; || &amp;quot;..&lt;br /&gt;
				tostring(tonumber(a[&amp;quot;MaxHealth&amp;quot;])+tonumber(a[&amp;quot;LevelScaling&amp;gt;Health&amp;quot;])*14)..&amp;quot; \n&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	z = z..&amp;quot;|}&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	return z&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>SerpentofSet</name></author>
	</entry>
	<entry>
		<id>https://deadlock.wiki/Module:HeroDataArrays?diff=11812</id>
		<title>Module:HeroDataArrays</title>
		<link rel="alternate" type="text/html" href="https://deadlock.wiki/Module:HeroDataArrays?diff=11812"/>
		<updated>2024-10-18T17:35:10Z</updated>

		<summary type="html">&lt;p&gt;SerpentofSet: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local allHeroData = mw.loadJsonData(&amp;quot;Data:HeroData.json&amp;quot;)&lt;br /&gt;
local inGameHeroData = {}&lt;br /&gt;
&lt;br /&gt;
-- Just get heroes that are playable&lt;br /&gt;
for i, heroData in pairs(allHeroData) do&lt;br /&gt;
	if heroData[&amp;quot;IsDisabled&amp;quot;] == false and heroData[&amp;quot;InDevelopment&amp;quot;] == false then&lt;br /&gt;
		table.insert(inGameHeroData, heroData)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- heroDataArray takes as argument a table of any length containing keys or &lt;br /&gt;
-- paths of keys in the HeroData JSON, e.g. {Name, MaxHealth, LevelScaling&amp;gt;Health}.&lt;br /&gt;
-- A path of keys should be specified as such, with the &amp;quot;&amp;gt;&amp;quot; character separating&lt;br /&gt;
-- subsequent keys.&lt;br /&gt;
local heroDataArray = function(args)&lt;br /&gt;
	local outData = {}&lt;br /&gt;
	&lt;br /&gt;
	for i, heroData in ipairs(inGameHeroData) do -- Iterate over each hero&lt;br /&gt;
		local out = {}&lt;br /&gt;
		for j, key in pairs(args) do&lt;br /&gt;
			if string.find(key, &amp;quot;&amp;gt;&amp;quot;) ~= nil then			-- If key is actually a path of keys,&lt;br /&gt;
				local node = heroData           			-- starting with the biggest node heroData,&lt;br /&gt;
				for k in string.gmatch(key, &amp;quot;([^&amp;gt;]+)&amp;quot;) do	-- iterate over each key,&lt;br /&gt;
					_node = node[k]							-- progressing down each node in the path,&lt;br /&gt;
					if _node == nil then					-- trying the numeric index if the string&lt;br /&gt;
						_node = node[tonumber(k)]			-- index fails.&lt;br /&gt;
					end&lt;br /&gt;
					node = _node&lt;br /&gt;
				end&lt;br /&gt;
				out[key] = node&lt;br /&gt;
			else&lt;br /&gt;
				out[key] = heroData[key]&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		outData[heroData[&amp;quot;Name&amp;quot;]] = out&lt;br /&gt;
	end&lt;br /&gt;
	return(outData)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.heroHealthTable = function(frame)&lt;br /&gt;
	heroHealthData = heroDataArray({&amp;quot;Name&amp;quot;, &amp;quot;MaxHealth&amp;quot;, &amp;quot;LevelScaling&amp;gt;Health&amp;quot;})&lt;br /&gt;
&lt;br /&gt;
	z = &amp;quot;{| class=\&amp;quot;wikitable sortable mw-collapsible\&amp;quot; style=\&amp;quot;text-align: center\&amp;quot;\n&amp;quot;..&lt;br /&gt;
		&amp;quot;|+ Hero Base Health Stats \n&amp;quot;..&lt;br /&gt;
		&amp;quot;! style=\&amp;quot;text-align: left\&amp;quot; | Hero !! Starting !! Added per PI !! At Max PI \n&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	for i,a in pairs(heroHealthData) do&lt;br /&gt;
		z = z..&lt;br /&gt;
			&amp;quot;|- \n&amp;quot;..&lt;br /&gt;
			&amp;quot;| &amp;quot;..frame:expandTemplate{title=&amp;quot;PageRef&amp;quot;, args={a[&amp;quot;Name&amp;quot;], [&#039;type&#039;]=&amp;quot;Hero&amp;quot;}}..&lt;br /&gt;
				&amp;quot; || &amp;quot;..a[&amp;quot;MaxHealth&amp;quot;]..&amp;quot; || +&amp;quot;..a[&amp;quot;LevelScaling&amp;gt;Health&amp;quot;]..&amp;quot; || &amp;quot;..&lt;br /&gt;
				tostring(tonumber(a[&amp;quot;MaxHealth&amp;quot;])+tonumber(a[&amp;quot;LevelScaling&amp;gt;Health&amp;quot;])*14)..&amp;quot; \n&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	z = z..&amp;quot;|}&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	return z&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>SerpentofSet</name></author>
	</entry>
	<entry>
		<id>https://deadlock.wiki/User:SerpentofSet?diff=11811</id>
		<title>User:SerpentofSet</title>
		<link rel="alternate" type="text/html" href="https://deadlock.wiki/User:SerpentofSet?diff=11811"/>
		<updated>2024-10-18T17:33:18Z</updated>

		<summary type="html">&lt;p&gt;SerpentofSet: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I am bad at the game so I edit the wiki&lt;br /&gt;
&lt;br /&gt;
What&#039;s a sandbox&lt;br /&gt;
{{PageRef|Yamato|type=Hero}}&lt;br /&gt;
&lt;br /&gt;
{{#invoke:HeroDataArrays|heroHealthTable}}&lt;br /&gt;
&lt;br /&gt;
[[File:Siphon Life.png|class=abilityicon]]&lt;br /&gt;
[[File:Tornado.png|class=abilityicon]]&lt;br /&gt;
&lt;br /&gt;
{{#invoke:ItemsByStat|tablefy|BulletLifestealPercent|+X% Bullet Lifesteal|%}}&lt;br /&gt;
&lt;br /&gt;
Use this for the debug console when testing the ItemsByStat page: =p.tablefy(  mw.getCurrentFrame():newChild{&lt;br /&gt;
title=&amp;quot;Module:ItemsByStat&amp;quot;,      args={&amp;quot;BulletLifestealPercent&amp;quot;, &amp;quot;+X% Bullet Lifesteal&amp;quot;, &amp;quot;%&amp;quot;}  })&lt;/div&gt;</summary>
		<author><name>SerpentofSet</name></author>
	</entry>
	<entry>
		<id>https://deadlock.wiki/Module:HeroDataArrays?diff=11810</id>
		<title>Module:HeroDataArrays</title>
		<link rel="alternate" type="text/html" href="https://deadlock.wiki/Module:HeroDataArrays?diff=11810"/>
		<updated>2024-10-18T17:33:11Z</updated>

		<summary type="html">&lt;p&gt;SerpentofSet: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local allHeroData = mw.loadJsonData(&amp;quot;Data:HeroData.json&amp;quot;)&lt;br /&gt;
local inGameHeroData = {}&lt;br /&gt;
&lt;br /&gt;
-- Just get heroes that are playable&lt;br /&gt;
for i, heroData in pairs(allHeroData) do&lt;br /&gt;
	if heroData[&amp;quot;IsDisabled&amp;quot;] == false and heroData[&amp;quot;InDevelopment&amp;quot;] == false then&lt;br /&gt;
		table.insert(inGameHeroData, heroData)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- heroDataArray takes as argument a table of any length containing keys or &lt;br /&gt;
-- paths of keys in the HeroData JSON, e.g. {Name, MaxHealth, LevelScaling&amp;gt;Health}.&lt;br /&gt;
-- A path of keys should be specified as such, with the &amp;quot;&amp;gt;&amp;quot; character separating&lt;br /&gt;
-- subsequent keys.&lt;br /&gt;
local heroDataArray = function(args)&lt;br /&gt;
	local outData = {}&lt;br /&gt;
	&lt;br /&gt;
	for i, heroData in ipairs(inGameHeroData) do -- Iterate over each hero&lt;br /&gt;
		local out = {}&lt;br /&gt;
		for j, key in pairs(args) do&lt;br /&gt;
			if string.find(key, &amp;quot;&amp;gt;&amp;quot;) ~= nil then			-- If key is actually a path of keys,&lt;br /&gt;
				local node = heroData           			-- starting with the biggest node heroData,&lt;br /&gt;
				for k in string.gmatch(key, &amp;quot;([^&amp;gt;]+)&amp;quot;) do	-- iterate over each key,&lt;br /&gt;
					_node = node[k]							-- progressing down each node in the path,&lt;br /&gt;
					if _node == nil then					-- trying the numeric index if the string&lt;br /&gt;
						_node = node[tonumber(k)]			-- index fails.&lt;br /&gt;
					end&lt;br /&gt;
					node = _node&lt;br /&gt;
				end&lt;br /&gt;
				out[key] = node&lt;br /&gt;
			else&lt;br /&gt;
				out[key] = heroData[key]&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		outData[heroData[&amp;quot;Name&amp;quot;]] = out&lt;br /&gt;
	end&lt;br /&gt;
	return(outData)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.heroHealthTable = function(frame)&lt;br /&gt;
	heroHealthData = heroDataArray({&amp;quot;Name&amp;quot;, &amp;quot;MaxHealth&amp;quot;, &amp;quot;LevelScaling&amp;gt;Health&amp;quot;})&lt;br /&gt;
&lt;br /&gt;
	z = &amp;quot;{| class=\&amp;quot;wikitable sortable collapsible\&amp;quot; style=\&amp;quot;text-align: center\&amp;quot;\n&amp;quot;..&lt;br /&gt;
		&amp;quot;|+ Hero Base Health Stats \n&amp;quot;..&lt;br /&gt;
		&amp;quot;! Hero !! Starting !! Added per PI !! At Max PI \n&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	for i,a in pairs(heroHealthData) do&lt;br /&gt;
		z = z..&lt;br /&gt;
			&amp;quot;|- \n&amp;quot;..&lt;br /&gt;
			&amp;quot;| &amp;quot;..frame:expandTemplate{title=&amp;quot;PageRef&amp;quot;, args={a[&amp;quot;Name&amp;quot;], [&#039;type&#039;]=&amp;quot;Hero&amp;quot;}}..&lt;br /&gt;
				&amp;quot; || &amp;quot;..a[&amp;quot;MaxHealth&amp;quot;]..&amp;quot; || +&amp;quot;..a[&amp;quot;LevelScaling&amp;gt;Health&amp;quot;]..&amp;quot; || &amp;quot;..&lt;br /&gt;
				tostring(tonumber(a[&amp;quot;MaxHealth&amp;quot;])+tonumber(a[&amp;quot;LevelScaling&amp;gt;Health&amp;quot;])*14)..&amp;quot; \n&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	z = z..&amp;quot;|}&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	return z&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>SerpentofSet</name></author>
	</entry>
	<entry>
		<id>https://deadlock.wiki/Module:HeroDataArrays?diff=11809</id>
		<title>Module:HeroDataArrays</title>
		<link rel="alternate" type="text/html" href="https://deadlock.wiki/Module:HeroDataArrays?diff=11809"/>
		<updated>2024-10-18T17:31:58Z</updated>

		<summary type="html">&lt;p&gt;SerpentofSet: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local allHeroData = mw.loadJsonData(&amp;quot;Data:HeroData.json&amp;quot;)&lt;br /&gt;
local inGameHeroData = {}&lt;br /&gt;
&lt;br /&gt;
-- Just get heroes that are playable&lt;br /&gt;
for i, heroData in pairs(allHeroData) do&lt;br /&gt;
	if heroData[&amp;quot;IsDisabled&amp;quot;] == false and heroData[&amp;quot;InDevelopment&amp;quot;] == false then&lt;br /&gt;
		table.insert(inGameHeroData, heroData)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- heroDataArray takes as argument a table of any length containing keys or &lt;br /&gt;
-- paths of keys in the HeroData JSON, e.g. {Name, MaxHealth, LevelScaling&amp;gt;Health}.&lt;br /&gt;
-- A path of keys should be specified as such, with the &amp;quot;&amp;gt;&amp;quot; character separating&lt;br /&gt;
-- subsequent keys.&lt;br /&gt;
local heroDataArray = function(args)&lt;br /&gt;
	local outData = {}&lt;br /&gt;
	&lt;br /&gt;
	for i, heroData in ipairs(inGameHeroData) do -- Iterate over each hero&lt;br /&gt;
		local out = {}&lt;br /&gt;
		for j, key in pairs(args) do&lt;br /&gt;
			if string.find(key, &amp;quot;&amp;gt;&amp;quot;) ~= nil then			-- If key is actually a path of keys,&lt;br /&gt;
				local node = heroData           			-- starting with the biggest node heroData,&lt;br /&gt;
				for k in string.gmatch(key, &amp;quot;([^&amp;gt;]+)&amp;quot;) do	-- iterate over each key,&lt;br /&gt;
					_node = node[k]							-- progressing down each node in the path,&lt;br /&gt;
					if _node == nil then					-- trying the numeric index if the string&lt;br /&gt;
						_node = node[tonumber(k)]			-- index fails.&lt;br /&gt;
					end&lt;br /&gt;
					node = _node&lt;br /&gt;
				end&lt;br /&gt;
				out[key] = node&lt;br /&gt;
			else&lt;br /&gt;
				out[key] = heroData[key]&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		outData[heroData[&amp;quot;Name&amp;quot;]] = out&lt;br /&gt;
	end&lt;br /&gt;
	return(outData)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.heroHealthTable = function(frame)&lt;br /&gt;
	heroHealthData = heroDataArray({&amp;quot;Name&amp;quot;, &amp;quot;MaxHealth&amp;quot;, &amp;quot;LevelScaling&amp;gt;Health&amp;quot;})&lt;br /&gt;
&lt;br /&gt;
	z = &amp;quot;{| class=\&amp;quot;wikitable sortable\&amp;quot; \n&amp;quot;..&lt;br /&gt;
		&amp;quot;|+ Hero Base Health Stats \n&amp;quot;..&lt;br /&gt;
		&amp;quot;! Hero !! Starting !! Added per PI !! At Max PI \n&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	for i,a in pairs(heroHealthData) do&lt;br /&gt;
		z = z..&lt;br /&gt;
			&amp;quot;|- \n&amp;quot;..&lt;br /&gt;
			&amp;quot;| &amp;quot;..frame:expandTemplate{title=&amp;quot;PageRef&amp;quot;, args={a[&amp;quot;Name&amp;quot;], [&#039;type&#039;]=&amp;quot;Hero&amp;quot;}}..&lt;br /&gt;
				&amp;quot; || &amp;quot;..a[&amp;quot;MaxHealth&amp;quot;]..&amp;quot; || +&amp;quot;..a[&amp;quot;LevelScaling&amp;gt;Health&amp;quot;]..&amp;quot; || &amp;quot;..&lt;br /&gt;
				tostring(tonumber(a[&amp;quot;MaxHealth&amp;quot;])+tonumber(a[&amp;quot;LevelScaling&amp;gt;Health&amp;quot;])*14)..&amp;quot; \n&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	z = z..&amp;quot;|}&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	return z&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>SerpentofSet</name></author>
	</entry>
	<entry>
		<id>https://deadlock.wiki/Module:HeroDataArrays?diff=11808</id>
		<title>Module:HeroDataArrays</title>
		<link rel="alternate" type="text/html" href="https://deadlock.wiki/Module:HeroDataArrays?diff=11808"/>
		<updated>2024-10-18T17:29:48Z</updated>

		<summary type="html">&lt;p&gt;SerpentofSet: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local allHeroData = mw.loadJsonData(&amp;quot;Data:HeroData.json&amp;quot;)&lt;br /&gt;
local inGameHeroData = {}&lt;br /&gt;
&lt;br /&gt;
-- Just get heroes that are playable&lt;br /&gt;
for i, heroData in pairs(allHeroData) do&lt;br /&gt;
	if heroData[&amp;quot;IsDisabled&amp;quot;] == false and heroData[&amp;quot;InDevelopment&amp;quot;] == false then&lt;br /&gt;
		table.insert(inGameHeroData, heroData)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- heroDataArray takes as argument a table of any length containing keys or &lt;br /&gt;
-- paths of keys in the HeroData JSON, e.g. {Name, MaxHealth, LevelScaling&amp;gt;Health}.&lt;br /&gt;
-- A path of keys should be specified as such, with the &amp;quot;&amp;gt;&amp;quot; character separating&lt;br /&gt;
-- subsequent keys.&lt;br /&gt;
local heroDataArray = function(args)&lt;br /&gt;
	local outData = {}&lt;br /&gt;
	&lt;br /&gt;
	for i, heroData in ipairs(inGameHeroData) do -- Iterate over each hero&lt;br /&gt;
		local out = {}&lt;br /&gt;
		for j, key in pairs(args) do&lt;br /&gt;
			if string.find(key, &amp;quot;&amp;gt;&amp;quot;) ~= nil then			-- If key is actually a path of keys,&lt;br /&gt;
				local node = heroData           			-- starting with the biggest node heroData,&lt;br /&gt;
				for k in string.gmatch(key, &amp;quot;([^&amp;gt;]+)&amp;quot;) do	-- iterate over each key,&lt;br /&gt;
					_node = node[k]							-- progressing down each node in the path,&lt;br /&gt;
					if _node == nil then					-- trying the numeric index if the string&lt;br /&gt;
						_node = node[tonumber(k)]			-- index fails.&lt;br /&gt;
					end&lt;br /&gt;
					node = _node&lt;br /&gt;
				end&lt;br /&gt;
				out[key] = node&lt;br /&gt;
			else&lt;br /&gt;
				out[key] = heroData[key]&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		outData[heroData[&amp;quot;Name&amp;quot;]] = out&lt;br /&gt;
	end&lt;br /&gt;
	return(outData)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.heroHealthTable = function(frame)&lt;br /&gt;
	heroHealthData = heroDataArray({&amp;quot;Name&amp;quot;, &amp;quot;MaxHealth&amp;quot;, &amp;quot;LevelScaling&amp;gt;Health&amp;quot;})&lt;br /&gt;
&lt;br /&gt;
	z = &amp;quot;{| class=\&amp;quot;wikitable sortable\&amp;quot; \n&amp;quot;..&lt;br /&gt;
		&amp;quot;|+ Hero Base Health Stats \n&amp;quot;..&lt;br /&gt;
		&amp;quot;! Hero !! Starting !! Added per PI !! At Max PI \n&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	for i,a in pairs(heroHealthData) do&lt;br /&gt;
		z = z..&lt;br /&gt;
			&amp;quot;|- \n&amp;quot;..&lt;br /&gt;
			&amp;quot;| &amp;quot;..frame:expandTemplate{title=&amp;quot;PageRef&amp;quot;, args={a[&amp;quot;Name&amp;quot;], [&#039;type&#039;]=&amp;quot;Hero&amp;quot;}}..&lt;br /&gt;
				&amp;quot; || &amp;quot;..a[&amp;quot;MaxHealth&amp;quot;]..&amp;quot; || &amp;quot;..a[&amp;quot;LevelScaling&amp;gt;Health&amp;quot;]..&amp;quot; || a billion \n&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	z = z..&amp;quot;|}&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	return z&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>SerpentofSet</name></author>
	</entry>
	<entry>
		<id>https://deadlock.wiki/Module:HeroDataArrays?diff=11807</id>
		<title>Module:HeroDataArrays</title>
		<link rel="alternate" type="text/html" href="https://deadlock.wiki/Module:HeroDataArrays?diff=11807"/>
		<updated>2024-10-18T16:20:38Z</updated>

		<summary type="html">&lt;p&gt;SerpentofSet: Health table hopefully works?&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local allHeroData = mw.loadJsonData(&amp;quot;Data:HeroData.json&amp;quot;)&lt;br /&gt;
local inGameHeroData = {}&lt;br /&gt;
&lt;br /&gt;
-- Just get heroes that are playable&lt;br /&gt;
for i, heroData in pairs(allHeroData) do&lt;br /&gt;
	if heroData[&amp;quot;IsDisabled&amp;quot;] == false and heroData[&amp;quot;InDevelopment&amp;quot;] == false then&lt;br /&gt;
		table.insert(inGameHeroData, heroData)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- heroDataArray takes as argument a table of any length containing keys or &lt;br /&gt;
-- paths of keys in the HeroData JSON, e.g. {Name, MaxHealth, LevelScaling&amp;gt;Health}.&lt;br /&gt;
-- A path of keys should be specified as such, with the &amp;quot;&amp;gt;&amp;quot; character separating&lt;br /&gt;
-- subsequent keys.&lt;br /&gt;
local heroDataArray = function(args)&lt;br /&gt;
	local outData = {}&lt;br /&gt;
	&lt;br /&gt;
	for i, heroData in ipairs(inGameHeroData) do -- Iterate over each hero&lt;br /&gt;
		local out = {}&lt;br /&gt;
		for j, key in pairs(args) do&lt;br /&gt;
			if string.find(key, &amp;quot;&amp;gt;&amp;quot;) ~= nil then			-- If key is actually a path of keys,&lt;br /&gt;
				local node = heroData           			-- starting with the biggest node heroData,&lt;br /&gt;
				for k in string.gmatch(key, &amp;quot;([^&amp;gt;]+)&amp;quot;) do	-- iterate over each key,&lt;br /&gt;
					_node = node[k]							-- progressing down each node in the path,&lt;br /&gt;
					if _node == nil then					-- trying the numeric index if the string&lt;br /&gt;
						_node = node[tonumber(k)]			-- index fails.&lt;br /&gt;
					end&lt;br /&gt;
					node = _node&lt;br /&gt;
				end&lt;br /&gt;
				out[key] = node&lt;br /&gt;
			else&lt;br /&gt;
				out[key] = heroData[key]&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		outData[heroData[&amp;quot;Name&amp;quot;]] = out&lt;br /&gt;
	end&lt;br /&gt;
	return(outData)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.heroHealthTable = function()&lt;br /&gt;
	heroHealthData = heroDataArray({&amp;quot;Name&amp;quot;, &amp;quot;MaxHealth&amp;quot;, &amp;quot;LevelScaling&amp;gt;Health&amp;quot;})&lt;br /&gt;
&lt;br /&gt;
	z = &lt;br /&gt;
[[{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
|+ Hero Base Health Stats&lt;br /&gt;
! Hero !! Starting !! Added per PI !! At Max PI&lt;br /&gt;
]]&lt;br /&gt;
	&lt;br /&gt;
	for i,a in pairs(heroHealthData) do&lt;br /&gt;
		z=z..&lt;br /&gt;
[[|-&lt;br /&gt;
| {{PageRef|]]..a[&amp;quot;Name&amp;quot;]..[[|type=Hero}} || ]]..a[&amp;quot;MaxHealth&amp;quot;]..[[ || ]]..a[&amp;quot;LevelScaling&amp;gt;Health&amp;quot;]..[[ || a billion&lt;br /&gt;
]]&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	z = z..&amp;quot;|}&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	return z&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>SerpentofSet</name></author>
	</entry>
	<entry>
		<id>https://deadlock.wiki/Module:HeroDataArrays?diff=11806</id>
		<title>Module:HeroDataArrays</title>
		<link rel="alternate" type="text/html" href="https://deadlock.wiki/Module:HeroDataArrays?diff=11806"/>
		<updated>2024-10-18T15:48:22Z</updated>

		<summary type="html">&lt;p&gt;SerpentofSet: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
local allHeroData = mw.loadJsonData(&amp;quot;Data:HeroData.json&amp;quot;)&lt;br /&gt;
local inGameHeroData = {}&lt;br /&gt;
&lt;br /&gt;
-- Just get heroes that are playable&lt;br /&gt;
for i, heroData in pairs(allHeroData) do&lt;br /&gt;
	if heroData[&amp;quot;IsDisabled&amp;quot;] == false and heroData[&amp;quot;InDevelopment&amp;quot;] == false then&lt;br /&gt;
		table.insert(inGameHeroData, heroData)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
-- heroDataArray takes as arguments any keys or path of keys in the HeroData JSON,&lt;br /&gt;
-- e.g. Name, MaxHealth or LevelScaling&amp;gt;Health. A path of keys should be specified&lt;br /&gt;
-- as such, with the &amp;quot;&amp;gt;&amp;quot; character separating subsequent keys.&lt;br /&gt;
--{{#invoke:HeroDataArrays|heroDataArray|...}}&lt;br /&gt;
p.heroDataArray = function(frame)&lt;br /&gt;
	local outData = {}&lt;br /&gt;
	&lt;br /&gt;
	for i, heroData in ipairs(inGameHeroData) do -- Iterate over each hero&lt;br /&gt;
		local out = {}&lt;br /&gt;
		for j, key in pairs(frame.args) do&lt;br /&gt;
			if string.find(key, &amp;quot;&amp;gt;&amp;quot;) ~= nil then			-- If key is actually a path of keys,&lt;br /&gt;
				local node = heroData           			-- starting with the biggest node heroData,&lt;br /&gt;
				for k in string.gmatch(key, &amp;quot;([^&amp;gt;]+)&amp;quot;) do	-- iterate over each key,&lt;br /&gt;
					_node = node[k]							-- progressing down each node in the path,&lt;br /&gt;
					if _node == nil then					-- trying the numeric index if the string&lt;br /&gt;
						_node = node[tonumber(k)]			-- index fails.&lt;br /&gt;
					end&lt;br /&gt;
					node = _node&lt;br /&gt;
				end&lt;br /&gt;
				out[key] = node&lt;br /&gt;
			else&lt;br /&gt;
				out[key] = heroData[key]&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		outData[heroData[&amp;quot;Name&amp;quot;]] = out&lt;br /&gt;
	end&lt;br /&gt;
	return(outData)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>SerpentofSet</name></author>
	</entry>
	<entry>
		<id>https://deadlock.wiki/Module:HeroDataArrays?diff=11791</id>
		<title>Module:HeroDataArrays</title>
		<link rel="alternate" type="text/html" href="https://deadlock.wiki/Module:HeroDataArrays?diff=11791"/>
		<updated>2024-10-18T06:10:17Z</updated>

		<summary type="html">&lt;p&gt;SerpentofSet: start hero data grabber&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
local allHeroData = mw.loadJsonData(&amp;quot;Data:HeroData.json&amp;quot;)&lt;br /&gt;
local inGameHeroData = {}&lt;br /&gt;
&lt;br /&gt;
for heroKey, heroData in pairs(allHeroData) do&lt;br /&gt;
	if heroData[&amp;quot;IsDisabled&amp;quot;] == false and heroData[&amp;quot;InDevelopment&amp;quot;] == false then&lt;br /&gt;
		table.insert(inGameHeroData, heroData)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
p.heroDataArray = function(frame)&lt;br /&gt;
	local outData = {}&lt;br /&gt;
	&lt;br /&gt;
	for i, heroData in ipairs(inGameHeroData) do&lt;br /&gt;
		local out = {}&lt;br /&gt;
		for j, keyPath in pairs(frame.args) do&lt;br /&gt;
			if type(keyPath)==&amp;quot;table&amp;quot; then &lt;br /&gt;
				local node = heroData&lt;br /&gt;
				for k, key in pairs(keyPath) do&lt;br /&gt;
					node = node[key]&lt;br /&gt;
				end&lt;br /&gt;
				out[table.concat(keyPath,&amp;quot;&amp;quot;)] = node&lt;br /&gt;
			else&lt;br /&gt;
				out[keyPath] = heroData[keyPath]&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		outData[heroData[&amp;quot;Name&amp;quot;]] = out&lt;br /&gt;
	end&lt;br /&gt;
	return(outData)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--=p.heroDataArray{args={&amp;quot;Name&amp;quot;, &amp;quot;MaxHealth&amp;quot;, &amp;quot;{LevelScaling, Health}&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>SerpentofSet</name></author>
	</entry>
	<entry>
		<id>https://deadlock.wiki/User:SerpentofSet?diff=11688</id>
		<title>User:SerpentofSet</title>
		<link rel="alternate" type="text/html" href="https://deadlock.wiki/User:SerpentofSet?diff=11688"/>
		<updated>2024-10-18T02:57:59Z</updated>

		<summary type="html">&lt;p&gt;SerpentofSet: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I am bad at the game so I edit the wiki&lt;br /&gt;
&lt;br /&gt;
What&#039;s a sandbox&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Hero !! Starting Base Health !! Added Base Health per PI !! Base Health at Max PI &lt;br /&gt;
|-&lt;br /&gt;
| {{PageRef|Abrams|type=Hero}} || {{#invoke:HeroData|get_hero_var|hero_atlas|MaxHealth}} || {{#invoke:HeroData|get_list_elem|hero_atlas|LevelScaling|Health}} || a billion&lt;br /&gt;
|-&lt;br /&gt;
| Example || Example || Example ||&lt;br /&gt;
|-&lt;br /&gt;
| Example || Example || Example ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[File:Siphon Life.png|class=abilityicon]]&lt;br /&gt;
[[File:Tornado.png|class=abilityicon]]&lt;br /&gt;
&lt;br /&gt;
{{#invoke:ItemsByStat|tablefy|BulletLifestealPercent|+X% Bullet Lifesteal|%}}&lt;br /&gt;
&lt;br /&gt;
Use this for the debug console when testing the ItemsByStat page: =p.tablefy(  mw.getCurrentFrame():newChild{&lt;br /&gt;
title=&amp;quot;Module:ItemsByStat&amp;quot;,      args={&amp;quot;BulletLifestealPercent&amp;quot;, &amp;quot;+X% Bullet Lifesteal&amp;quot;, &amp;quot;%&amp;quot;}  })&lt;/div&gt;</summary>
		<author><name>SerpentofSet</name></author>
	</entry>
	<entry>
		<id>https://deadlock.wiki/User:SerpentofSet/vector-2022.css?diff=11685</id>
		<title>User:SerpentofSet/vector-2022.css</title>
		<link rel="alternate" type="text/html" href="https://deadlock.wiki/User:SerpentofSet/vector-2022.css?diff=11685"/>
		<updated>2024-10-18T02:01:06Z</updated>

		<summary type="html">&lt;p&gt;SerpentofSet: Blanked the page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>SerpentofSet</name></author>
	</entry>
	<entry>
		<id>https://deadlock.wiki/User:SerpentofSet/vector-2022.css?diff=11684</id>
		<title>User:SerpentofSet/vector-2022.css</title>
		<link rel="alternate" type="text/html" href="https://deadlock.wiki/User:SerpentofSet/vector-2022.css?diff=11684"/>
		<updated>2024-10-18T02:00:13Z</updated>

		<summary type="html">&lt;p&gt;SerpentofSet: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
.abilityicon {&lt;br /&gt;
	filter: invert(50%);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media (prefers-color-scheme: dark) {&lt;br /&gt;
	div {&lt;br /&gt;
		background-color: #383838;&lt;br /&gt;
		color: #ace;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	.abilityicondeactivate {&lt;br /&gt;
		filter: invert(50%);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>SerpentofSet</name></author>
	</entry>
	<entry>
		<id>https://deadlock.wiki/User:SerpentofSet/vector-2022.css?diff=11683</id>
		<title>User:SerpentofSet/vector-2022.css</title>
		<link rel="alternate" type="text/html" href="https://deadlock.wiki/User:SerpentofSet/vector-2022.css?diff=11683"/>
		<updated>2024-10-18T01:55:02Z</updated>

		<summary type="html">&lt;p&gt;SerpentofSet: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
.abilityicon {&lt;br /&gt;
	filter: invert(50%);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media (prefers-color-scheme: dark) {&lt;br /&gt;
	body {&lt;br /&gt;
		background-color: #383838;&lt;br /&gt;
		color: #ace;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	.abilityicondeactivate {&lt;br /&gt;
		filter: invert(50%);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>SerpentofSet</name></author>
	</entry>
	<entry>
		<id>https://deadlock.wiki/User:SerpentofSet/vector-2022.css?diff=11682</id>
		<title>User:SerpentofSet/vector-2022.css</title>
		<link rel="alternate" type="text/html" href="https://deadlock.wiki/User:SerpentofSet/vector-2022.css?diff=11682"/>
		<updated>2024-10-18T01:53:39Z</updated>

		<summary type="html">&lt;p&gt;SerpentofSet: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
.abilityicon {&lt;br /&gt;
	filter: invert(50%);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media (prefers-color-scheme: dark) {&lt;br /&gt;
	root {&lt;br /&gt;
		background-color: #1f1f1f;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	.abilityicondeactivate {&lt;br /&gt;
		filter: invert(50%);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>SerpentofSet</name></author>
	</entry>
	<entry>
		<id>https://deadlock.wiki/User:SerpentofSet/vector-2022.css?diff=11681</id>
		<title>User:SerpentofSet/vector-2022.css</title>
		<link rel="alternate" type="text/html" href="https://deadlock.wiki/User:SerpentofSet/vector-2022.css?diff=11681"/>
		<updated>2024-10-18T01:52:23Z</updated>

		<summary type="html">&lt;p&gt;SerpentofSet: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
.abilityicon {&lt;br /&gt;
	filter: invert(50%);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media (prefers-color-scheme: dark) {&lt;br /&gt;
	body {&lt;br /&gt;
		background-color: #1f1f1f;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	.abilityicondeactivate {&lt;br /&gt;
		filter: invert(50%);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>SerpentofSet</name></author>
	</entry>
	<entry>
		<id>https://deadlock.wiki/User:SerpentofSet/vector-2022.css?diff=11680</id>
		<title>User:SerpentofSet/vector-2022.css</title>
		<link rel="alternate" type="text/html" href="https://deadlock.wiki/User:SerpentofSet/vector-2022.css?diff=11680"/>
		<updated>2024-10-18T01:51:15Z</updated>

		<summary type="html">&lt;p&gt;SerpentofSet: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
.abilityicon {&lt;br /&gt;
	filter: invert(50%);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media (prefers-color-scheme: dark) {&lt;br /&gt;
	body {&lt;br /&gt;
		background-color: #222;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	.abilityicondeactivate {&lt;br /&gt;
		filter: invert(50%);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>SerpentofSet</name></author>
	</entry>
	<entry>
		<id>https://deadlock.wiki/User:SerpentofSet/vector-2022.css?diff=11679</id>
		<title>User:SerpentofSet/vector-2022.css</title>
		<link rel="alternate" type="text/html" href="https://deadlock.wiki/User:SerpentofSet/vector-2022.css?diff=11679"/>
		<updated>2024-10-18T01:50:37Z</updated>

		<summary type="html">&lt;p&gt;SerpentofSet: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
.abilityicon {&lt;br /&gt;
	filter: invert(50%);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media (prefers-color-scheme: dark) {&lt;br /&gt;
	body {&lt;br /&gt;
		background: #222;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	.abilityicondeactivate {&lt;br /&gt;
		filter: invert(50%);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>SerpentofSet</name></author>
	</entry>
	<entry>
		<id>https://deadlock.wiki/User:SerpentofSet/vector-2022.css?diff=11678</id>
		<title>User:SerpentofSet/vector-2022.css</title>
		<link rel="alternate" type="text/html" href="https://deadlock.wiki/User:SerpentofSet/vector-2022.css?diff=11678"/>
		<updated>2024-10-18T01:47:43Z</updated>

		<summary type="html">&lt;p&gt;SerpentofSet: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
.abilityicon {&lt;br /&gt;
	filter: invert(50%);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media (prefers-color-scheme: dark) {&lt;br /&gt;
&lt;br /&gt;
  .abilityicondeactivate {&lt;br /&gt;
    filter: invert(50%);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>SerpentofSet</name></author>
	</entry>
	<entry>
		<id>https://deadlock.wiki/User:SerpentofSet/vector-2022.css?diff=11677</id>
		<title>User:SerpentofSet/vector-2022.css</title>
		<link rel="alternate" type="text/html" href="https://deadlock.wiki/User:SerpentofSet/vector-2022.css?diff=11677"/>
		<updated>2024-10-18T01:47:19Z</updated>

		<summary type="html">&lt;p&gt;SerpentofSet: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
.abilityicon {&lt;br /&gt;
	filter: invert(50%);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media (prefers-color-scheme: dark) {&lt;br /&gt;
    body {&lt;br /&gt;
        color: #ccc;&lt;br /&gt;
        background: #222;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
  .abilityicondeactivate {&lt;br /&gt;
    filter: invert(50%);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>SerpentofSet</name></author>
	</entry>
	<entry>
		<id>https://deadlock.wiki/User:SerpentofSet/vector-2022.css?diff=11676</id>
		<title>User:SerpentofSet/vector-2022.css</title>
		<link rel="alternate" type="text/html" href="https://deadlock.wiki/User:SerpentofSet/vector-2022.css?diff=11676"/>
		<updated>2024-10-18T01:15:32Z</updated>

		<summary type="html">&lt;p&gt;SerpentofSet: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
.abilityicon {&lt;br /&gt;
	filter: invert(50%);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media (prefers-color-scheme: dark) {&lt;br /&gt;
  .abilityicondeactivate {&lt;br /&gt;
    filter: invert(50%);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>SerpentofSet</name></author>
	</entry>
	<entry>
		<id>https://deadlock.wiki/User:SerpentofSet?diff=11675</id>
		<title>User:SerpentofSet</title>
		<link rel="alternate" type="text/html" href="https://deadlock.wiki/User:SerpentofSet?diff=11675"/>
		<updated>2024-10-18T01:11:04Z</updated>

		<summary type="html">&lt;p&gt;SerpentofSet: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I am bad at the game so I edit the wiki&lt;br /&gt;
&lt;br /&gt;
What&#039;s a sandbox&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Hero !! Starting Base Health !! Added Base Health per PI !! Base Health at Max PI &lt;br /&gt;
|-&lt;br /&gt;
| {{PageRef|Abrams|type=Hero|size=25px}} || {{#invoke:HeroData|get_hero_var|hero_atlas|MaxHealth}} || {{#invoke:HeroData|get_list_elem|hero_atlas|LevelScaling|Health}} || a billion&lt;br /&gt;
|-&lt;br /&gt;
| Example || Example || Example ||&lt;br /&gt;
|-&lt;br /&gt;
| Example || Example || Example ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[File:Siphon Life.png|class=abilityicon]]&lt;br /&gt;
[[File:Tornado.png|class=abilityicon]]&lt;br /&gt;
&lt;br /&gt;
{{#invoke:ItemsByStat|tablefy|BulletLifestealPercent|+X% Bullet Lifesteal|%}}&lt;br /&gt;
&lt;br /&gt;
Use this for the debug console when testing the ItemsByStat page: =p.tablefy(  mw.getCurrentFrame():newChild{&lt;br /&gt;
title=&amp;quot;Module:ItemsByStat&amp;quot;,      args={&amp;quot;BulletLifestealPercent&amp;quot;, &amp;quot;+X% Bullet Lifesteal&amp;quot;, &amp;quot;%&amp;quot;}  })&lt;/div&gt;</summary>
		<author><name>SerpentofSet</name></author>
	</entry>
	<entry>
		<id>https://deadlock.wiki/User:SerpentofSet/vector-2022.css?diff=11674</id>
		<title>User:SerpentofSet/vector-2022.css</title>
		<link rel="alternate" type="text/html" href="https://deadlock.wiki/User:SerpentofSet/vector-2022.css?diff=11674"/>
		<updated>2024-10-18T01:03:12Z</updated>

		<summary type="html">&lt;p&gt;SerpentofSet: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
.abilityicon {&lt;br /&gt;
	filter: invert(100%);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media (prefers-color-scheme: dark) {&lt;br /&gt;
  .abilityicon {&lt;br /&gt;
    filter: invert(0%);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>SerpentofSet</name></author>
	</entry>
</feed>