From 561ab5a98393f23bd2a5fce65cd922d73a76642a Mon Sep 17 00:00:00 2001 From: Dominic Masters Date: Sun, 11 Jan 2026 19:32:12 -0600 Subject: [PATCH] idk --- battle/Battle.gd | 56 +++++++- battle/BattleScene.gd | 144 +------------------- battle/BattleScene.tscn | 25 ++-- battle/cutscene/BattleAction.gd.uid | 1 + battle/cutscene/BattleCutsceneAction.gd | 14 ++ battle/cutscene/BattleCutsceneAction.gd.uid | 1 + battle/fighter/BattleFighter.gd | 64 +++++++-- battle/fighter/BattleFighterScene.gd | 29 ++-- battle/fighter/BattleFighterScene.tscn | 9 +- battle/fighter/idk/DAGRONS5.png | Bin 0 -> 50387 bytes battle/fighter/idk/DAGRONS5.png.import | 35 +++++ battle/fighter/idk/green_dragon.tres | 7 + battle/fighter/idk/green_dragon_frames.tres | 19 +++ cutscene/battle/CutsceneBattleAction.gd | 7 - cutscene/battle/CutsceneBattleAction.gd.uid | 1 - party/Party.gd | 7 +- party/PartyMember.gd | 10 +- scene/RootScene.gd | 9 +- ui/mainmenu/MainMenu.gd | 10 +- 19 files changed, 245 insertions(+), 203 deletions(-) create mode 100644 battle/cutscene/BattleAction.gd.uid create mode 100644 battle/cutscene/BattleCutsceneAction.gd create mode 100644 battle/cutscene/BattleCutsceneAction.gd.uid create mode 100644 battle/fighter/idk/DAGRONS5.png create mode 100644 battle/fighter/idk/DAGRONS5.png.import create mode 100644 battle/fighter/idk/green_dragon.tres create mode 100644 battle/fighter/idk/green_dragon_frames.tres delete mode 100644 cutscene/battle/CutsceneBattleAction.gd delete mode 100644 cutscene/battle/CutsceneBattleAction.gd.uid diff --git a/battle/Battle.gd b/battle/Battle.gd index 403091b..3d915d3 100644 --- a/battle/Battle.gd +++ b/battle/Battle.gd @@ -1,7 +1,59 @@ class_name BattleSingleton extends Node +const BattleCutsceneAction = preload("res://battle/cutscene/BattleCutsceneAction.gd") +enum BattlePosition { + LEFT_TOP_BACK, + LEFT_TOP_FRONT, + LEFT_MIDDLE_BACK, + LEFT_MIDDLE_FRONT, + LEFT_BOTTOM_BACK, + LEFT_BOTTOM_FRONT, + + RIGHT_TOP_BACK, + RIGHT_TOP_FRONT, + RIGHT_MIDDLE_BACK, + RIGHT_MIDDLE_FRONT, + RIGHT_BOTTOM_BACK, + RIGHT_BOTTOM_FRONT +} + +# Battle State +var active:bool = false +var fighterMap:Dictionary[BattlePosition, BattleFighter] = {} +var battleCutscene:Cutscene = null + +# Non-guarantees var battleScene:BattleScene = null +# Signals +signal battleStarted +signal battleFightersChanged + func startBattle(params) -> void: - assert(battleScene != null) - battleScene.startBattle(params) + assert(params.has('fighters')) + assert(!active) + + # Get the cutscene (or create a default one). + battleCutscene = params.get('cutscene', Cutscene.new()) + + # Update fighters for each fighter scene. + for pos in BattlePosition.values(): + var fighterOrNull = params['fighters'].get(pos, null) + fighterMap[pos] = fighterOrNull + + # Initial cutscene elements. In future I may need to make this editable + # somehow? + for fighter:BattleFighter in params['fighters'].values(): + battleCutscene.addCallable(BattleCutsceneAction.getPlayerDecisionCallable(fighter)) + + # Emit signals + active = true + battleStarted.emit() + battleFightersChanged.emit() + + # Start running the battle cutscene. + if !battleCutscene.running: + battleCutscene.start() + +func getFighterAtPosition(battlePos:BattlePosition) -> BattleFighter: + return fighterMap.get(battlePos, null) diff --git a/battle/BattleScene.gd b/battle/BattleScene.gd index 9da6b28..f25de22 100644 --- a/battle/BattleScene.gd +++ b/battle/BattleScene.gd @@ -1,145 +1,11 @@ -class_name BattleScene extends BattleFighterScene -const CutsceneBattleAction = preload("res://cutscene/battle/CutsceneBattleAction.gd") - -enum BattlePosition { - LEFT_TOP_BACK, - LEFT_TOP_FRONT, - LEFT_MIDDLE_BACK, - LEFT_MIDDLE_FRONT, - LEFT_BOTTOM_BACK, - LEFT_BOTTOM_FRONT, - - RIGHT_TOP_BACK, - RIGHT_TOP_FRONT, - RIGHT_MIDDLE_BACK, - RIGHT_MIDDLE_FRONT, - RIGHT_BOTTOM_BACK, - RIGHT_BOTTOM_FRONT -} - -var active:bool = false -var fighterMap:Dictionary[BattlePosition, BattleFighterScene] = {} +class_name BattleScene extends Node3D @export var actionBox:ActionBox = null -@export var fighterTopLeftBack:BattleFighterScene = null: - get: - return fighterMap.get(BattlePosition.LEFT_TOP_BACK, null) - set(value): - fighterMap[BattlePosition.LEFT_TOP_BACK] = value - -@export var fighterTopLeftFront:BattleFighterScene: - get: - return fighterMap.get(BattlePosition.LEFT_TOP_FRONT, null) - set(value): - fighterMap[BattlePosition.LEFT_TOP_FRONT] = value - -@export var fighterMiddleLeftBack:BattleFighterScene: - get: - return fighterMap.get(BattlePosition.LEFT_MIDDLE_BACK, null) - set(value): - fighterMap[BattlePosition.LEFT_MIDDLE_BACK] = value - -@export var fighterMiddleLeftFront:BattleFighterScene: - get: - return fighterMap.get(BattlePosition.LEFT_MIDDLE_FRONT, null) - set(value): - fighterMap[BattlePosition.LEFT_MIDDLE_FRONT] = value - -@export var fighterBottomLeftBack:BattleFighterScene: - get: - return fighterMap.get(BattlePosition.LEFT_BOTTOM_BACK, null) - set(value): - fighterMap[BattlePosition.LEFT_BOTTOM_BACK] = value - -@export var fighterBottomLeftFront:BattleFighterScene: - get: - return fighterMap.get(BattlePosition.LEFT_BOTTOM_FRONT, null) - set(value): - fighterMap[BattlePosition.LEFT_BOTTOM_FRONT] = value - -@export var fighterTopRightBack:BattleFighterScene: - get: - return fighterMap.get(BattlePosition.RIGHT_TOP_BACK, null) - set(value): - fighterMap[BattlePosition.RIGHT_TOP_BACK] = value - -@export var fighterTopRightFront:BattleFighterScene: - get: - return fighterMap.get(BattlePosition.RIGHT_TOP_FRONT, null) - set(value): - fighterMap[BattlePosition.RIGHT_TOP_FRONT] = value - -@export var fighterMiddleRightBack:BattleFighterScene: - get: - return fighterMap.get(BattlePosition.RIGHT_MIDDLE_BACK, null) - set(value): - fighterMap[BattlePosition.RIGHT_MIDDLE_BACK] = value - -@export var fighterMiddleRightFront:BattleFighterScene: - get: - return fighterMap.get(BattlePosition.RIGHT_MIDDLE_FRONT, null) - set(value): - fighterMap[BattlePosition.RIGHT_MIDDLE_FRONT] = value - -@export var fighterBottomRightBack:BattleFighterScene: - get: - return fighterMap.get(BattlePosition.RIGHT_BOTTOM_BACK, null) - set(value): - fighterMap[BattlePosition.RIGHT_BOTTOM_BACK] = value - -@export var fighterBottomRightFront:BattleFighterScene: - get: - return fighterMap.get(BattlePosition.RIGHT_BOTTOM_FRONT, null) - set(value): - fighterMap[BattlePosition.RIGHT_BOTTOM_FRONT] = value - func _init() ->void: BATTLE.battleScene = self + + BATTLE.battleStarted.connect(onBattleStarted) + +func onBattleStarted() -> void: pass - -func getFigheterAtPosition(battlePos:BattlePosition) -> BattleFighterScene: - return fighterMap.get(battlePos, null) - -func getPositionForFighterScene(fighterScene:BattleFighterScene) -> BattlePosition: - for battlePos in fighterMap.keys(): - var scene:BattleFighterScene = fighterMap[battlePos] - if scene == fighterScene: - return battlePos - assert(false) - return BattlePosition.LEFT_TOP_BACK - -func getPositionForFighter(fighter:BattleFighter) -> BattlePosition: - for battlePos in fighterMap.keys(): - var fighterScene:BattleFighterScene = fighterMap[battlePos] - if fighterScene.fighter == fighter: - return battlePos - assert(false) - return BattlePosition.LEFT_TOP_BACK - -func getFighterSceneForFighter(fighter:BattleFighter) -> BattleFighterScene: - for battlePos in fighterMap.keys(): - var fighterScene:BattleFighterScene = fighterMap[battlePos] - if fighterScene.fighter == fighter: - return fighterScene - return null - -func startBattle(params:Dictionary) -> void: - assert(params.has('fighters')) - assert(!active) - - var cutscene:Cutscene = params.get('cutscene', Cutscene.new()) - - for battlePos in params['fighters'].keys(): - var fighterScene:BattleFighterScene = fighterMap.get(battlePos, null) - assert(fighterScene != null) - fighterScene.setFighter(params['fighters'][battlePos]) - - # Initial cutscene elements. In future I may need to make this editable - # somehow? - cutscene.addCallable({ "function": CutsceneBattleAction.playerDecision }) - - if !cutscene.running: - cutscene.start() - - active = true diff --git a/battle/BattleScene.tscn b/battle/BattleScene.tscn index 0046535..d718b10 100644 --- a/battle/BattleScene.tscn +++ b/battle/BattleScene.tscn @@ -4,21 +4,9 @@ [ext_resource type="Script" uid="uid://dihfp05x6pktn" path="res://battle/BattleScene.gd" id="1_acaen"] [ext_resource type="PackedScene" uid="uid://ktmvnapibv2q" path="res://battle/ui/ActionBox.tscn" id="2_c3ndu"] -[node name="BattleScene" type="Node3D" node_paths=PackedStringArray("actionBox", "fighterTopLeftBack", "fighterTopLeftFront", "fighterMiddleLeftBack", "fighterMiddleLeftFront", "fighterBottomLeftBack", "fighterBottomLeftFront", "fighterTopRightBack", "fighterTopRightFront", "fighterMiddleRightBack", "fighterMiddleRightFront", "fighterBottomRightBack", "fighterBottomRightFront")] +[node name="BattleScene" type="Node3D" node_paths=PackedStringArray("actionBox")] script = ExtResource("1_acaen") actionBox = NodePath("UI/ActionBox") -fighterTopLeftBack = NodePath("Fighters/LeftTopBack") -fighterTopLeftFront = NodePath("Fighters/LeftTopFront") -fighterMiddleLeftBack = NodePath("Fighters/LeftMiddleBack") -fighterMiddleLeftFront = NodePath("Fighters/LeftMiddleFront") -fighterBottomLeftBack = NodePath("Fighters/LeftBottomBack") -fighterBottomLeftFront = NodePath("Fighters/LeftBottomFront") -fighterTopRightBack = NodePath("Fighters/RightTopBack") -fighterTopRightFront = NodePath("Fighters/RightTopFront") -fighterMiddleRightBack = NodePath("Fighters/RightMiddleBack") -fighterMiddleRightFront = NodePath("Fighters/RightMiddleFront") -fighterBottomRightBack = NodePath("Fighters/RightBottomBack") -fighterBottomRightFront = NodePath("Fighters/RightBottomFront") metadata/_custom_type_script = "uid://dihfp05x6pktn" [node name="UI" type="Control" parent="."] @@ -42,39 +30,50 @@ text = "Battle" [node name="LeftTopBack" parent="Fighters" instance=ExtResource("1_abr1f")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5, 3, 0) +battlePosition = 0 [node name="LeftTopFront" parent="Fighters" instance=ExtResource("1_abr1f")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -3, 3, 0) +battlePosition = 1 [node name="LeftMiddleBack" parent="Fighters" instance=ExtResource("1_abr1f")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5, 0, 0) +battlePosition = 2 [node name="LeftMiddleFront" parent="Fighters" instance=ExtResource("1_abr1f")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.754, 0, 0) [node name="LeftBottomBack" parent="Fighters" instance=ExtResource("1_abr1f")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5, -3, 0) +battlePosition = 4 [node name="LeftBottomFront" parent="Fighters" instance=ExtResource("1_abr1f")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -3, -3, 0) +battlePosition = 5 [node name="RightTopFront" parent="Fighters" instance=ExtResource("1_abr1f")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3, 3, 0) +battlePosition = 7 [node name="RightTopBack" parent="Fighters" instance=ExtResource("1_abr1f")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5, 3, 0) +battlePosition = 6 [node name="RightMiddleFront" parent="Fighters" instance=ExtResource("1_abr1f")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3, 0, 0) +battlePosition = 9 [node name="RightMiddleBack" parent="Fighters" instance=ExtResource("1_abr1f")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5, 0, 0) +battlePosition = 8 [node name="RightBottomFront" parent="Fighters" instance=ExtResource("1_abr1f")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3, -3, 0) +battlePosition = 11 [node name="RightBottomBack" parent="Fighters" instance=ExtResource("1_abr1f")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5, -3, 0) +battlePosition = 10 [node name="Camera3D" type="Camera3D" parent="."] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 6.9021) diff --git a/battle/cutscene/BattleAction.gd.uid b/battle/cutscene/BattleAction.gd.uid new file mode 100644 index 0000000..b2a8e95 --- /dev/null +++ b/battle/cutscene/BattleAction.gd.uid @@ -0,0 +1 @@ +uid://bo4kp86ebt2mq diff --git a/battle/cutscene/BattleCutsceneAction.gd b/battle/cutscene/BattleCutsceneAction.gd new file mode 100644 index 0000000..b3f198d --- /dev/null +++ b/battle/cutscene/BattleCutsceneAction.gd @@ -0,0 +1,14 @@ +class_name BattleAction +const BattleFighter = preload("res://battle/fighter/BattleFighter.gd") + +static func playerDecisionCallable(_params:Dictionary) -> int: + BATTLE.battleScene.actionBox.visible = true + var move = await BATTLE.battleScene.actionBox.decisionMade + BATTLE.battleScene.actionBox.visible = false + return Cutscene.CUTSCENE_CONTINUE + +static func getPlayerDecisionCallable(fighter:BattleFighter) -> Dictionary: + return { + "function": playerDecisionCallable, + "fighter": fighter + } diff --git a/battle/cutscene/BattleCutsceneAction.gd.uid b/battle/cutscene/BattleCutsceneAction.gd.uid new file mode 100644 index 0000000..b2932af --- /dev/null +++ b/battle/cutscene/BattleCutsceneAction.gd.uid @@ -0,0 +1 @@ +uid://duetkvkhddyc7 diff --git a/battle/fighter/BattleFighter.gd b/battle/fighter/BattleFighter.gd index afe2bd8..bdaa191 100644 --- a/battle/fighter/BattleFighter.gd +++ b/battle/fighter/BattleFighter.gd @@ -5,40 +5,72 @@ enum Status { DEAD, } +enum FighterTeam { + PLAYER, + ENEMY +} + +enum FighterController { + PLAYER, + AI +} + +# Health var health:int var maxHealth:int var mp:int var maxMp:int -var status:Status = Status.NORMAL +var status:Status -var attack:int = 10 -var defense:int = 5 -var speed:int = 5 -var magic:int = 5 -var luck:int = 1 +# Identity +var team:FighterTeam +var controller:FighterController -func _init( - maxHealth:int = 100, - maxMp:int = 50, -) -> void: - self.maxHealth = maxHealth - self.health = maxHealth - self.maxMp = maxMp - self.mp = maxMp +# Stats +var attack:int +var defense:int +var speed:int +var magic:int +var luck:int + +# Equipment + +# Signals +signal healthChanged(difference:int) +signal mpChanged(difference:int) +signal statusChanged(oldStatus:Status, newStatus:Status) + +func _init(params:Dictionary) -> void: + self.maxHealth = params.get('max_health', 100) + self.maxMp = params.get('max_mp', 50) + self.attack = params.get('attack', 10) + self.defense = params.get('defense', 5) + self.speed = params.get('speed', 5) + self.magic = params.get('magic', 5) + self.luck = params.get('luck', 1) + self.team = params.get('team', FighterTeam.ENEMY) + self.controller = params.get('controller', FighterController.PLAYER) + + self.health = self.maxHealth + self.mp = self.maxMp func damage(amount:int) -> void: assert(amount > 0) if status == Status.DEAD: return health = max(health - amount, 0) + healthChanged.emit(-amount) if health == 0: + var oldStatus = status status = Status.DEAD + statusChanged.emit(oldStatus, status) func heal(amount:int) -> void: assert(amount > 0) if status == Status.DEAD: return health = min(health + amount, maxHealth) + healthChanged.emit(amount) func revive(health:int) -> void: assert(health > 0) @@ -47,14 +79,18 @@ func revive(health:int) -> void: health = min(health, maxHealth) status = Status.NORMAL self.health = health + statusChanged.emit(Status.DEAD, Status.NORMAL) + healthChanged.emit(health) func mpConsume(amount:int) -> void: assert(amount > 0) mp = max(mp - amount, 0) + mpChanged.emit(-amount) func mpRestore(amount:int) -> void: assert(amount > 0) mp = min(mp + amount, maxMp) + mpChanged.emit(amount) func isCrit() -> bool: # 10% chance of a crit diff --git a/battle/fighter/BattleFighterScene.gd b/battle/fighter/BattleFighterScene.gd index ca0439d..4777ab0 100644 --- a/battle/fighter/BattleFighterScene.gd +++ b/battle/fighter/BattleFighterScene.gd @@ -1,15 +1,26 @@ class_name BattleFighterScene extends Node3D -var fighter:BattleFighter +@export var battlePosition:BattleSingleton.BattlePosition = BattleSingleton.BattlePosition.LEFT_MIDDLE_FRONT -func _ready() -> void: - self.visible = false - if fighter: - setFighter(fighter) +func _getFighter() -> BattleFighter: + return BATTLE.getFighterAtPosition(self.battlePosition) + +func _updateFighter() -> void: + var fighter = _getFighter() + + if fighter == null: + self.visible = false + return -func setFighter(fighter:BattleFighter) -> void: - print("Setting fighter: %s" % fighter) # Set up the visual representation of the fighter here - self.fighter = fighter self.visible = true - pass \ No newline at end of file + +func _enter_tree() -> void: + BATTLE.battleFightersChanged.connect(onFightersChanged) + self._updateFighter() + +func _exit_tree() -> void: + BATTLE.battleFightersChanged.disconnect(onFightersChanged) + +func onFightersChanged() -> void: + _updateFighter() diff --git a/battle/fighter/BattleFighterScene.tscn b/battle/fighter/BattleFighterScene.tscn index deba44b..35fe2a2 100644 --- a/battle/fighter/BattleFighterScene.tscn +++ b/battle/fighter/BattleFighterScene.tscn @@ -1,6 +1,7 @@ -[gd_scene load_steps=4 format=3 uid="uid://d1xyb0hdf1yeh"] +[gd_scene load_steps=5 format=3 uid="uid://d1xyb0hdf1yeh"] [ext_resource type="Script" uid="uid://bgycdhsouwhwt" path="res://battle/fighter/BattleFighterScene.gd" id="1_veb1i"] +[ext_resource type="SpriteFrames" uid="uid://cqqkm34a46ri6" path="res://battle/fighter/idk/green_dragon_frames.tres" id="2_e55p4"] [sub_resource type="BoxMesh" id="BoxMesh_veb1i"] @@ -12,5 +13,11 @@ script = ExtResource("1_veb1i") metadata/_custom_type_script = "uid://bgycdhsouwhwt" [node name="MeshInstance3D" type="MeshInstance3D" parent="."] +visible = false mesh = SubResource("BoxMesh_veb1i") surface_material_override/0 = SubResource("StandardMaterial3D_e55p4") + +[node name="AnimatedSprite3D" type="AnimatedSprite3D" parent="."] +sprite_frames = ExtResource("2_e55p4") +animation = &"idle" +frame_progress = 0.746159 diff --git a/battle/fighter/idk/DAGRONS5.png b/battle/fighter/idk/DAGRONS5.png new file mode 100644 index 0000000000000000000000000000000000000000..b39bc4986c52913965519fa80fb3a5c43ada5866 GIT binary patch literal 50387 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 int: - BATTLE.battleScene.actionBox.visible = true - var move = await BATTLE.battleScene.actionBox.decisionMade - BATTLE.battleScene.actionBox.visible = false - return Cutscene.CUTSCENE_CONTINUE \ No newline at end of file diff --git a/cutscene/battle/CutsceneBattleAction.gd.uid b/cutscene/battle/CutsceneBattleAction.gd.uid deleted file mode 100644 index 7adab66..0000000 --- a/cutscene/battle/CutsceneBattleAction.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://cj38yci04aylm diff --git a/party/Party.gd b/party/Party.gd index 8cdaa0a..975f97d 100644 --- a/party/Party.gd +++ b/party/Party.gd @@ -1,6 +1,11 @@ class_name PartySingleton extends Node -static var PARTY_JOHN = PartyMember.new("John") +static var PARTY_JOHN = PartyMember.new({ + 'name': "John", + 'team': BattleFighter.FighterTeam.PLAYER, +}) + +static var BACKPACK = Inventory.new() static func getFullParty() -> Array[PartyMember]: return [ diff --git a/party/PartyMember.gd b/party/PartyMember.gd index 57cd8a8..2b44022 100644 --- a/party/PartyMember.gd +++ b/party/PartyMember.gd @@ -2,10 +2,6 @@ class_name PartyMember extends BattleFighter var name:String -func _init( - name:String, - maxHealth:int = 100, - maxMp:int = 50, -) -> void: - super(maxHealth, maxMp) - self.name = name \ No newline at end of file +func _init(params:Dictionary) -> void: + super(params) + self.name = params.get('name', 'Unknown') \ No newline at end of file diff --git a/scene/RootScene.gd b/scene/RootScene.gd index 61de209..d29e964 100644 --- a/scene/RootScene.gd +++ b/scene/RootScene.gd @@ -8,7 +8,14 @@ class_name RootScene extends Node3D func _enter_tree() -> void: SCENE.sceneChanged.connect(onSceneChange) - SCENE.setScene(SceneSingleton.SceneType.INITIAL) + # SCENE.setScene(SceneSingleton.SceneType.INITIAL) + + SCENE.setScene(SceneSingleton.SceneType.BATTLE) + BATTLE.startBattle({ + 'fighters': { + BATTLE.BattlePosition.RIGHT_TOP_FRONT: PartySingleton.PARTY_JOHN, + } + }) func _exit_tree() -> void: push_error("RootScene should not be removed from the scene tree. This is a bug.") diff --git a/ui/mainmenu/MainMenu.gd b/ui/mainmenu/MainMenu.gd index 4043323..107d196 100644 --- a/ui/mainmenu/MainMenu.gd +++ b/ui/mainmenu/MainMenu.gd @@ -10,14 +10,8 @@ func _ready() -> void: btnSettings.pressed.connect(onSettingsPressed) func onNewGamePressed() -> void: - #SCENE.setScene(SceneSingleton.SceneType.OVERWORLD) - #OVERWORLD.mapChange(newGameScene, "PlayerSpawnPoint") - SCENE.setScene(SceneSingleton.SceneType.BATTLE) - BATTLE.startBattle({ - 'fighters': { - BattleScene.BattlePosition.RIGHT_TOP_FRONT: PartySingleton.PARTY_JOHN, - } - }) + SCENE.setScene(SceneSingleton.SceneType.OVERWORLD) + OVERWORLD.mapChange(newGameScene, "PlayerSpawnPoint") func onSettingsPressed() -> void: print("Settings button pressed")