class_name BattleFighter enum Status { NORMAL, DEAD, } var health:int var maxHealth:int var mp:int var maxMp:int var status:Status = Status.NORMAL var attack:int = 10 var defense:int = 5 var speed:int = 5 var magic:int = 5 var luck:int = 1 func _init( maxHealth:int = 100, maxMp:int = 50, ) -> void: self.maxHealth = maxHealth self.health = maxHealth self.maxMp = maxMp self.mp = maxMp func damage(amount:int) -> void: assert(amount > 0) if status == Status.DEAD: return health = max(health - amount, 0) if health == 0: status = Status.DEAD func heal(amount:int) -> void: assert(amount > 0) if status == Status.DEAD: return health = min(health + amount, maxHealth) func revive(health:int) -> void: assert(health > 0) if status != Status.DEAD: return health = min(health, maxHealth) status = Status.NORMAL self.health = health func mpConsume(amount:int) -> void: assert(amount > 0) mp = max(mp - amount, 0) func mpRestore(amount:int) -> void: assert(amount > 0) mp = min(mp + amount, maxMp) func isCrit() -> bool: # 10% chance of a crit var chance = 10 + min(luck * 5, 60) var roll = randi() % 100 return roll < chance