Files
godot-demo-projects/2d/role_playing_game/game.gd
Hugo Locurcio 4d01a2678f Port demos with remade art assets to Godot 4 (#922)
This re-ports the following demos to Godot 4 following their latest `3.x` versions:

- 2D Navigation with AStarGrid2D
- 2D JRPG Demo
- 2D Isometric Game
- 2D Platformer

Some tweaks have also been made in the process, such as split screen players
having different colors in the 2D Platformer demo.

Co-authored-by: Nonparoxysmic <69494951+Nonparoxysmic@users.noreply.github.com>
2024-02-10 01:40:04 +01:00

59 lines
1.6 KiB
GDScript

extends Node
const PLAYER_WIN = "res://dialogue/dialogue_data/player_won.json"
const PLAYER_LOSE = "res://dialogue/dialogue_data/player_lose.json"
@export var combat_screen: Node
@export var exploration_screen: Node
func _ready():
combat_screen.combat_finished.connect(_on_combat_finished)
for n in $Exploration/Grid.get_children():
if not n.type == n.CellType.ACTOR:
continue
if not n.has_node("DialoguePlayer"):
continue
n.get_node("DialoguePlayer").dialogue_finished.connect(_on_opponent_dialogue_finished.bind(n))
remove_child(combat_screen)
func start_combat(combat_actors):
remove_child($Exploration)
$AnimationPlayer.play("fade")
await $AnimationPlayer.animation_finished
add_child(combat_screen)
combat_screen.show()
combat_screen.initialize(combat_actors)
$AnimationPlayer.play_backwards("fade")
func _on_opponent_dialogue_finished(opponent):
if opponent.lost:
return
var player = $Exploration/Grid/Player
var combatants = [player.combat_actor, opponent.combat_actor]
start_combat(combatants)
func _on_combat_finished(winner, _loser):
remove_child(combat_screen)
$AnimationPlayer.play_backwards("fade")
add_child(exploration_screen)
var dialogue = load("res://dialogue/dialogue_player/dialogue_player.tscn").instantiate()
if winner.name == "Player":
dialogue.dialogue_file = PLAYER_WIN
else:
dialogue.dialogue_file = PLAYER_LOSE
await $AnimationPlayer.animation_finished
var player = $Exploration/Grid/Player
exploration_screen.get_node("DialogueUI").show_dialogue(player, dialogue)
combat_screen.clear_combat()
await dialogue.dialogue_finished
dialogue.queue_free()