18 lines
959 B
GDScript
18 lines
959 B
GDScript
extends RefCounted
|
|
|
|
static func weapon_hit(base_damage: float, damage_multiplier: float, critical_chance: float, critical_multiplier: float, roll: float = -1.0) -> Dictionary:
|
|
var random_value := randf() if roll < 0.0 else roll
|
|
var chance := clampf(critical_chance, 0.0, 1.0)
|
|
var critical := base_damage > 0.0 and (chance >= 1.0 or random_value < chance)
|
|
var damage := maxf(0.0, base_damage) * maxf(0.0, damage_multiplier)
|
|
if critical:
|
|
damage *= maxf(1.0, critical_multiplier)
|
|
return {"damage": damage, "critical": critical}
|
|
|
|
static func incoming_hit(amount: float, evasion_chance: float, reduction: float, roll: float = -1.0) -> Dictionary:
|
|
var random_value := randf() if roll < 0.0 else roll
|
|
var chance := clampf(evasion_chance, 0.0, 1.0)
|
|
var evaded := amount > 0.0 and (chance >= 1.0 or random_value < chance)
|
|
var damage := 0.0 if evaded else maxf(0.0, amount) * (1.0 - clampf(reduction, 0.0, 1.0))
|
|
return {"damage": damage, "evaded": evaded}
|