Absolutely man! Don't get me wrong what you're doing works and it's a prototype. It's good to delegate tasks to different objects from the get go though. I'm spitballing but I would do something like this:
signal damage_target(amount, target)
# how you handle this part is really up to how your game is structured
func start_battle(enemies):
for enemy in enemies:
enemy.connect("damage_target", self, "determine_damage")
func use_move_on_target(move, target):
var critical_multiplier = determine_critical()
var damage = determine_move_damage(move)
damage = int(damage * critical multiplier)
print_move(move, critical > 1)
emit_signal("damage_target", damage, target)
func determine_critical()
randomize()
critical = 1
var critical_chance = randi() % 100 + 1
#var critical_chance = 5
if critical_chance <= 6.25:
critical = 2
return critical
func determine_move_damage(move)
var type : float = Get_effectiveness(move.type,type_1) * Get_effectiveness(move.type,type_2)
var modifier : float = rand_range(0.85,1.0) * type
var a : float = (2.0 * self.level / 5.0 + 2.0)
var b : float = (a * self.attack * move.power) / 50.0
var c : float = (b + 2.0) * modifier
var damage = c
return damage
func print_move(move, is_critical):
var to_print = self.name + " uses " + move.name
if is_critical:
to_print += ", it was a critical hit!"
else:
to_print += "."
print(to_print)
# called when the damage_target signal is emitted
func determine_damage(amount, target):
if target == self:
apply_damage(amount)
func apply_damage(amount)
var reduced_by_defence = int(amount / self.defence)
self.current_health -= reduced_by_defence
var damage_message = str(self.name) + " took " + str(reduced_by_defence) + " damage."
if self.current_health <= 0:
print(damage_message + " " + str(self.name), " has died.")
else:
print(damage_message)