generated from SGDA/GodotExampleProject
Compare commits
3 Commits
Author | SHA1 | Date | |
---|---|---|---|
f365450590 | |||
e6da2f34e6 | |||
1b83af938f |
@ -12,7 +12,7 @@ func update_name_label():
|
||||
var config_name : String = ProjectSettings.get_setting("application/config/name", NO_NAME_STRING)
|
||||
if config_name.is_empty():
|
||||
config_name = NO_NAME_STRING
|
||||
text = config_name
|
||||
text = config_name.to_upper()
|
||||
|
||||
func _ready():
|
||||
update_name_label()
|
||||
|
BIN
assets/Audio/CIN_INTRO_Pitch mission.ogg
Normal file
BIN
assets/Audio/CIN_INTRO_Pitch mission.ogg
Normal file
Binary file not shown.
19
assets/Audio/CIN_INTRO_Pitch mission.ogg.import
Normal file
19
assets/Audio/CIN_INTRO_Pitch mission.ogg.import
Normal file
@ -0,0 +1,19 @@
|
||||
[remap]
|
||||
|
||||
importer="oggvorbisstr"
|
||||
type="AudioStreamOggVorbis"
|
||||
uid="uid://dcylcol0nj0pv"
|
||||
path="res://.godot/imported/CIN_INTRO_Pitch mission.ogg-4b569bdb43235b38f5baa7a3f9997ccb.oggvorbisstr"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/Audio/CIN_INTRO_Pitch mission.ogg"
|
||||
dest_files=["res://.godot/imported/CIN_INTRO_Pitch mission.ogg-4b569bdb43235b38f5baa7a3f9997ccb.oggvorbisstr"]
|
||||
|
||||
[params]
|
||||
|
||||
loop=false
|
||||
loop_offset=0
|
||||
bpm=0
|
||||
beat_count=0
|
||||
bar_beats=4
|
33
default_bus_layout.tres
Normal file
33
default_bus_layout.tres
Normal file
@ -0,0 +1,33 @@
|
||||
[gd_resource type="AudioBusLayout" format=3 uid="uid://cd43qm20mmsb4"]
|
||||
|
||||
[resource]
|
||||
bus/1/name = &"Cinematique"
|
||||
bus/1/solo = false
|
||||
bus/1/mute = false
|
||||
bus/1/bypass_fx = false
|
||||
bus/1/volume_db = 0.0
|
||||
bus/1/send = &"Master"
|
||||
bus/2/name = &"Character"
|
||||
bus/2/solo = false
|
||||
bus/2/mute = false
|
||||
bus/2/bypass_fx = false
|
||||
bus/2/volume_db = 0.0
|
||||
bus/2/send = &"Master"
|
||||
bus/3/name = &"VoiceOver"
|
||||
bus/3/solo = false
|
||||
bus/3/mute = false
|
||||
bus/3/bypass_fx = false
|
||||
bus/3/volume_db = 0.0
|
||||
bus/3/send = &"Master"
|
||||
bus/4/name = &"UI"
|
||||
bus/4/solo = false
|
||||
bus/4/mute = false
|
||||
bus/4/bypass_fx = false
|
||||
bus/4/volume_db = 0.0
|
||||
bus/4/send = &"Master"
|
||||
bus/5/name = &"Music"
|
||||
bus/5/solo = false
|
||||
bus/5/mute = false
|
||||
bus/5/bypass_fx = false
|
||||
bus/5/volume_db = 0.0
|
||||
bus/5/send = &"Master"
|
@ -3,6 +3,7 @@ class_name Interactible
|
||||
|
||||
# @export_file("*.tscn") var scene_to_trigger: String
|
||||
@export var message: String
|
||||
@export var interact_text: String
|
||||
@export var event: String
|
||||
|
||||
signal event_triggered(event_id: String)
|
||||
@ -10,12 +11,16 @@ signal event_triggered(event_id: String)
|
||||
@onready var rich_text_label: RichTextLabel = $RichTextLabel
|
||||
@onready var confirm_panel: Panel = %ConfirmPanel
|
||||
@onready var message_box: Label = %MessageBox
|
||||
@onready var interact_box: RichTextLabel = $RichTextLabel
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready() -> void:
|
||||
rich_text_label.visible = false
|
||||
confirm_panel.visible = false
|
||||
message_box.text = message.to_upper()
|
||||
|
||||
if not interact_text.is_empty():
|
||||
interact_box.text = interact_text.to_upper()
|
||||
|
||||
func _on_body_entered(body: Node2D) -> void:
|
||||
rich_text_label.visible = true
|
||||
|
@ -40,6 +40,7 @@ mouse_filter = 2
|
||||
|
||||
[node name="ConfirmPanel" type="Panel" parent="CenterContainer"]
|
||||
unique_name_in_owner = true
|
||||
visible = false
|
||||
custom_minimum_size = Vector2(280, 120)
|
||||
layout_mode = 2
|
||||
|
||||
|
@ -733,12 +733,13 @@ tile_map_data = PackedByteArray("AAAIAAAAAAAIAAUAAAAIAAEAAAARAAQAAAAIAAIAAAARAAU
|
||||
tile_set = SubResource("TileSet_tefeu")
|
||||
|
||||
[node name="Deco" type="TileMapLayer" parent="."]
|
||||
tile_map_data = PackedByteArray("AAAXAAcAAAAJAAcAAAAXAAgAAAAJAAgAAAAYAAcAAAAKAAcAAAAWAAYAAAAIAAYAAAAWAAcAAAAIAAcAAAAWAAgAAAAIAAgAAAAXAAYAAAAJAAYAAAAYAAYAAAAKAAYAAAAYAAgAAAAKAAgAAAAaAAQAAAAOAAgAAAAUAAQAAAAOAAgAAAAUAAoAAAAOAAgAAAAaAAoAAAAOAAgAAAAcAAYAAAAIAAYAAAAcAAcAAAAIAAcAAAAcAAgAAAAIAAgAAAAdAAYAAAAJAAYAAAAdAAcAAAAJAAcAAAAdAAgAAAAJAAgAAAAeAAYAAAAKAAYAAAAeAAcAAAAKAAcAAAAeAAgAAAAKAAgAAAAgAAoAAAAOAAgAAAAgAAQAAAAOAAgAAAA=")
|
||||
tile_map_data = PackedByteArray("AAAXAAcAAAAJAAcAAAAXAAgAAAAJAAgAAAAYAAcAAAAKAAcAAAAWAAYAAAAIAAYAAAAWAAcAAAAIAAcAAAAWAAgAAAAIAAgAAAAXAAYAAAAJAAYAAAAYAAYAAAAKAAYAAAAYAAgAAAAKAAgAAAAcAAYAAAAIAAYAAAAcAAcAAAAIAAcAAAAcAAgAAAAIAAgAAAAdAAYAAAAJAAYAAAAdAAcAAAAJAAcAAAAdAAgAAAAJAAgAAAAeAAYAAAAKAAYAAAAeAAcAAAAKAAcAAAAeAAgAAAAKAAgAAAATAAsAAAAOAAgAAAAaAAsAAAAOAAgAAAAhAAsAAAAOAAgAAAAhAAMAAAAOAAgAAAAaAAMAAAAOAAgAAAATAAMAAAAOAAgAAAA=")
|
||||
tile_set = SubResource("TileSet_tefeu")
|
||||
|
||||
[node name="WrongDoor" parent="." instance=ExtResource("5_tefeu")]
|
||||
position = Vector2(191, 104)
|
||||
message = "entrer dans la poste ?"
|
||||
interact_text = "porte"
|
||||
event = "wrong"
|
||||
|
||||
[node name="Sprite2D" type="Sprite2D" parent="WrongDoor"]
|
||||
@ -761,7 +762,7 @@ position = Vector2(320, 202)
|
||||
walk_speed = 100.0
|
||||
|
||||
[node name="DecoOverlay" type="TileMapLayer" parent="."]
|
||||
tile_map_data = PackedByteArray("AAAXAAcAAAAJAAcAAAAXAAgAAAAJAAgAAAAYAAcAAAAKAAcAAAAWAAYAAAAIAAYAAAAWAAcAAAAIAAcAAAAWAAgAAAAIAAgAAAAXAAYAAAAJAAYAAAAYAAYAAAAKAAYAAAAYAAgAAAAKAAgAAAAaAAQAAAAOAAgAAAAUAAQAAAAOAAgAAAAUAAoAAAAOAAgAAAAaAAoAAAAOAAgAAAAcAAYAAAAIAAYAAAAcAAcAAAAIAAcAAAAcAAgAAAAIAAgAAAAdAAYAAAAJAAYAAAAdAAcAAAAJAAcAAAAdAAgAAAAJAAgAAAAeAAYAAAAKAAYAAAAeAAcAAAAKAAcAAAAeAAgAAAAKAAgAAAAgAAoAAAAOAAgAAAAgAAQAAAAOAAgAAAATAAUAAAAQAAgAAAATAAYAAAAQAAkAAAATAAcAAAAQAAgAAAATAAgAAAAQAAkAAAAaAAUAAAAQAAgAAAAaAAYAAAAQAAkAAAAaAAcAAAAQAAgAAAAaAAgAAAAQAAkAAAAgAAUAAAAQAAgAAAAgAAYAAAAQAAkAAAAgAAcAAAAQAAgAAAAgAAgAAAAQAAkAAAA=")
|
||||
tile_map_data = PackedByteArray("AAAXAAcAAAAJAAcAAAAXAAgAAAAJAAgAAAAYAAcAAAAKAAcAAAAWAAYAAAAIAAYAAAAWAAcAAAAIAAcAAAAWAAgAAAAIAAgAAAAXAAYAAAAJAAYAAAAYAAYAAAAKAAYAAAAYAAgAAAAKAAgAAAAcAAYAAAAIAAYAAAAcAAcAAAAIAAcAAAAcAAgAAAAIAAgAAAAdAAYAAAAJAAYAAAAdAAcAAAAJAAcAAAAdAAgAAAAJAAgAAAAeAAYAAAAKAAYAAAAeAAcAAAAKAAcAAAAeAAgAAAAKAAgAAAAaAAYAAAAQAAgAAAATAAYAAAAQAAgAAAATAAcAAAAQAAkAAAAaAAcAAAAQAAkAAAAhAAYAAAAQAAgAAAAhAAcAAAAQAAkAAAA=")
|
||||
tile_set = SubResource("TileSet_tefeu")
|
||||
|
||||
[connection signal="event_triggered" from="WrongDoor" to="." method="_on_door_event_triggered"]
|
||||
|
61
scenes/text_wrappers/intro.gd
Normal file
61
scenes/text_wrappers/intro.gd
Normal file
@ -0,0 +1,61 @@
|
||||
extends Control
|
||||
|
||||
@export_file("*.tscn") var scene_to_trigger: String
|
||||
|
||||
@onready var further_connexion: Timer = $FurtherConnexion
|
||||
@onready var text_start: Timer = $TextStart
|
||||
@onready var time_between_words: Timer = $TimeBetweenWords
|
||||
@onready var time_before_show_buttons: Timer = $TimeBeforeShowButtons
|
||||
|
||||
@onready var message: Label = %Message
|
||||
@onready var accept_button_1: Button = %AcceptButton1
|
||||
@onready var accept_button_2: Button = %AcceptButton2
|
||||
|
||||
var growing_text: String = ""
|
||||
var text_split: PackedStringArray
|
||||
var text_fine_split: PackedStringArray
|
||||
var text_fully_on_screen = false
|
||||
var text_showing = false
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready() -> void:
|
||||
text_split = message.text.split("---")
|
||||
text_fine_split = text_split[2].split(" ")
|
||||
message.text = ""
|
||||
|
||||
accept_button_1.visible = false
|
||||
accept_button_2.visible = false
|
||||
|
||||
func start_mission() -> void:
|
||||
SceneLoader.load_scene(scene_to_trigger)
|
||||
|
||||
func _on_start_connexion_timeout() -> void:
|
||||
message.text = text_split[0]
|
||||
further_connexion.start()
|
||||
|
||||
func _on_further_connexion_timeout() -> void:
|
||||
message.text = text_split[1]
|
||||
text_start.start()
|
||||
|
||||
func _on_text_start_timeout() -> void:
|
||||
message.text = ""
|
||||
time_between_words.start()
|
||||
|
||||
func _on_time_between_words_timeout() -> void:
|
||||
if text_fine_split.is_empty():
|
||||
time_between_words.stop()
|
||||
time_before_show_buttons.start()
|
||||
return
|
||||
|
||||
var current_text = message.text
|
||||
current_text += text_fine_split[0]
|
||||
current_text += " "
|
||||
message.text = current_text
|
||||
|
||||
text_fine_split.remove_at(0)
|
||||
time_between_words.start()
|
||||
|
||||
|
||||
func _on_time_before_show_buttons_timeout() -> void:
|
||||
accept_button_1.visible = true
|
||||
accept_button_2.visible = true
|
1
scenes/text_wrappers/intro.gd.uid
Normal file
1
scenes/text_wrappers/intro.gd.uid
Normal file
@ -0,0 +1 @@
|
||||
uid://bwr3tliac4mo2
|
134
scenes/text_wrappers/intro.tscn
Normal file
134
scenes/text_wrappers/intro.tscn
Normal file
@ -0,0 +1,134 @@
|
||||
[gd_scene load_steps=6 format=3 uid="uid://djmvj0uqw26dg"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://bhhphcagggc1" path="res://template/scenes/credits/scrolling_credits.tscn" id="1_ftj6e"]
|
||||
[ext_resource type="Script" uid="uid://bwr3tliac4mo2" path="res://scenes/text_wrappers/intro.gd" id="2_sbctf"]
|
||||
[ext_resource type="PackedScene" uid="uid://bkcsjsk2ciff" path="res://addons/maaacks_menus_template/base/scenes/music_players/background_music_player.tscn" id="3_pbsew"]
|
||||
[ext_resource type="Script" uid="uid://1nf36h0gms3q" path="res://addons/maaacks_menus_template/base/scripts/capture_focus.gd" id="4_23spi"]
|
||||
[ext_resource type="AudioStream" uid="uid://dcylcol0nj0pv" path="res://assets/Audio/CIN_INTRO_Pitch mission.ogg" id="4_mudqr"]
|
||||
|
||||
[node name="Intro" instance=ExtResource("1_ftj6e")]
|
||||
script = ExtResource("2_sbctf")
|
||||
scene_to_trigger = "uid://s1cx1gvt4bed"
|
||||
|
||||
[node name="BackgroundMusicPlayer" parent="." index="0" instance=ExtResource("3_pbsew")]
|
||||
stream = ExtResource("4_mudqr")
|
||||
bus = &"Cinematique"
|
||||
|
||||
[node name="BackgroundColor" type="ColorRect" parent="." index="1"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
color = Color(0, 0, 0, 1)
|
||||
|
||||
[node name="BackgroundTextureRect" type="TextureRect" parent="." index="2"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
expand_mode = 1
|
||||
stretch_mode = 5
|
||||
|
||||
[node name="ScrollContainer" parent="." index="3"]
|
||||
visible = false
|
||||
scroll_vertical = 0
|
||||
|
||||
[node name="CenterContainer" type="CenterContainer" parent="." index="4"]
|
||||
layout_mode = 0
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
mouse_filter = 2
|
||||
|
||||
[node name="VBoxContainer" type="VBoxContainer" parent="CenterContainer" index="0"]
|
||||
custom_minimum_size = Vector2(600, 0)
|
||||
layout_mode = 2
|
||||
|
||||
[node name="Message" type="Label" parent="CenterContainer/VBoxContainer" index="0"]
|
||||
unique_name_in_owner = true
|
||||
custom_minimum_size = Vector2(360, 0)
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
text = "__CALL IN PROGRESS__
|
||||
---
|
||||
__HANDSHAKE OVER__
|
||||
__FINGERPRINT: NO-MECANIC__
|
||||
/!\\ CONNEXION SECURE /!\\
|
||||
---
|
||||
VOTRE NOM DE CODE POUR CETTE MISSION: DINO SÉRIEUX.
|
||||
VOTRE BUT: REJOINDRE L’AGENTE DINO LOGHORÉE QUI EST SOUS COUVERTURE DANS LA MÉGACORPORATION ONID. DEPUIS DES MOIS, ELLE CULTIVE UN RAPPORT AVEC LA CIBLE, LA CEO DE ONID, AFIN DE POUVOIR LA DISTRAIRE AUJOURD'HUI.
|
||||
|
||||
SUIVEZ SES INSTRUCTIONS DANS L'OREILLETTE, ET VOLEZ LES DONNÉES SAUVEGARDÉES SUR LA CIBLE. AVEC CES DONNÉES, NOUS EXPOSERONS LES MALVERSATIONS DE LA MÉGACORPORATION ONID.
|
||||
|
||||
ATTENTION, DINO SÉRIEUX: COMME ELLE EST SOUS COUVERTURE, DINO LOGHORÉE VOUS INDIQUERA LES PROCHAINES ÉTAPES EN CODE. VEILLEZ À BIEN ÉCOUTER LES MOTS QU'ELLE VOUS DIT, ET DIRIGEZ-VOUS VERS LES ÉLÉMENTS QUE VOUS ENTENDEZ.
|
||||
|
||||
RAPPELEZ-VOUS : UNE INCOMPRÉHENSION PEUT COMPROMETTRE VOTRE COUVERTURE ET FAIRE ÉCHOUER LA MISSION.
|
||||
"
|
||||
vertical_alignment = 1
|
||||
autowrap_mode = 3
|
||||
|
||||
[node name="CenterContainer" type="CenterContainer" parent="CenterContainer/VBoxContainer" index="1"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
|
||||
[node name="HBoxContainer" type="HBoxContainer" parent="CenterContainer/VBoxContainer/CenterContainer" index="0"]
|
||||
custom_minimum_size = Vector2(256, 0)
|
||||
layout_mode = 2
|
||||
size_flags_vertical = 3
|
||||
theme_override_constants/separation = 16
|
||||
script = ExtResource("4_23spi")
|
||||
|
||||
[node name="AcceptButton1" type="Button" parent="CenterContainer/VBoxContainer/CenterContainer/HBoxContainer" index="0"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
text = "ACCEPTER"
|
||||
|
||||
[node name="AcceptButton2" type="Button" parent="CenterContainer/VBoxContainer/CenterContainer/HBoxContainer" index="1"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
text = "ACCEPTER AUSSI"
|
||||
|
||||
[node name="EndMessagePanel" type="Panel" parent="CenterContainer" index="1"]
|
||||
unique_name_in_owner = true
|
||||
visible = false
|
||||
custom_minimum_size = Vector2(360, 120)
|
||||
layout_mode = 2
|
||||
|
||||
[node name="StartConnexion" type="Timer" parent="." index="5"]
|
||||
wait_time = 5.0
|
||||
one_shot = true
|
||||
autostart = true
|
||||
|
||||
[node name="FurtherConnexion" type="Timer" parent="." index="6"]
|
||||
wait_time = 8.0
|
||||
one_shot = true
|
||||
|
||||
[node name="TextStart" type="Timer" parent="." index="7"]
|
||||
wait_time = 7.0
|
||||
one_shot = true
|
||||
|
||||
[node name="TimeBetweenWords" type="Timer" parent="." index="8"]
|
||||
wait_time = 0.4
|
||||
|
||||
[node name="TimeBeforeShowButtons" type="Timer" parent="." index="9"]
|
||||
wait_time = 2.0
|
||||
one_shot = true
|
||||
|
||||
[connection signal="pressed" from="CenterContainer/VBoxContainer/CenterContainer/HBoxContainer/AcceptButton1" to="." method="start_mission"]
|
||||
[connection signal="pressed" from="CenterContainer/VBoxContainer/CenterContainer/HBoxContainer/AcceptButton2" to="." method="start_mission"]
|
||||
[connection signal="timeout" from="StartConnexion" to="." method="_on_start_connexion_timeout"]
|
||||
[connection signal="timeout" from="FurtherConnexion" to="." method="_on_further_connexion_timeout"]
|
||||
[connection signal="timeout" from="TextStart" to="." method="_on_text_start_timeout"]
|
||||
[connection signal="timeout" from="TimeBetweenWords" to="." method="_on_time_between_words_timeout"]
|
||||
[connection signal="timeout" from="TimeBeforeShowButtons" to="." method="_on_time_before_show_buttons_timeout"]
|
@ -351,7 +351,7 @@ graph_offset = Vector2(-180.277, 49)
|
||||
|
||||
[node name="MainMenu" instance=ExtResource("1_iaw2i")]
|
||||
script = ExtResource("2_mcwxw")
|
||||
game_scene_path = "uid://s1cx1gvt4bed"
|
||||
game_scene_path = "uid://djmvj0uqw26dg"
|
||||
options_packed_scene = ExtResource("3_p7afn")
|
||||
credits_packed_scene = ExtResource("4_tsej0")
|
||||
|
||||
@ -375,13 +375,13 @@ modulate = Color(1, 1, 1, 0)
|
||||
modulate = Color(1, 1, 1, 0)
|
||||
|
||||
[node name="TitleLabel" parent="MenuContainer/TitleMargin/TitleContainer" index="0"]
|
||||
text = "Between the lines"
|
||||
text = "BETWEEN THE LINES"
|
||||
|
||||
[node name="SubTitleContainer" parent="MenuContainer/SubTitleMargin" index="0"]
|
||||
modulate = Color(1, 1, 1, 0)
|
||||
|
||||
[node name="SubTitleLabel" parent="MenuContainer/SubTitleMargin/SubTitleContainer" index="0"]
|
||||
text = "You better read"
|
||||
text = "YOU BETTER READ"
|
||||
|
||||
[node name="MenuButtonsContainer" parent="MenuContainer/MenuButtonsMargin" index="0"]
|
||||
modulate = Color(1, 1, 1, 0)
|
||||
@ -389,10 +389,22 @@ modulate = Color(1, 1, 1, 0)
|
||||
[node name="MenuButtonsBoxContainer" parent="MenuContainer/MenuButtonsMargin/MenuButtonsContainer" index="0"]
|
||||
lock = true
|
||||
|
||||
[node name="NewGameButton" parent="MenuContainer/MenuButtonsMargin/MenuButtonsContainer/MenuButtonsBoxContainer" index="0"]
|
||||
text = "NEW GAME"
|
||||
|
||||
[node name="ContinueGameButton" type="Button" parent="MenuContainer/MenuButtonsMargin/MenuButtonsContainer/MenuButtonsBoxContainer" index="1"]
|
||||
unique_name_in_owner = true
|
||||
visible = false
|
||||
layout_mode = 2
|
||||
text = "Continue"
|
||||
|
||||
[node name="OptionsButton" parent="MenuContainer/MenuButtonsMargin/MenuButtonsContainer/MenuButtonsBoxContainer" index="2"]
|
||||
visible = false
|
||||
|
||||
[node name="CreditsButton" parent="MenuContainer/MenuButtonsMargin/MenuButtonsContainer/MenuButtonsBoxContainer" index="3"]
|
||||
text = "CREDITS"
|
||||
|
||||
[node name="ExitButton" parent="MenuContainer/MenuButtonsMargin/MenuButtonsContainer/MenuButtonsBoxContainer" index="4"]
|
||||
text = "EXIT"
|
||||
|
||||
[connection signal="pressed" from="MenuContainer/MenuButtonsMargin/MenuButtonsContainer/MenuButtonsBoxContainer/ContinueGameButton" to="." method="_on_continue_game_button_pressed"]
|
||||
|
Reference in New Issue
Block a user