I'm not really a programmer, I did basic C++ back in the day and such but nothing as complex as the game I am working on now.
It's a coin pusher pokemon style game. I am working on the battle scene and it is getting out of hand so I am looking for tips on how I can clean it up and not make it quite so complicated if need be. I posted all my code below.
I'm also stuck on how to get the button presses from the buttons added through code so that the moves can be executed. That is what I was working on when I decided to post here cause I kept getting lost in my code.
extends Node2D
var coins_lost = 0
var player_action_points = 0
var enemy_action_points = 0
var player_hp_current = 0
var enemy_hp_current = 0
onready var move1btn = $Player/GridContainer/Moves
onready var move2btn = $Player/GridContainer/Items
onready var token = preload("res://Battle/Token.tscn")
# SOUNDS -----------
var CoinIn = preload("res://Audio/SFX/Coin_Bucket.wav")
var CoinMiss = preload("res://Audio/SFX/Coin_Miss.wav")
var coin_need = []
onready var atk_pan = $PlayerMoves
onready var itm_pan = $PlayerMoves
func _ready():
setup()
update_stuff()
place_coins()
func setup():
randomize()
# Enemy Setup
Global.encounters.shuffle()
var enemy_level = randi()%Global.encounter_level_max+Global.encounter_level_min
var enemy = Global.encounters[0]
Global.player_team.append(Global.encounters[1])
# Connect to Token Database and get information
var enemy_tokenmon = TokenmonDatabase.get_tokenmon(enemy)
$Enemy/HPBar.max_value = enemy_tokenmon.base_hp
$Enemy/Sprite.texture = enemy_tokenmon.texture
enemy_hp_current = enemy_tokenmon.base_hp
#Enemy Stats
var enemy_attack = floor(floor((2*enemy_tokenmon.base_attack)*enemy_level/100+5))
var enemy_defense = floor(floor((2*enemy_tokenmon.base_defense)*enemy_level/100+5))
var enemy_spatk = floor(floor((2*enemy_tokenmon.base_spatk)*enemy_level/100+5))
var enemy_spdef = floor(floor((2*enemy_tokenmon.base_spdef)*enemy_level/100+5))
# Player Setup
var player = TokenmonDatabase.get_tokenmon(Global.player_team[0])
$Player/HPBar.max_value = player.base_hp
$Player/Sprite.texture = player.texture
player_hp_current = player.base_hp
#Player stats
var player_attack = floor(floor((2*player.base_attack)*enemy_level/100+5))
var player_defense = floor(floor((2*player.base_defense)*enemy_level/100+5))
var player_spatk = floor(floor((2*player.base_spatk)*enemy_level/100+5))
var player_spdef = floor(floor((2*player.base_spdef)*enemy_level/100+5))
#Player moves
for i in player.moves:
var mov = MoveDatabase.get_move(i)
var button = Button.new()
button.text = mov.move_name
$PlayerMoves/VBoxContainer.add_child(button)
coin_need.append(mov.action_point_cost)
func place_coins():
#PLAYER COINS
var starting_position = Vector2(32, 160)
var i = 0 # X
var j = 0 # Y
while i < 12:
while j < 8:
var new_token = token.instance()
add_child(new_token)
new_token.add_to_group("Token")
new_token.position = starting_position
starting_position = starting_position + Vector2(0, 24)
j += 1
starting_position = starting_position + Vector2(24, -192)
j = 0
i += 1
#ENEMY COINS
var enemy_starting_position = Vector2(344, 160)
i = 0 # X
j = 0 # Y
while i < 12:
while j < 8:
var new_token = token.instance()
add_child(new_token)
new_token.add_to_group("Token")
new_token.position = enemy_starting_position
enemy_starting_position = enemy_starting_position + Vector2(0, 24)
j += 1
enemy_starting_position = enemy_starting_position + Vector2(24, -192)
j = 0
i += 1
func _on_DropZone_input_event(viewport, event, shape_idx):
# If mouse clicked then drop token onto board
if (event is InputEventMouseButton && event.pressed):
var new_token = token.instance()
new_token.position = event.position
add_child(new_token)
update_stuff()
func _on_PlayerBucket_body_entered(body):
if body.is_in_group("Token"):
player_action_points += 1
update_stuff()
body.queue_free()
#TODO: animate the coin out
#SFX coin in
$AudioStreamPlayer2D.stream = CoinIn
$AudioStreamPlayer2D.play()
func _on_EnemyBucket_body_entered(body):
if body.is_in_group("Token"):
enemy_action_points += 1
body.queue_free()
#TODO: animate the coin out
func _on_Missed_body_entered(body):
if body.is_in_group("Token"):
body.queue_free()
coins_lost += 1
#TODO: animate the coin out
#SFX coin miss
if !$AudioStreamPlayer2D.is_playing():
$AudioStreamPlayer2D.stream = CoinMiss
$AudioStreamPlayer2D.play()
func update_stuff():
# Update Action Points
$Player/APLabel.text = "AP " + str(player_action_points)
$Enemy/Enemy_APLabel.text = "AP " + str(enemy_action_points)
# Update Buttons
for i in $PlayerMoves/VBoxContainer.get_child_count():
var btn = $PlayerMoves/VBoxContainer.get_child(i)
if player_action_points >= coin_need[i]:
btn.disabled = false
else:
btn.disabled = true
# Update Healthbars
$Player/HPBar.value = player_hp_current
$Enemy/HPBar.value = enemy_hp_current
func _on_Move1_pressed():
#Display move list
atk_pan.visible = !atk_pan.visible
update_stuff()
if enemy_hp_current <= 0:
Global.emit_signal("battle_finish")
func do_damage(lvl, move_damage, attack, defense):
var level = lvl
var MD = move_damage
var ATK = attack
var DEF = defense
var dmg = (7+level/200*MD*ATK/DEF)
return dmg