User:Sheepy

From Heroes of Hammerwatch Wiki
Revision as of 12:49, 29 January 2025 by Sheepy (talk | contribs) (→Treasure Hunt)
Jump to navigation Jump to search

Sheepy's info compendium

EXP

Exp loss

If you're >10 levels below the area: xpMul=1.0+(5−lvlDiff)x0.15

Level Diff Exp Multi
-11 85%
-12 70%
-13 55%
-14 40%
-15 25%
-16 10%

If you're >5 levels above the area: xpMul=1.0+(lvlDiff+10)x0.15

Level Diff Exp Multi
+6 85%
+7 70%
+8 55%
+9 40%
+10 25%
+11 10%

Source: PlayerRecord.as - int GiveExperience(int amount, bool skipGainMod = false)

Multiplayer exp

Exp is divided equally between players before going through the exp penalty formula.

Source: GiveExperience.as - bool Apply(Actor@ owner, UnitPtr target, vec2 pos, vec2 dir, float intensity, bool husk)

Architect Modifiers

Treasure Hunt

The treasury appears to have a 8% chance of spawning on each floor, with Treasure Hunt adding a separate 8% roll.

Without Treasure Hunt: ( 1 - ( 0.92 ^ 6 ) ) x 100 = 39.36% chance of seeing the treasury on a full run

With Treasure Hunt: ( 1 - ( 0.92 ^ 12 ) ) x 100 = 63.23% chance of seeing the treasury on a full run

Addendum: it is not guaranteed that the map generation succeeds in placing the treasury. More investigation required here.

Source: themes_dungeon.sval, themes_barracks.sval, themes_courts.sval - search for "treasury"

Scaling

Enemy HP

Simplified: hp = ( base_hp + ngp_level x 25 ) x ( 1 + mp_scaling + ngp_level x 2.75 )

Note that mp_scaling will vary depending on the enemy, value of 1 for Avatar in solo.

The following table is for Avatar's 100k base hp

Solo
NGP HP
1 375,093.75
2 650,325.00
3 925,693.75
4 1,201,200.00
5 1,476,843.75
6 1,752,625.00
7 2,028,543.75
8 2,304,600.00
9 2,580,793.75
10 2,857,125.00

Source: CompositeActorBehavior.as - GetMaxHp()

Multiplayer

Enemy HP is increased in multiplayer with the following code: g_mpEnemyHealthScale = (num - 1) * pow(num, -0.35) + max(0.0f, (num - 2) * 0.3f);

Which is then used as part of the hp calculation: float ret = m_props.m_maxHp + (m_props.m_ngpScale * g_ngp * 25); ret *= (1.0f + g_mpEnemyHealthScale * m_props.m_mpScaleFact) * Tweak::EnemyHealthMul;

m_props.mpScaleFact varies per enemy


Source:

AGameplayGameMode.as - RefreshMultiplayerScaling()

CompositeActorBehavior.as - GetMaxHp()


Damage taken

An increased damage taken modifier is applied to all players, including from trap, scaling with number of players.

Code: g_mpPlrDmgTakenScale = clamp(pow(num, 0.2), 1.0f, 2.0f);

Simplified: player_count ^ 0.2 with a maximum of x2 at 32 players.

Players Damage taken
1 1
2 1.148
3 1.245
4 1.310
5 1.379
6 1.430
7 1.475
... ...
32 2

Source: AGameplayGameMode.as - RefreshMultiplayerScaling()