2.7 KiB
2.7 KiB
| 1 | formula_id | system | formula_or_rule | rounding_or_boundary | source_tag | native_location | implementation_status |
|---|---|---|---|---|---|---|---|
| 2 | COMBAT-STAT-001 | final_status | independentBonus + flatSum * (100 + percentBonus) / 100; special query modes may exclude layers | float; mode-dependent branches | NATIVE_CONFIRMED | CharacterStatus.GetFinalStatus@0x5409B54 | IMPLEMENT_CORE |
| 3 | COMBAT-DMG-001 | player_base_damage | GetFinalStatus(ATTACK_POWER) | float | NATIVE_CONFIRMED | BaseActor.GetBaseDamageAndConvertWithPlayerDamage@0x5494CD8 | IMPLEMENT |
| 4 | COMBAT-DMG-002 | enemy_base_damage | Random(attackLower*(1-rangePct),attackUpper*(1+rangePct)); rangePct=0.15 | float Range | NATIVE_AND_CONFIG_CONFIRMED | BaseActor.GetBaseDamageAndConvertWithPlayerDamage@0x5494CD8 | IMPLEMENT |
| 5 | COMBAT-HIT-001 | hit | hitPercent > RandomInt(0,101) | roll 0..100; negative hitPercent clamped to 0 | NATIVE_CONFIRMED | BaseMonoCharacter.HitAndGetResult@0x549B2CC | IMPLEMENT |
| 6 | COMBAT-CRIT-001 | critical | finalCriticalRate > RandomInt(0,101) | roll 0..100; strict greater-than | NATIVE_CONFIRMED | BaseMonoPlayer.OnBeforeAttack@0x55A95EC | IMPLEMENT |
| 7 | COMBAT-CRIT-002 | critical_damage | damage * criticalDamagePercent * 0.01 | float; BaseCritical=150 | NATIVE_AND_CONFIG_CONFIRMED | BaseMonoPlayer.OnBeforeAttack@0x55A9704 | IMPLEMENT |
| 8 | COMBAT-DEF-001 | defense | max(0,preDefenseDamage-finalDefense) | float | NATIVE_CONFIRMED | BaseMonoCharacter.HitAndGetResult@0x549BD18 | IMPLEMENT |
| 9 | COMBAT-HP-001 | hp | targetHp-finalDamage | float; display rounding separate | NATIVE_CONFIRMED | BaseMonoCharacter.HitAndGetResult@0x549BE7C | IMPLEMENT |
| 10 | COMBAT-ASPD-001 | attack_speed | 100/finalAttackSpeed | seconds; subtract elapsed; no global 0.15 clamp observed | NATIVE_CONFIRMED | <WaitAttackCooldown>d__45.MoveNext@0x5497280 | IMPLEMENT |
| 11 | COMBAT-LS-001 | life_steal | ceil(finalDamage*finalLifeSteal*0.01) | only if positive; minimum heal 1 | NATIVE_CONFIRMED | BaseMonoPlayer.OnAfterAttack@0x55A9E48 | IMPLEMENT |
| 12 | COMBAT-COUNTER-001 | counter_chance | finalCounterRate >= RandomInt(1,101) | roll 1..100; inclusive | NATIVE_CONFIRMED | BaseMonoPlayer.OnCounterAttack@0x55AC048 | IMPLEMENT |
| 13 | DOUBLE-001 | natural_double | diceA==diceB | built-in 36 pairs equal weight => 1/6 absent override | NATIVE_CONFIG_VIDEO_CONFIRMED | <CheckLastTile>d__130.MoveNext | IMPLEMENT |
| 14 | DOUBLE-002 | double_movement | diceA+diceB | never multiply by 2 solely because Double | NATIVE_VIDEO_CONFIRMED | <CheckLastTile>d__130.MoveNext | IMPLEMENT |
| 15 | DOUBLE-003 | double_stack | TryAddDoubleStack(diceA) | accumulate face value; threshold/reward/reset unresolved | NATIVE_VIDEO_PARTIAL | BoardController.TryAddDoubleStack@0x56A4BE0 | IMPLEMENT_ACCUMULATION_ONLY |
| 16 | DOUBLE-004 | double_combat | no unconditional damage multiplier; dispatch TriggerOnDiceDouble to equipped consumers | event-driven | NATIVE_CONFIG_CONFIRMED | EventManager.TriggerOnDiceDouble@0x51AEDEC | IMPLEMENT |