User:Sheepy: Difference between revisions

From Heroes of Hammerwatch Wiki
Jump to navigation Jump to search
Sheepy (talk | contribs)
Created page with "= Sheepy's info compendium = == EXP == === Exp loss === If you're >10 levels below the area: xpMul=1.0+(5−lvlDiff)x0.15 {| class="wikitable" |- ! 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 {| class="wikitable" |- ! Level Diff !! Exp Multi |- | +6 || 85% |- | +7 || 70% |- | +8 || 55% |- | +9 || 40% |- | +10 || 25% |- | +11..."
 
Sheepy (talk | contribs)
Added investigation results for enemy scaling
Line 51: Line 51:


'''Source''': GiveExperience.as - bool Apply(Actor@ owner, UnitPtr target, vec2 pos, vec2 dir, float intensity, bool husk)
'''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
'''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
{| class="wikitable"
|+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.
{| class="wikitable"
|+
!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()

Revision as of 12:00, 29 January 2025

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

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()