diff --git a/entities/monster/monster.gd b/entities/monster/monster.gd index 9ad958e..0803c2c 100644 --- a/entities/monster/monster.gd +++ b/entities/monster/monster.gd @@ -45,3 +45,13 @@ func _physics_process(delta: float) -> void: velocity = Vector3.ZERO in_battle = true collider.start_battle(self) + +func faint() -> void: + self.queue_free() + +func attack_enemy(enemy: Monster) -> int: + var damage = data.attack_enemy(enemy.data) + return damage + +func take_damage(amount: int) -> void: + data.take_damage(amount) diff --git a/entities/monster_spawnpoint/monster_spawnpoint.gd b/entities/monster_spawnpoint/monster_spawnpoint.gd index b854276..82f235c 100644 --- a/entities/monster_spawnpoint/monster_spawnpoint.gd +++ b/entities/monster_spawnpoint/monster_spawnpoint.gd @@ -9,6 +9,12 @@ extends Node3D ## List that holds all spawnable monsters @export var spawnable_monsters: Array[MonsterSpawnpointProbability] +## Minimum Level the spawnable monsters have +@export var min_level = 1 + +## Maximum level the spawnable monsters can have +@export var max_level = 1 + ## Ignore spawning only if visible @export var ignore_visibility: bool = false @@ -66,10 +72,19 @@ func spawn() -> void: # instantiate a monster .tscn scene var monster_to_spawn = monster_tscn.instantiate() - # get a random monster data + # Create a new MonsterData for the monster to spawn + var monster_data: MonsterData = MonsterData.new() + + # Get a random monster data as a template var random := randi() % spawnable_monsters.size() - var data : MonsterData = spawnable_monsters[random].monster_data - monster_to_spawn.data = data + var template_data : MonsterData = spawnable_monsters[random].monster_data + monster_data.set_values(template_data.unique_id, {}, randi_range(min_level, max_level)) + + ## Heal the wild monster fully + monster_data.heal(9999) + + ## Set the data of the Node3D monster to spawn + monster_to_spawn.data = monster_data # keep track of the current monster active_monsters.append(monster_to_spawn) diff --git a/entities/player/player.gd b/entities/player/player.gd index c19cca7..64a8e99 100644 --- a/entities/player/player.gd +++ b/entities/player/player.gd @@ -1,32 +1,25 @@ extends CharacterBody3D -@onready var animated_mesh = $GobotSkin +@onready var animated_mesh: Node3D = %GobotSkin +@onready var camera: Camera3D = %Camera3D + +## State +@export var battle_state := Global.BattleState.NOT_IN_BATTLE var in_battle: bool = false -var enemy: MonsterData = null +var player_monster: Monster = null +var enemy: Monster = null + +## Movement const SPEED = 5.0 const JUMP_VELOCITY = 4.5 func _ready() -> void: Utils.set_player(self) -func on_save_game(saved_data : Array[SavedData]): - var data = SavedData.new() - data.position = global_position - data.scene_path = scene_file_path - saved_data.append(data) - -func on_before_load_game(): - get_parent().remove_child(self) - queue_free() - -func on_load_game(saved_data: SavedData): - global_position = saved_data.position - - # Update the global reference to the player - Utils.set_player(self) func _physics_process(delta: float) -> void: - if in_battle == true: + # If the player is in a battle, handle it via start_battle and then handle_battle + if battle_state != Global.BattleState.NOT_IN_BATTLE: return animated_mesh.idle() @@ -79,41 +72,121 @@ func _physics_process(delta: float) -> void: if velocity.length() < 0.05: animated_mesh.idle() -# what happens when a battle starts? -# the player is positioned (mostly somewhere else than the current position) -# ui changes -# music changes -func start_battle(p_enemy: Node3D) -> void: - enemy = p_enemy.data - var camera: Camera3D = $CameraRoot/SpringArm3D/Camera3D - # local z axis of the camera - var local_z = camera.global_transform.basis.z - var new_player_position = camera.global_transform.origin + local_z * 3 - var monster_position = camera.global_transform.origin + local_z * 2 - position = Vector3(new_player_position.x, position.y, new_player_position.z) + +func on_save_game(saved_data : Array[SavedData]): + var data = SavedData.new() + data.position = global_position + data.scene_path = scene_file_path + saved_data.append(data) - in_battle = true +func on_before_load_game(): + get_parent().remove_child(self) + queue_free() + +func on_load_game(saved_data: SavedData): + global_position = saved_data.position + + # Update the global reference to the player + Utils.set_player(self) + + +func handle_battle() -> void: + match battle_state: + Global.BattleState.STARTED: + # disable battle_UI + # UI.battle_ui.disable() + UI.battle_ui.set_message("A wild %s appeared!" % enemy.data.name) + await get_tree().create_timer(3.0).timeout + battle_state = Global.BattleState.PLAYER_TURN + handle_battle() + Global.BattleState.PLAYER_TURN: + UI.battle_ui.set_message("What will you do?") + # todo: enable battle_ui again + # UI.battle_ui.enable() + UI.battle_ui.update() + Global.BattleState.ENEMY_TURN: + # If the enemy has no health left, we win + if enemy.data.current_health <= 0: + print("win") + battle_state = Global.BattleState.WIN + handle_battle() + return + + UI.battle_ui.set_message("What will the enemy do?") + await get_tree().create_timer(3.0).timeout + var damage_amount: int = enemy.attack_enemy(player_monster) + UI.battle_ui.set_message("The enemy attacked you for %s damage!" % str(damage_amount)) + await get_tree().create_timer(1.0).timeout + UI.battle_ui.update() + battle_state = Global.BattleState.PLAYER_TURN + handle_battle() + Global.BattleState.CATCH: + print("Catch") + await get_tree().create_timer(3.0).timeout + Global.BattleState.WIN: + UI.battle_ui.set_message("You won!") + await get_tree().create_timer(3.0).timeout + battle_state = Global.BattleState.NOT_IN_BATTLE + UI.ingame_menu.update() + UI.show_battle_ui(false) + UI.show_ingame_controls(true) + Global.BattleState.LOSE: + print("LOSE") + await get_tree().create_timer(3.0).timeout + + +## This method sets up a battle between the player and an enemy monster +func start_battle(p_enemy: Monster) -> void: + # Don't start a battle if we are already in one + # TODO: Maybe add a cooldown of 1.5s after the battle ended + if battle_state != Global.BattleState.NOT_IN_BATTLE: + return + + # Stop the player velocity = Vector3.ZERO animated_mesh.idle() + + # Set the current enemy + enemy = p_enemy + + # Get the loccal z axis of the camera to position the player + var local_z = camera.global_transform.basis.z + + # Get the new player and monster positions + var new_player_position = camera.global_transform.origin + local_z * 3 + var monster_position = camera.global_transform.origin + local_z * 3 + + # Set the players new position + position = Vector3(new_player_position.x, position.y, new_player_position.z) + + # Change the UI UI.show_battle_ui(true) UI.show_ingame_controls(false) - # Spawn player monster + # Create the player's monster + player_monster = Monster.new() + + # Get the data from the party var monster_data : MonsterData = SaveManager.current_save.party[0] - var monster = Monster.new() - monster.data = monster_data - monster.idle = true - print("%s (%s), Lv. %s, %s XP" % [monster.data.name, monster.data.nickname, monster.data.level, monster.data.xp]) - monster.position = Vector3(monster_position.x, position.y + 1, monster_position.z) - add_child(monster) - camera.look_at(monster.position, Vector3.UP, false) - # How to attack and finish the battle? + # And add it to the monster + player_monster.data = monster_data + player_monster.idle = true + player_monster.position = Vector3(monster_position.x, position.y + 1, monster_position.z) + add_child(player_monster) + # Get into the battle and switch between the states + battle_state = Global.BattleState.STARTED + handle_battle() + + +func attack_enemy(): + UI.battle_ui.set_message("You attacked the enemy!") + await get_tree().create_timer(1.0).timeout - - await get_tree().create_timer(5.0).timeout - print("Battle over") - remove_child(monster) - monster.queue_free() - in_battle = false + # this should rather be player_monster.attack_enemy(enemy) for correct values + enemy.take_damage(7) + UI.battle_ui.update() + await get_tree().create_timer(1.0).timeout + battle_state = Global.BattleState.ENEMY_TURN + handle_battle() diff --git a/entities/player/player.tscn b/entities/player/player.tscn index 94dfe34..e7c933e 100644 --- a/entities/player/player.tscn +++ b/entities/player/player.tscn @@ -14,6 +14,7 @@ axis_lock_angular_z = true script = ExtResource("1_mv2yl") [node name="GobotSkin" parent="." instance=ExtResource("2_a4t6w")] +unique_name_in_owner = true transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 0, 0) [node name="CollisionShape3D" type="CollisionShape3D" parent="."] @@ -26,4 +27,5 @@ shape = SubResource("CapsuleShape3D_xuba7") transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.64528, 2.83335) [node name="Camera3D" type="Camera3D" parent="CameraRoot/SpringArm3D"] +unique_name_in_owner = true transform = Transform3D(1, 0, 0, 0, 0.965926, 0.258819, 0, -0.258819, 0.965926, 0, 0.0210915, 0.372644) diff --git a/globals/Global.gd b/globals/Global.gd new file mode 100644 index 0000000..0ed8feb --- /dev/null +++ b/globals/Global.gd @@ -0,0 +1,11 @@ +extends Node + +enum BattleState { + NOT_IN_BATTLE = -1, + STARTED = 0, + PLAYER_TURN = 1, + ENEMY_TURN = 2, + CATCH = 3, + WIN = 4, + LOSE = 5 +} diff --git a/globals/Utils.gd b/globals/Utils.gd index cbe3966..4026ad8 100644 --- a/globals/Utils.gd +++ b/globals/Utils.gd @@ -2,11 +2,11 @@ extends Node var player: Node3D = null - -# Called when the node enters the scene tree for the first time. -func _ready() -> void: - pass # Replace with function body. - +func set_player(p_player: Node3D) -> void: + player = p_player + +func get_player() -> Node3D: + return player func load_base_monster_data(p_unique_id) -> MonsterData: var path = "res://resources/monsters/" + p_unique_id + ".tres" @@ -16,9 +16,3 @@ func load_base_monster_data(p_unique_id) -> MonsterData: else: printerr("Monster.gd: No monster with the ID %s found" % p_unique_id) return null - -func set_player(p_player) -> void: - player = p_player - -func get_player() -> Node3D: - return player diff --git a/project.godot b/project.godot index 6250d24..2156443 100644 --- a/project.godot +++ b/project.godot @@ -18,6 +18,7 @@ config/icon="res://assets/logo/logo.png" [autoload] +Global="*res://globals/Global.gd" Utils="*res://globals/Utils.gd" SaveManager="*res://resources/save_game/save_manager.gd" SceneManager="*res://globals/scene_manager.gd" diff --git a/resources/monster_data.gd b/resources/monster_data.gd index ec44e7b..a790df7 100644 --- a/resources/monster_data.gd +++ b/resources/monster_data.gd @@ -96,6 +96,7 @@ func attack_enemy(enemy_data: MonsterData) -> int: var base_damage: int = 2 damage = floor(floor((level * 2/5 + 2)) * base_damage * (float(attack) / (2 * enemy_data.defense)) + 2) + enemy_data.take_damage(damage) return damage diff --git a/ui/battle_ui/battle_ui.gd b/ui/battle_ui/battle_ui.gd index 28e8279..83b7bfd 100644 --- a/ui/battle_ui/battle_ui.gd +++ b/ui/battle_ui/battle_ui.gd @@ -18,14 +18,15 @@ func update() -> void: %PartyFighterHealthbar.max_value = player_fighter.health %PartyFighterHealthbar.value = player_fighter.current_health - %EnemyMonsterLevel.text = "Lv. %s" % player.enemy.level - %EnemyMonsterName.text = player.enemy.name - %EnemyMonsterHealthbar.max_value = player.enemy.health - %EnemyMonsterHealthbar.value = player.enemy.current_health + %EnemyMonsterLevel.text = "Lv. %s" % player.enemy.data.level + %EnemyMonsterName.text = player.enemy.data.name + %EnemyMonsterHealthbar.max_value = player.enemy.data.health + %EnemyMonsterHealthbar.value = player.enemy.data.current_health func _on_battle_button_pressed() -> void: - print("attack here") - # attack here - #%MainBattleMenu.visible = false - #%BattleMovesMenu.visible = true - pass # Replace with function body. + print("attacking enemy") + Utils.get_player().attack_enemy() + + +func set_message(msg: String) -> void: + %Message.text = msg diff --git a/ui/battle_ui/battle_ui.tscn b/ui/battle_ui/battle_ui.tscn index f1223d9..988911b 100644 --- a/ui/battle_ui/battle_ui.tscn +++ b/ui/battle_ui/battle_ui.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=19 format=3 uid="uid://dyroahq85mhws"] +[gd_scene load_steps=21 format=3 uid="uid://dyroahq85mhws"] [ext_resource type="Script" path="res://ui/battle_ui/battle_ui.gd" id="1_jyqir"] [ext_resource type="Texture2D" uid="uid://ve2k0qrfpwxw" path="res://assets/textures/Generic/Vector/generic_button_circle_fill.svg" id="2_keyyt"] @@ -56,6 +56,20 @@ expand_margin_top = 1.0 expand_margin_right = 1.0 expand_margin_bottom = 1.0 +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_jwbwi"] +bg_color = Color(0, 0, 0, 1) +border_width_left = 3 +border_width_top = 3 +border_width_right = 3 +border_width_bottom = 3 +border_color = Color(1, 1, 1, 1) +corner_radius_top_left = 6 +corner_radius_top_right = 6 +corner_radius_bottom_right = 6 +corner_radius_bottom_left = 6 + +[sub_resource type="LabelSettings" id="LabelSettings_5e62u"] + [sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_eqgks"] [sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_4ki2k"] @@ -193,25 +207,53 @@ theme_override_constants/margin_left = 30 theme_override_constants/margin_right = 30 theme_override_constants/margin_bottom = 50 -[node name="HBoxContainer" type="HBoxContainer" parent="BottomMarginContainer"] +[node name="VBoxContainer" type="VBoxContainer" parent="BottomMarginContainer"] +layout_mode = 2 +theme_override_constants/separation = 20 +alignment = 2 + +[node name="MessageContainer" type="MarginContainer" parent="BottomMarginContainer/VBoxContainer"] +layout_mode = 2 +size_flags_vertical = 3 + +[node name="PanelContainer" type="PanelContainer" parent="BottomMarginContainer/VBoxContainer/MessageContainer"] +custom_minimum_size = Vector2(0, 100) +layout_mode = 2 +theme_override_styles/panel = SubResource("StyleBoxFlat_jwbwi") + +[node name="MarginContainer" type="MarginContainer" parent="BottomMarginContainer/VBoxContainer/MessageContainer/PanelContainer"] +layout_mode = 2 +theme_override_constants/margin_left = 8 +theme_override_constants/margin_top = 8 +theme_override_constants/margin_right = 8 +theme_override_constants/margin_bottom = 8 + +[node name="Message" type="Label" parent="BottomMarginContainer/VBoxContainer/MessageContainer/PanelContainer/MarginContainer"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_vertical = 1 +text = "A wild monster appeared!" +label_settings = SubResource("LabelSettings_5e62u") + +[node name="HBoxContainer" type="HBoxContainer" parent="BottomMarginContainer/VBoxContainer"] layout_mode = 2 -[node name="PartyFighterContainer" type="HBoxContainer" parent="BottomMarginContainer/HBoxContainer"] +[node name="PartyFighterContainer" type="HBoxContainer" parent="BottomMarginContainer/VBoxContainer/HBoxContainer"] layout_mode = 2 size_flags_vertical = 8 theme_override_constants/separation = 16 -[node name="PartyAliveStatus" type="VBoxContainer" parent="BottomMarginContainer/HBoxContainer/PartyFighterContainer"] +[node name="PartyAliveStatus" type="VBoxContainer" parent="BottomMarginContainer/VBoxContainer/HBoxContainer/PartyFighterContainer"] layout_mode = 2 -[node name="PartyAliveStatus1" type="TextureRect" parent="BottomMarginContainer/HBoxContainer/PartyFighterContainer/PartyAliveStatus"] +[node name="PartyAliveStatus1" type="TextureRect" parent="BottomMarginContainer/VBoxContainer/HBoxContainer/PartyFighterContainer/PartyAliveStatus"] custom_minimum_size = Vector2(32, 32) layout_mode = 2 size_flags_horizontal = 0 texture = ExtResource("2_keyyt") expand_mode = 2 -[node name="PartyAliveStatus2" type="TextureRect" parent="BottomMarginContainer/HBoxContainer/PartyFighterContainer/PartyAliveStatus"] +[node name="PartyAliveStatus2" type="TextureRect" parent="BottomMarginContainer/VBoxContainer/HBoxContainer/PartyFighterContainer/PartyAliveStatus"] self_modulate = Color(1, 1, 1, 0.392157) custom_minimum_size = Vector2(32, 32) layout_mode = 2 @@ -219,7 +261,7 @@ size_flags_horizontal = 0 texture = ExtResource("2_keyyt") expand_mode = 2 -[node name="PartyAliveStatus3" type="TextureRect" parent="BottomMarginContainer/HBoxContainer/PartyFighterContainer/PartyAliveStatus"] +[node name="PartyAliveStatus3" type="TextureRect" parent="BottomMarginContainer/VBoxContainer/HBoxContainer/PartyFighterContainer/PartyAliveStatus"] self_modulate = Color(1, 1, 1, 0.392157) custom_minimum_size = Vector2(32, 32) layout_mode = 2 @@ -227,7 +269,7 @@ size_flags_horizontal = 0 texture = ExtResource("2_keyyt") expand_mode = 2 -[node name="PartyAliveStatus4" type="TextureRect" parent="BottomMarginContainer/HBoxContainer/PartyFighterContainer/PartyAliveStatus"] +[node name="PartyAliveStatus4" type="TextureRect" parent="BottomMarginContainer/VBoxContainer/HBoxContainer/PartyFighterContainer/PartyAliveStatus"] self_modulate = Color(1, 1, 1, 0.392157) custom_minimum_size = Vector2(32, 32) layout_mode = 2 @@ -235,7 +277,7 @@ size_flags_horizontal = 0 texture = ExtResource("2_keyyt") expand_mode = 2 -[node name="PartyAliveStatus5" type="TextureRect" parent="BottomMarginContainer/HBoxContainer/PartyFighterContainer/PartyAliveStatus"] +[node name="PartyAliveStatus5" type="TextureRect" parent="BottomMarginContainer/VBoxContainer/HBoxContainer/PartyFighterContainer/PartyAliveStatus"] self_modulate = Color(1, 1, 1, 0.392157) custom_minimum_size = Vector2(32, 32) layout_mode = 2 @@ -243,7 +285,7 @@ size_flags_horizontal = 0 texture = ExtResource("2_keyyt") expand_mode = 2 -[node name="PartyAliveStatus6" type="TextureRect" parent="BottomMarginContainer/HBoxContainer/PartyFighterContainer/PartyAliveStatus"] +[node name="PartyAliveStatus6" type="TextureRect" parent="BottomMarginContainer/VBoxContainer/HBoxContainer/PartyFighterContainer/PartyAliveStatus"] self_modulate = Color(1, 1, 1, 0.392157) custom_minimum_size = Vector2(32, 32) layout_mode = 2 @@ -251,25 +293,25 @@ size_flags_horizontal = 0 texture = ExtResource("2_keyyt") expand_mode = 2 -[node name="PartyFighterInfo" type="VBoxContainer" parent="BottomMarginContainer/HBoxContainer/PartyFighterContainer"] +[node name="PartyFighterInfo" type="VBoxContainer" parent="BottomMarginContainer/VBoxContainer/HBoxContainer/PartyFighterContainer"] layout_mode = 2 size_flags_vertical = 0 theme_override_constants/separation = 10 -[node name="LevelAndGender" type="HBoxContainer" parent="BottomMarginContainer/HBoxContainer/PartyFighterContainer/PartyFighterInfo"] +[node name="LevelAndGender" type="HBoxContainer" parent="BottomMarginContainer/VBoxContainer/HBoxContainer/PartyFighterContainer/PartyFighterInfo"] layout_mode = 2 -[node name="Level" type="PanelContainer" parent="BottomMarginContainer/HBoxContainer/PartyFighterContainer/PartyFighterInfo/LevelAndGender"] +[node name="Level" type="PanelContainer" parent="BottomMarginContainer/VBoxContainer/HBoxContainer/PartyFighterContainer/PartyFighterInfo/LevelAndGender"] layout_mode = 2 theme_override_styles/panel = SubResource("StyleBoxFlat_6o8cs") -[node name="PartyFighterLevel" type="Label" parent="BottomMarginContainer/HBoxContainer/PartyFighterContainer/PartyFighterInfo/LevelAndGender/Level"] +[node name="PartyFighterLevel" type="Label" parent="BottomMarginContainer/VBoxContainer/HBoxContainer/PartyFighterContainer/PartyFighterInfo/LevelAndGender/Level"] unique_name_in_owner = true layout_mode = 2 text = "Lv. 99" label_settings = SubResource("LabelSettings_38ujs") -[node name="PartyFighterGender" type="TextureRect" parent="BottomMarginContainer/HBoxContainer/PartyFighterContainer/PartyFighterInfo/LevelAndGender"] +[node name="PartyFighterGender" type="TextureRect" parent="BottomMarginContainer/VBoxContainer/HBoxContainer/PartyFighterContainer/PartyFighterInfo/LevelAndGender"] unique_name_in_owner = true self_modulate = Color(0.450091, 0.470517, 0.93375, 1) custom_minimum_size = Vector2(12, 12) @@ -278,13 +320,13 @@ texture = ExtResource("3_fa6tk") expand_mode = 2 stretch_mode = 4 -[node name="PartyFighterName" type="Label" parent="BottomMarginContainer/HBoxContainer/PartyFighterContainer/PartyFighterInfo"] +[node name="PartyFighterName" type="Label" parent="BottomMarginContainer/VBoxContainer/HBoxContainer/PartyFighterContainer/PartyFighterInfo"] unique_name_in_owner = true layout_mode = 2 text = "Monstername" label_settings = SubResource("LabelSettings_kcdfy") -[node name="PartyFighterHealthbar" type="ProgressBar" parent="BottomMarginContainer/HBoxContainer/PartyFighterContainer/PartyFighterInfo"] +[node name="PartyFighterHealthbar" type="ProgressBar" parent="BottomMarginContainer/VBoxContainer/HBoxContainer/PartyFighterContainer/PartyFighterInfo"] unique_name_in_owner = true layout_mode = 2 theme_override_styles/background = SubResource("StyleBoxFlat_auqmk") @@ -292,17 +334,17 @@ theme_override_styles/fill = SubResource("StyleBoxFlat_84eln") value = 50.0 show_percentage = false -[node name="Spacer" type="Control" parent="BottomMarginContainer/HBoxContainer"] +[node name="Spacer" type="Control" parent="BottomMarginContainer/VBoxContainer/HBoxContainer"] layout_mode = 2 size_flags_horizontal = 3 size_flags_stretch_ratio = 0.5 -[node name="MainBattleMenu" type="VBoxContainer" parent="BottomMarginContainer/HBoxContainer"] +[node name="MainBattleMenu" type="VBoxContainer" parent="BottomMarginContainer/VBoxContainer/HBoxContainer"] unique_name_in_owner = true layout_mode = 2 size_flags_horizontal = 3 -[node name="BattleButton" type="Button" parent="BottomMarginContainer/HBoxContainer/MainBattleMenu"] +[node name="BattleButton" type="Button" parent="BottomMarginContainer/VBoxContainer/HBoxContainer/MainBattleMenu"] layout_mode = 2 theme_override_constants/h_separation = 18 theme_override_constants/icon_max_width = 20 @@ -318,11 +360,11 @@ theme_override_styles/pressed_mirrored = ExtResource("5_w48y1") theme_override_styles/pressed = ExtResource("5_w48y1") theme_override_styles/normal_mirrored = ExtResource("4_r2q1k") theme_override_styles/normal = ExtResource("4_r2q1k") -text = "Battle" +text = "Attack" icon = ExtResource("4_saqy8") alignment = 0 -[node name="PartyButton" type="Button" parent="BottomMarginContainer/HBoxContainer/MainBattleMenu"] +[node name="PartyButton" type="Button" parent="BottomMarginContainer/VBoxContainer/HBoxContainer/MainBattleMenu"] layout_mode = 2 theme_override_constants/h_separation = 18 theme_override_constants/icon_max_width = 20 @@ -342,7 +384,7 @@ text = "Party" icon = ExtResource("5_pnobx") alignment = 0 -[node name="ItemsButton" type="Button" parent="BottomMarginContainer/HBoxContainer/MainBattleMenu"] +[node name="ItemsButton" type="Button" parent="BottomMarginContainer/VBoxContainer/HBoxContainer/MainBattleMenu"] layout_mode = 2 theme_override_constants/h_separation = 18 theme_override_constants/icon_max_width = 20 @@ -362,7 +404,7 @@ text = "Items" icon = ExtResource("6_ikm1n") alignment = 0 -[node name="RunButton" type="Button" parent="BottomMarginContainer/HBoxContainer/MainBattleMenu"] +[node name="RunButton" type="Button" parent="BottomMarginContainer/VBoxContainer/HBoxContainer/MainBattleMenu"] layout_mode = 2 theme_override_constants/h_separation = 18 theme_override_constants/icon_max_width = 20 @@ -382,10 +424,10 @@ text = "Run" icon = ExtResource("7_tihhr") alignment = 0 -[node name="BattleMovesMenu" type="VBoxContainer" parent="BottomMarginContainer/HBoxContainer"] +[node name="BattleMovesMenu" type="VBoxContainer" parent="BottomMarginContainer/VBoxContainer/HBoxContainer"] unique_name_in_owner = true visible = false layout_mode = 2 size_flags_horizontal = 3 -[connection signal="pressed" from="BottomMarginContainer/HBoxContainer/MainBattleMenu/BattleButton" to="." method="_on_battle_button_pressed"] +[connection signal="pressed" from="BottomMarginContainer/VBoxContainer/HBoxContainer/MainBattleMenu/BattleButton" to="." method="_on_battle_button_pressed"] diff --git a/ui/ingame_menu/ingame_menu.gd b/ui/ingame_menu/ingame_menu.gd index 151bb2a..7e5d85d 100644 --- a/ui/ingame_menu/ingame_menu.gd +++ b/ui/ingame_menu/ingame_menu.gd @@ -11,6 +11,9 @@ func _on_close_button_pressed() -> void: visible = false pass # Replace with function body. +func update() -> void: + _update_monster_list() + func _update_monster_list() -> void: for i in SaveManager.current_save.party.size(): var monster = SaveManager.current_save.party[i] diff --git a/worlds/world1/world1.tscn b/worlds/world1/world1.tscn index fb3b241..28a8b6e 100644 --- a/worlds/world1/world1.tscn +++ b/worlds/world1/world1.tscn @@ -153,6 +153,8 @@ skeleton = NodePath("../..") [node name="MonsterSpawnpointDebug" parent="MonsterSpawnpoints" instance=ExtResource("1_3qqsk")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2, 0, -9) spawnable_monsters = Array[ExtResource("2_pmb72")]([SubResource("Resource_13u2y")]) +min_level = 3 +max_level = 7 ignore_visibility = true [node name="Mushrooms" type="Node3D" parent="."]