150 lines
4.6 KiB
Markdown
150 lines
4.6 KiB
Markdown
# Forge Master Game Model
|
|
|
|
This document is the source of truth for game-specific rules, stat assumptions, formulas, and known limitations used by the optimizer.
|
|
|
|
## Equipment model
|
|
|
|
A build contains:
|
|
|
|
- 8 fixed core items
|
|
- 1 mount
|
|
- 3 pets
|
|
- 1 skill base-stat entry
|
|
|
|
Core item names and base stat types are fixed. Their base values are currently hardcoded from the player's known setup:
|
|
|
|
| Slot | Item | Base stat |
|
|
| --- | --- | ---: |
|
|
| Item 1 | Helmet | 1,930,000 health |
|
|
| Item 2 | Armor | 1,890,000 health |
|
|
| Item 3 | Gloves | 237,000 damage |
|
|
| Item 4 | Collar | 237,000 damage |
|
|
| Item 5 | Ring | 244,000 damage |
|
|
| Item 6 | Weapon | 398,000 damage |
|
|
| Item 7 | Boots | 1,850,000 health |
|
|
| Item 8 | Belt | 1,150,000 health |
|
|
|
|
Mounts and pets provide both damage and health base stats. Skill provides damage and health base stats only and has no effects.
|
|
|
|
## Effects
|
|
|
|
Items, mounts, and pets may have zero, one, or two effects depending on rarity. Effects start at `1%` and roll up to their cap.
|
|
|
|
| Effect | Maximum | Optimizer id |
|
|
| --- | ---: | --- |
|
|
| Crit chance | 12% | `critChance` |
|
|
| Crit damage | 80% | `critDamage` |
|
|
| Block chance | 5% | `blockChance` |
|
|
| Health regen | 4% | `healthRegen` |
|
|
| Lifesteal | 20% | `lifesteal` |
|
|
| Double chance | 20% | `doubleChance` |
|
|
| Damage | 15% | `damage` |
|
|
| Melee damage | 50% | `meleeDamage` |
|
|
| Ranged damage | 15% | `rangedDamage` |
|
|
| Attack speed | 40% | `attackSpeed` |
|
|
| Skill damage | 30% | `skillDamage` |
|
|
| Skill cooldown reduction | 7% | `skillCooldown` |
|
|
| Health | 15% | `health` |
|
|
|
|
Effects stack additively within their own effect type, then each type contributes as a multiplier in the formulas below.
|
|
|
|
## DPS formula
|
|
|
|
The current DPS model is:
|
|
|
|
```text
|
|
single hit = base damage
|
|
* (1 + damage%)
|
|
* (1 + selected style damage%)
|
|
|
|
crit hit = single hit * (1 + crit damage%)
|
|
|
|
DPS = single hit
|
|
* ((1 + attack speed%) / 2)
|
|
* (1 + double chance%)
|
|
* (1 + crit chance% * crit damage%)
|
|
* skill cooldown multiplier, only for Skill style
|
|
```
|
|
|
|
Attack speed assumption: base `100%` attack speed means about one hit every two seconds, or `0.5` hits per second. Therefore the attack-rate term is `(1 + attack speed%) / 2`.
|
|
|
|
Crit damage has no effect until crit chance is above `0%` because the crit multiplier is `1 + crit chance% * crit damage%`.
|
|
|
|
The selected combat style controls which specialized damage bonus is used:
|
|
|
|
- Melee uses melee damage.
|
|
- Ranged uses ranged damage.
|
|
- Skill uses skill damage and skill cooldown reduction.
|
|
|
|
Skill cooldown multiplier:
|
|
|
|
```text
|
|
1 / max(0.05, 1 - skill cooldown reduction%)
|
|
```
|
|
|
|
The `0.05` floor prevents division by zero or unrealistic infinite DPS if future inputs exceed known caps.
|
|
|
|
## Regen formula
|
|
|
|
The Regen metric estimates healing from health regen and lifesteal:
|
|
|
|
```text
|
|
max health = base health * (1 + health%)
|
|
health regen healing = max health * health regen%
|
|
lifesteal healing = DPS * lifesteal%
|
|
regen = health regen healing + lifesteal healing
|
|
```
|
|
|
|
The metric is a comparison estimate, not a full combat simulator.
|
|
|
|
## Survivability estimate
|
|
|
|
Some effect-total comparisons still use an estimated survivability value:
|
|
|
|
```text
|
|
survivability = max health
|
|
* (1 / max(0.05, 1 - block chance%))
|
|
* (1 + health regen%)
|
|
* (1 + lifesteal%)
|
|
```
|
|
|
|
This is used only to compare marginal defensive effects in the effect totals panel.
|
|
|
|
## Additive stacking examples
|
|
|
|
If a build already has `+100% melee damage`, adding a max `+50% melee damage` changes the melee multiplier from `2.0x` to `2.5x`.
|
|
|
|
```text
|
|
2.5 / 2.0 - 1 = +25% DPS
|
|
```
|
|
|
|
That is why the optimizer displays marginal value, not raw roll value.
|
|
|
|
## Replacement model
|
|
|
|
Players cannot directly increment or adjust an existing effect. They roll replacement items and decide whether to swap.
|
|
|
|
The app models this with the New item comparison panel:
|
|
|
|
- Select what the new roll would replace.
|
|
- Enter the new roll's base stat and effects.
|
|
- The app shows DPS and Regen change separately.
|
|
- If `Pet` is selected, the app chooses the current worst pet by piece score as the replacement target.
|
|
|
|
## Profiles
|
|
|
|
Profiles change sacrifice scoring and tie-breaking weights:
|
|
|
|
- Lifesteal: prioritizes DPS and lifesteal-based healing.
|
|
- Regen: prioritizes health and health-regeneration based healing.
|
|
|
|
DPS and Regen calculations themselves do not change by profile.
|
|
|
|
## Known limitations
|
|
|
|
- Exact Forge Master combat internals are not fully known.
|
|
- Enemy defense, uptime, overkill, proc timing, animation locks, and fight length are not modeled.
|
|
- Block chance is represented as effective-health style mitigation in survivability estimates only.
|
|
- Health regen timing is assumed to be comparable as a per-second-style value.
|
|
- Lifesteal assumes all displayed DPS can convert into healing.
|