From 909031f53603c0ab2d14b52b4bc045cfd5a78361 Mon Sep 17 00:00:00 2001 From: Julian Murgia Date: Wed, 7 Apr 2021 08:39:59 +0200 Subject: [PATCH] Added translations management Prepares work for line voiceovers management. --- .../game/core-scripts/esc/esc_runner_level.gd | 13 +- .../game/scenes/dialogs/dialog_player.gd | 3 +- .../dialog_scenes/dialog_label.gd | 7 +- game/characters/mark/mark.tscn | 208 +++++++++--------- game/rooms/room1/esc/wall_item.esc | 8 +- .../rooms/room1/esc/wall_item_popupdialog.esc | 8 +- game/translations/game.csv | 5 + game/translations/game.en.translation | Bin 0 -> 549 bytes game/translations/game.fr.translation | Bin 0 -> 588 bytes game/translations/main_menu.csv | 7 + game/translations/main_menu.en.translation | Bin 0 -> 569 bytes game/translations/main_menu.fr.translation | Bin 0 -> 584 bytes game/ui/commons/main_menu/flags/en_EN.png | Bin 0 -> 9746 bytes .../commons/main_menu/flags/en_EN_small.png | Bin 0 -> 8760 bytes game/ui/commons/main_menu/flags/fr_FR.png | Bin 0 -> 2981 bytes .../commons/main_menu/flags/fr_FR_small.png | Bin 0 -> 1840 bytes game/ui/commons/main_menu/main.tscn | 54 +++++ game/ui/commons/main_menu/main_menu.gd | 26 ++- game/ui/commons/main_menu/main_menu.tscn | 59 ++--- game/ui/commons/main_menu/options.gd | 11 + game/ui/commons/main_menu/options.tscn | 75 +++++++ project.godot | 4 + 22 files changed, 324 insertions(+), 164 deletions(-) create mode 100644 game/translations/game.csv create mode 100644 game/translations/game.en.translation create mode 100644 game/translations/game.fr.translation create mode 100644 game/translations/main_menu.csv create mode 100644 game/translations/main_menu.en.translation create mode 100644 game/translations/main_menu.fr.translation create mode 100644 game/ui/commons/main_menu/flags/en_EN.png create mode 100644 game/ui/commons/main_menu/flags/en_EN_small.png create mode 100644 game/ui/commons/main_menu/flags/fr_FR.png create mode 100644 game/ui/commons/main_menu/flags/fr_FR_small.png create mode 100644 game/ui/commons/main_menu/main.tscn create mode 100644 game/ui/commons/main_menu/options.gd create mode 100644 game/ui/commons/main_menu/options.tscn diff --git a/addons/escoria-core/game/core-scripts/esc/esc_runner_level.gd b/addons/escoria-core/game/core-scripts/esc/esc_runner_level.gd index 7f54d23f..e423d371 100644 --- a/addons/escoria-core/game/core-scripts/esc/esc_runner_level.gd +++ b/addons/escoria-core/game/core-scripts/esc/esc_runner_level.gd @@ -465,9 +465,18 @@ func say(command_params : Array) -> esctypes: # Manage specific dialog scene if command_params.size() > 2: dialog_scene_name = command_params[2] - + + # Manage translation/voice lines keys in the form of : + # line_key:"Default line text" + # If a line_key exists, we'll set it a label as it will automatically be + # translated + var dialog_key_line = command_params[1].split(":", true, 1) + if dialog_key_line.size() > 1: + dialog_key_line[1] = dialog_key_line[1].trim_prefix("\"") + dict = { - "line": command_params[1], + "key": dialog_key_line[0], + "line": dialog_key_line[1] if dialog_key_line.size() > 1 else dialog_key_line[0], "ui": dialog_scene_name #"ui": "dialog_label" #"ui": "dialog_box_inset" diff --git a/addons/escoria-core/game/scenes/dialogs/dialog_player.gd b/addons/escoria-core/game/scenes/dialogs/dialog_player.gd index 6c64f9bd..7e7ba12c 100644 --- a/addons/escoria-core/game/scenes/dialogs/dialog_player.gd +++ b/addons/escoria-core/game/scenes/dialogs/dialog_player.gd @@ -40,7 +40,8 @@ func preload_resources(path : String): add_resource(basename, dialog_scene) file_name = dialog_folder.get_next() else: - escoria.logger.report_errors("dialog_player.gd:preload_resources()", ["An error occurred when trying to access the path: {_}.".format(path)]) + escoria.logger.report_errors("dialog_player.gd:preload_resources()", + ["An error occurred when trying to access the path: {_}.".format(path)]) func say(character : String, params : Dictionary): diff --git a/addons/escoria-core/template_scenes/dialog_scenes/dialog_label.gd b/addons/escoria-core/template_scenes/dialog_scenes/dialog_label.gd index df28aec0..afcb69de 100644 --- a/addons/escoria-core/template_scenes/dialog_scenes/dialog_label.gd +++ b/addons/escoria-core/template_scenes/dialog_scenes/dialog_label.gd @@ -43,7 +43,12 @@ func say(character : String, params : Dictionary) : var text_color = current_character.dialog_color var text_color_html = text_color.to_html(false) - text_node.bbcode_text = "[center][color=#" + text_color_html + "]".format([text_color_html]) + params["line"] + "[/color][center]" + if params["key"] != params["line"]: + text_node.bbcode_text = "[center][color=#" + text_color_html + "]" \ + .format([text_color_html]) + tr(params["key"]) + "[/color][center]" + else: + text_node.bbcode_text = "[center][color=#" + text_color_html + "]" \ + .format([text_color_html]) + params["line"] + "[/color][center]" text_node.percent_visible = 0.0 var time_show_full_text = text_speed_per_character * len(params["line"]) diff --git a/game/characters/mark/mark.tscn b/game/characters/mark/mark.tscn index a996a2ec..ea385604 100644 --- a/game/characters/mark/mark.tscn +++ b/game/characters/mark/mark.tscn @@ -10,190 +10,190 @@ [sub_resource type="AtlasTexture" id=1] atlas = ExtResource( 4 ) -region = Rect2( 72, 0, 24, 70 ) +region = Rect2( 336, 0, 24, 70 ) [sub_resource type="AtlasTexture" id=2] -atlas = ExtResource( 5 ) -region = Rect2( 0, 0, 24, 70 ) +atlas = ExtResource( 4 ) +region = Rect2( 360, 0, 24, 70 ) [sub_resource type="AtlasTexture" id=3] -atlas = ExtResource( 5 ) -region = Rect2( 24, 0, 24, 70 ) +atlas = ExtResource( 4 ) +region = Rect2( 384, 0, 24, 70 ) [sub_resource type="AtlasTexture" id=4] -atlas = ExtResource( 5 ) -region = Rect2( 48, 0, 24, 70 ) +atlas = ExtResource( 4 ) +region = Rect2( 120, 0, 24, 70 ) [sub_resource type="AtlasTexture" id=5] -atlas = ExtResource( 7 ) +atlas = ExtResource( 5 ) region = Rect2( 0, 0, 24, 70 ) [sub_resource type="AtlasTexture" id=6] -atlas = ExtResource( 7 ) +atlas = ExtResource( 5 ) region = Rect2( 24, 0, 24, 70 ) [sub_resource type="AtlasTexture" id=7] -atlas = ExtResource( 7 ) +atlas = ExtResource( 5 ) region = Rect2( 48, 0, 24, 70 ) [sub_resource type="AtlasTexture" id=8] atlas = ExtResource( 7 ) -region = Rect2( 72, 0, 24, 70 ) +region = Rect2( 0, 0, 24, 70 ) [sub_resource type="AtlasTexture" id=9] atlas = ExtResource( 7 ) -region = Rect2( 96, 0, 24, 70 ) +region = Rect2( 24, 0, 24, 70 ) [sub_resource type="AtlasTexture" id=10] -atlas = ExtResource( 4 ) -region = Rect2( 0, 0, 24, 70 ) +atlas = ExtResource( 7 ) +region = Rect2( 48, 0, 24, 70 ) [sub_resource type="AtlasTexture" id=11] -atlas = ExtResource( 4 ) -region = Rect2( 144, 0, 24, 70 ) +atlas = ExtResource( 7 ) +region = Rect2( 72, 0, 24, 70 ) [sub_resource type="AtlasTexture" id=12] -atlas = ExtResource( 4 ) -region = Rect2( 168, 0, 24, 70 ) +atlas = ExtResource( 7 ) +region = Rect2( 96, 0, 24, 70 ) [sub_resource type="AtlasTexture" id=13] atlas = ExtResource( 4 ) -region = Rect2( 192, 0, 24, 70 ) - -[sub_resource type="AtlasTexture" id=14] -atlas = ExtResource( 6 ) region = Rect2( 0, 0, 24, 70 ) +[sub_resource type="AtlasTexture" id=14] +atlas = ExtResource( 4 ) +region = Rect2( 144, 0, 24, 70 ) + [sub_resource type="AtlasTexture" id=15] -atlas = ExtResource( 6 ) -region = Rect2( 24, 0, 24, 70 ) +atlas = ExtResource( 4 ) +region = Rect2( 168, 0, 24, 70 ) [sub_resource type="AtlasTexture" id=16] atlas = ExtResource( 4 ) -region = Rect2( 48, 0, 24, 70 ) +region = Rect2( 192, 0, 24, 70 ) [sub_resource type="AtlasTexture" id=17] +atlas = ExtResource( 6 ) +region = Rect2( 0, 0, 24, 70 ) + +[sub_resource type="AtlasTexture" id=18] +atlas = ExtResource( 6 ) +region = Rect2( 24, 0, 24, 70 ) + +[sub_resource type="AtlasTexture" id=19] +atlas = ExtResource( 4 ) +region = Rect2( 48, 0, 24, 70 ) + +[sub_resource type="AtlasTexture" id=20] atlas = ExtResource( 4 ) region = Rect2( 96, 0, 24, 70 ) -[sub_resource type="AtlasTexture" id=18] +[sub_resource type="AtlasTexture" id=21] atlas = ExtResource( 2 ) region = Rect2( 0, 0, 24, 70 ) -[sub_resource type="AtlasTexture" id=19] +[sub_resource type="AtlasTexture" id=22] atlas = ExtResource( 2 ) region = Rect2( 24, 0, 24, 70 ) -[sub_resource type="AtlasTexture" id=20] +[sub_resource type="AtlasTexture" id=23] atlas = ExtResource( 2 ) region = Rect2( 48, 0, 24, 70 ) -[sub_resource type="AtlasTexture" id=21] +[sub_resource type="AtlasTexture" id=24] atlas = ExtResource( 4 ) region = Rect2( 216, 0, 24, 70 ) -[sub_resource type="AtlasTexture" id=22] +[sub_resource type="AtlasTexture" id=25] atlas = ExtResource( 4 ) region = Rect2( 240, 0, 24, 70 ) -[sub_resource type="AtlasTexture" id=23] +[sub_resource type="AtlasTexture" id=26] atlas = ExtResource( 4 ) region = Rect2( 264, 0, 24, 70 ) -[sub_resource type="AtlasTexture" id=24] +[sub_resource type="AtlasTexture" id=27] atlas = ExtResource( 4 ) region = Rect2( 288, 0, 24, 70 ) -[sub_resource type="AtlasTexture" id=25] +[sub_resource type="AtlasTexture" id=28] atlas = ExtResource( 4 ) region = Rect2( 312, 0, 24, 70 ) -[sub_resource type="AtlasTexture" id=26] +[sub_resource type="AtlasTexture" id=29] atlas = ExtResource( 4 ) region = Rect2( 24, 0, 24, 70 ) -[sub_resource type="AtlasTexture" id=27] -atlas = ExtResource( 4 ) -region = Rect2( 336, 0, 24, 70 ) - -[sub_resource type="AtlasTexture" id=28] -atlas = ExtResource( 4 ) -region = Rect2( 360, 0, 24, 70 ) - -[sub_resource type="AtlasTexture" id=29] -atlas = ExtResource( 4 ) -region = Rect2( 384, 0, 24, 70 ) - [sub_resource type="AtlasTexture" id=30] atlas = ExtResource( 4 ) -region = Rect2( 120, 0, 24, 70 ) +region = Rect2( 72, 0, 24, 70 ) [sub_resource type="SpriteFrames" id=31] animations = [ { -"frames": [ SubResource( 1 ) ], -"loop": true, -"name": "idle_up", -"speed": 5.0 -}, { -"frames": [ SubResource( 2 ), SubResource( 3 ), SubResource( 4 ) ], -"loop": true, -"name": "speak_down_right", -"speed": 6.0 -}, { -"frames": [ SubResource( 5 ), SubResource( 6 ), SubResource( 7 ), SubResource( 8 ), SubResource( 9 ) ], -"loop": true, -"name": "speak_right", -"speed": 5.0 -}, { -"frames": [ SubResource( 10 ) ], -"loop": true, -"name": "idle_down", -"speed": 5.0 -}, { -"frames": [ SubResource( 11 ), SubResource( 12 ), SubResource( 13 ), SubResource( 12 ) ], -"loop": true, -"name": "walk_down", -"speed": 6.0 -}, { -"frames": [ SubResource( 14 ), SubResource( 15 ), SubResource( 14 ), SubResource( 15 ), SubResource( 15 ) ], -"loop": true, -"name": "speak_up", -"speed": 3.0 -}, { -"frames": [ SubResource( 16 ) ], -"loop": true, -"name": "idle_right", -"speed": 5.0 -}, { -"frames": [ SubResource( 17 ) ], -"loop": true, -"name": "idle_left", -"speed": 5.0 -}, { -"frames": [ SubResource( 18 ), SubResource( 19 ), SubResource( 20 ), SubResource( 19 ), SubResource( 20 ) ], -"loop": true, -"name": "speak_down", -"speed": 6.0 -}, { -"frames": [ SubResource( 21 ), SubResource( 22 ), SubResource( 23 ), SubResource( 24 ), SubResource( 25 ) ], -"loop": true, -"name": "walk_right", -"speed": 6.0 -}, { -"frames": [ SubResource( 26 ) ], -"loop": true, -"name": "idle_down_right", -"speed": 5.0 -}, { -"frames": [ SubResource( 27 ), SubResource( 28 ), SubResource( 29 ), SubResource( 28 ) ], +"frames": [ SubResource( 1 ), SubResource( 2 ), SubResource( 3 ), SubResource( 2 ) ], "loop": true, "name": "walk_up", "speed": 6.0 }, { -"frames": [ SubResource( 30 ) ], +"frames": [ SubResource( 4 ) ], "loop": true, "name": "idle_down_left", "speed": 5.0 +}, { +"frames": [ SubResource( 5 ), SubResource( 6 ), SubResource( 7 ) ], +"loop": true, +"name": "speak_down_right", +"speed": 6.0 +}, { +"frames": [ SubResource( 8 ), SubResource( 9 ), SubResource( 10 ), SubResource( 11 ), SubResource( 12 ) ], +"loop": true, +"name": "speak_right", +"speed": 5.0 +}, { +"frames": [ SubResource( 13 ) ], +"loop": true, +"name": "idle_down", +"speed": 5.0 +}, { +"frames": [ SubResource( 14 ), SubResource( 15 ), SubResource( 16 ), SubResource( 15 ) ], +"loop": true, +"name": "walk_down", +"speed": 6.0 +}, { +"frames": [ SubResource( 17 ), SubResource( 18 ), SubResource( 17 ), SubResource( 18 ), SubResource( 18 ) ], +"loop": true, +"name": "speak_up", +"speed": 3.0 +}, { +"frames": [ SubResource( 19 ) ], +"loop": true, +"name": "idle_right", +"speed": 5.0 +}, { +"frames": [ SubResource( 20 ) ], +"loop": true, +"name": "idle_left", +"speed": 5.0 +}, { +"frames": [ SubResource( 21 ), SubResource( 22 ), SubResource( 23 ), SubResource( 22 ), SubResource( 23 ) ], +"loop": true, +"name": "speak_down", +"speed": 6.0 +}, { +"frames": [ SubResource( 24 ), SubResource( 25 ), SubResource( 26 ), SubResource( 27 ), SubResource( 28 ) ], +"loop": true, +"name": "walk_right", +"speed": 6.0 +}, { +"frames": [ SubResource( 29 ) ], +"loop": true, +"name": "idle_down_right", +"speed": 5.0 +}, { +"frames": [ SubResource( 30 ) ], +"loop": true, +"name": "idle_up", +"speed": 5.0 } ] [sub_resource type="CapsuleShape2D" id=32] diff --git a/game/rooms/room1/esc/wall_item.esc b/game/rooms/room1/esc/wall_item.esc index 8b409aba..4b84c863 100755 --- a/game/rooms/room1/esc/wall_item.esc +++ b/game/rooms/room1/esc/wall_item.esc @@ -1,13 +1,13 @@ :look > [! dialog_advance] - say player "I don't know what that stuff is." + say player ROOM1_look_wall_item_1:"I don't know what that stuff is." set_global dialog_advance 1 stop > [eq dialog_advance 1] - say player "I REALLY don't know what that stuff is." + say player ROOM1_look_wall_item_2:"I REALLY don't know what that stuff is." set_global dialog_advance 2 stop > [eq dialog_advance 2] - say player "No, SERIOUSLY, I have no idea what that is!" - say player "Please stop asking me that!" + say player ROOM1_look_wall_item_3:"No, SERIOUSLY, I have no idea what that is!" + say player ROOM1_look_wall_item_4:"Please stop asking me that!" stop diff --git a/game/rooms/room1/esc/wall_item_popupdialog.esc b/game/rooms/room1/esc/wall_item_popupdialog.esc index 52674d0e..36bcbde0 100755 --- a/game/rooms/room1/esc/wall_item_popupdialog.esc +++ b/game/rooms/room1/esc/wall_item_popupdialog.esc @@ -1,13 +1,13 @@ :look > [! dialog_popup_advance] - say player "I don't know what that stuff is." dialog_box_inset + say player ROOM1_look_wall_item_1"I don't know what that stuff is." dialog_box_inset set_global dialog_popup_advance 1 stop > [eq dialog_popup_advance 1] - say player "I REALLY don't know what that stuff is." dialog_box_inset + say player ROOM1_look_wall_item_2:"I REALLY don't know what that stuff is." dialog_box_inset set_global dialog_popup_advance 2 stop > [eq dialog_popup_advance 2] - say player "No, SERIOUSLY, I have no idea what that is!" dialog_box_inset - say player "Please stop asking me that!" dialog_box_inset + say player ROOM1_look_wall_item_3:"No, SERIOUSLY, I have no idea what that is!" dialog_box_inset + say player ROOM1_look_wall_item_4:"Please stop asking me that!" dialog_box_inset stop diff --git a/game/translations/game.csv b/game/translations/game.csv new file mode 100644 index 00000000..3e76593a --- /dev/null +++ b/game/translations/game.csv @@ -0,0 +1,5 @@ +keys,en,fr +ROOM1_look_wall_item_1,"I don't know what that stuff is.","Je ne sais pas ce que c'est." +ROOM1_look_wall_item_2,"I REALLY don't know what that stuff is.","Je ne sais VRAIMENT pas ce que c'est." +ROOM1_look_wall_item_3,"No, SERIOUSLY, I have no idea what that is!","Non, SÉRIEUSEMENT, je n'ai aucune idée de ce que c'est !" +ROOM1_look_wall_item_4,"Please stop asking me that!","Arrêtez de me demander !" diff --git a/game/translations/game.en.translation b/game/translations/game.en.translation new file mode 100644 index 0000000000000000000000000000000000000000..9c947db6c3a3ad626d5c316b5bdbff1f402da48a GIT binary patch literal 549 zcmbV~-%0{O6vmI4W@bSY{eeIwD=#Dqx(JCt!e~iK)*`&x#${01bvJfa2z-E`X9&9L z5u&^9dyDF#Zt4|g`^Hx2!mAGa_|Exe&Y9g|^tygPVML)rW|7y9m}sAQ%n>&8JFYX_ z_is(0a|w7{xING0hV7cnHhk9*CU-c^{9SWcm(wJiE*FBexS$CXgAPtpNZa^2!)HyK z(=^Iv&$PH78tNqBdmX3s+a^q}bLGP%ihv{-Oez(N+muokV&p%o3mFF)5CZ`MLh&$9 zL6x5Y3qZ|MynfvF=b%|o2tDP$!9Rv(Kpu<%<-fzxI&qBS~r$#PmwJT5XJ6Cmj#u2gMt9SpWb4 literal 0 HcmV?d00001 diff --git a/game/translations/game.fr.translation b/game/translations/game.fr.translation new file mode 100644 index 0000000000000000000000000000000000000000..aceaf3f485bd76d3df1cd4c1a5eba26f7a29739e GIT binary patch literal 588 zcmbV~%SyvQ6oyYP+SWwDji@NCSlVTA(}g!E60o90((1OPVeG{;(M-BhH?F+BMi&Y` zMIXaWb)hStK$!SXnu3BW2R{CDzR8(fh+frqC|oh*m|4_^y9RI7T*Ky;;k6xmeBHk@ ziOG53GVb(TlhrN9G_1Pk)VaxQMl(P6Y@^F41=D4m8%@S3fhL$>q@Zl!>FS=*uoz9F zZS>4j=7mDuiF9)^2NTLXs0>Me^g~A%CQepl1&T(wWk1`SFiAz#tLgizj zq)8xaHS`(e9FRv#hVOS5vM+*-&`JLa-#}(S4n%?UZ}9s_IkOBt&?AC=5h?GN2G>B8 zRMn3Rp0t;~V)diXTbF)hg+wKt_0{U&RxfKuRqa5l)Uu+Zq(nZRT*xgAl~2q(DxI<- q&U0TPUtA5Q_LTeWxVQOmL!pk@g2c%BiDSJ~mM2~P-Y3%WAAJLs6@do; literal 0 HcmV?d00001 diff --git a/game/translations/main_menu.csv b/game/translations/main_menu.csv new file mode 100644 index 00000000..de05ab5b --- /dev/null +++ b/game/translations/main_menu.csv @@ -0,0 +1,7 @@ +keys,en,fr +NEW_GAME,New game,Nouvelle partie +LOAD_GAME,Load game,Charger +OPTIONS,Options,Options +QUIT,Quit,Quitter +OPTIONS_BACK,Back,Retour +OPTIONS_LANGUAGE,Language,Langue diff --git a/game/translations/main_menu.en.translation b/game/translations/main_menu.en.translation new file mode 100644 index 0000000000000000000000000000000000000000..c1485e998d0486a8e5c3111df3e5807c0e58ed2a GIT binary patch literal 569 zcmbV~&q~8U5XPtejar2Yf_O0~cu=Hx@FIHAOAn=L%)wiju1gx4ZX~-w@a)wG@d3R1 z20nl%U&3SSH*F#!Jvs1WX1?9Y?o2kg2`;F#S@?c(i@bxm5{I9KJO?nl5 z9^MB#K+Y2O`1oCP=}@Tj{oBUD))YMqz1jwJsS&FEpRK16(jR@MTzmZRUUv~otHRk! z=S$`*LzL;r{kOp(IA_(THk-J>oN0J@`usMe>mqT~(GPwsKcb!S-6X>P0FUMyjd*dl literal 0 HcmV?d00001 diff --git a/game/translations/main_menu.fr.translation b/game/translations/main_menu.fr.translation new file mode 100644 index 0000000000000000000000000000000000000000..658f077fd4b8be2042ac4bc7aa3e4892d28bf2e0 GIT binary patch literal 584 zcmbV~ze)o^5XL9*-)W*4L9h@E7D2R#7HK3_X@W?iX9~gM*c{{C;pI+tH;uKey|3T{ z2$sHq4`Ag>SYG@l-ie5n13zZw+ufO+y>rjq4&^ojUr^y*Tw%?Ag>aJ||2oKi3j9Vp@bUVq;Xmh8B=aPcT&whPa())i7pSMmik( z*KBh^IvJ~@B=|aJd>!3bh(sl@1g4b^o6Q5NiUj*}=2itlp`lu@GG9TV?_SjQHla)HRZ!@Ifm2$~_sg(_{@%TtApNdW z&ev|=oTnYcvR62I?0v{{OFzlw{##%lxNPxx=tL#Km?`VG?_V;?&Kk{UxZY*@P-*v% P%Ncb-r32RF;vf11?7MZ{ literal 0 HcmV?d00001 diff --git a/game/ui/commons/main_menu/flags/en_EN.png b/game/ui/commons/main_menu/flags/en_EN.png new file mode 100644 index 0000000000000000000000000000000000000000..bf01becd59da9528d0f6c32ca3f7b9f3d20a6380 GIT binary patch literal 9746 zcmds7d011|w%;cSNg$XI2S9{GL~XAOL0b@z$qBSn3l11XAWp3n6!2mMr7?nt1CnYb zXa}vewzmZ()Ul#X03ofQI6^LU0BOW3)_^h^^sT*5;C8t8-TS`#z4yKM{)p_o*IK_d z?S0N(>$p8~cK9G0CmV#&pqVqK%|VExM2M;5GGV1TVed}(!+K}(tjP$KsCecjRxlsA zY{r~f2yGaPka7z`y|AQwfY3T`gdWNe3fPB`L-NOGqXL02J@UDu*| z>m%R3Hfi4D;%|>!FHZ+RYH39HG{)P!jO8%lq|Tf*ozrY>$8!?aS5|zD(CCXZr%j%h z*6{fD4|^8tOQuJ0zGuv^K?{%Ee;G1=>}w~7N@MQ?iiF>FhIWR1=9<*K@WM}DJ*?0( zpEv1q-n#bqcJJVjq&r79DI_x-o?WliE@o8Zgm|ut?Kt$JP0UpzTUpb@AD-w{9mOx1 zWrLNJhxv={zE^Yu6fG5|VaX6r>#umpld&QYTVwj@Ue_jMSst#~#PQA?gP79pS*GWk zkeig@t<1jr{ONNSrO<^ftc8k?1A-1pBHWHbHKnFhtcLZ)&Nr2_h-98P#O3z#vF$RmSd~l=*zML7-@Iq zlU)NaKTa!p7Gj6Fv*XQo2H4+wDL!)cMHx2L!+hD;6$X(Y79{cd?LTcLWASu2m_IW5 zwXCKbF%-z0LjB&vK%5~*5P#1Bt@eL_GvDjS^H#L=13GHE`w?^F2Oz5?3Ja!$JHPEUP+Z%D%2FU^j0KJu(cl(X+HY}hNdBDuSJmBdzKniRgjT^qg` z@1(OF?F$E095QGRj>PtuAD?E*LI%^SJkj$*^ln&98C2PrzZ@c?@Wy_S2zMTK#k&>< zM(}SP6*YSq}{s`#CF1|0J$;Kz$6(9hG3J+BGl>T2179Fhbv%|QyD&0 zZ4udEm4S=JbK^&yK&_l`7=m5bKDCmC1Z2VxH5ahJuqGi4nU30_ScS@>B9x~KMl@4> z?`hQPHj-B1xd{j?3*jLUmh}@9K;T*k4L~^DPk0Xqwid!gAT;+AGJs%bA)LiJTrD~_ z0%53y@U?bWe)=m70CV>8~>-U`oD#i42r*{J44E#`m%71`n4Cu@3E zctK9^MoGwjTDUmamsT*U#o^nGWRm=1pUcH5Jr67jK90ZF-eghWr!6-&lgFgOGg+~@ znn||5dC^^SuR6R@$b}71Y`i2%O6Q6)@t#|B+x$?iZyZkum6s%I((OcB2;oO_gF3t^ ziV%)mlB`a56m2DhznU+q^-U>+kbOy#m_AapjS%Y1XVu~Nb`!#iOOk~2S4BGr;ima( zwf3*U-Lbz()q1HFI5rWkv$;$Ll(ffo@ zYu=y^|4C>~{HT$A;RAK_(_uBmvh)m*7&G!#QcrnO(Wjhk zaC8j43$^Cn{O||DQCKWPEzxEeT{mnaVh3(k7ssXNirlc+&Uf0{cPR+yNl|gR`hG1XvM`+g?Q#O2zF+4xc{)nmJJlxEH=fKG|hwG09&QT48 z6R%luJn=Z{j0~Dbw*KnYuk-Z}O9{CMxBT}JRbS1I)Blva~pn4#CTQvjF1WbIu&ebOE_6o z6rElpdX4zAq6D>0-gpHchNCyPogAlXI2;D@iC=jPQwAjpMi5t=O6C|-Hr^tx?9FCq zIKOPhPqdS>-RiyyT&r>>o_zBr>bw$^3U-WJctlt@PgJVU!&Z%2I2vsA|(EJcLyk zO9GLc%cp=PAo`sP5BDxhw#~ycKYNajUp^TNR5j#EKUzC9uRIE7>Z)tVu*A<6thgxM zFLa-qSCQh!hgrGQ5lyn=Fd#Gzk0#uUH+5MVcKZzm$~RK=F5!>EWjXgEVdoYuosU|j z&ehxXjK(D>X6R0ajMFRwLc-Env+sAYlrFmtQ;^^7V<-(kzvIGJ>QUnKBCgU!)r<+- zto#q&{WFq>^5Gbr64fzvdEW~^Svw7hkjAKSM)DbaI25OxqLIT3Fkdqm$rtA(v@|nJhfoZcN69$% zb#=ksNNlZHr{N>{^1Q?jH>PPbieXnHS1lF-_nWYbTO% zS{gh3{E*m6vs|hzF7n zP**@G5>uK->-&&=OJ4G6H) zj%EC{wOK4v9V(UA^JT0_7h_d}bt9Oq*J1;d!dCCDpf^zxPvgGc2!hSGdi?DIJ)G>GvFTT)F8rzDO5AwK}z7OMCwm zE@;d~^6lML-kB~hKCa-HCZN(OX3&tg=~^2zO{k0=set=B(>np7b1dC4ffj5L?(=1! zI3z2`iAU9TH6s}4G_&=gi6?Q}@1iRxLhRzd}dYKv0u%*2-&>2crkPS*A z9c_@FlFtX}-0TvR>@0J@%Q8n>ygUmpZ@r3_3%0}~UfEWrE=3tD1S41@1ejwoaM&e= zB4>`FqtQV(MI)pza~5G{Vdg=Ec?f16PnaVy^GU)SMVK=QvlV8xR#2_4glbaKQL>ZF zAu}GT0rvfGH&doqBzNf^rW7VFKOi2C?t=B3F>&ktBZnxH5tZ7QZFF2;Ux{jvQo=S& zZ(IP;EK9%Ch`Q$}W0?x5G)8<OYXi<2MrpgtmPOA zt0c;7*)l5&V;Nz*MB;Y>!QB~qyBGzFWyOvdahC(!tx2?ObuG-+4%m{A3MQmN;(+Oc zhAW%V#*;+82FHJACC1NUH~Q(~+)0LfAVZyVVE4KjG?X7-vtS2KOVuDq%lSyyHeBCi zl*epcN1%5T=ph8!1w-cp^g&cs#mDS3h+fEEW!+{mMW9`}_&hyl~IxN~UHs#AY-^hWse$p3(S+BFGQy z+Jk?{VQp%kTe@jqq=6yEyzDS)b6g*<^L(xfPsI{Iswfz=7iooBUroe;UcF ze>~Z+_kVS;A>Y3_*i7jkk%8ye2fH8g|N5inS{L==bC=$qTjFPDC^o&Qp3`9NNV=_}#Vu_YbsNi#NxkjoYDeZ%cUQ1k3egnN5~=ljT;tyZ|?R zv|Ep1?)_x>C&EpZ*<|?;S-wTMcM$HQnENZTe1mY4Wj0wZAZS50EV!ynhkip$Yv7ba9)_xd9ocyizx|!Q7;a`5BEmKBE?7YvO~5ERZAUtnEPws z9&R(0!XVK7@Nio)nqW`yR<0On%fc#`fXdv8XDKLo2wa`Zkb23!AX~JCX*lBQsGDH( zK{%z`g-U%f{*qrtqBFx}4mqH}@l6*dnh5uEtRZv%RMaR}#)>kbh3Mv;!b0Z|T3C2>;4Ko+ z?avW39zpWm&;d}mJm0&FV_J$z-&kM`v}eO}_>D#+-|sa9JJeUV#n3Jp6#Jix$PYgW#vNK`W7DkY?w) z5)fP#+(8PeV|6#NU{B3dwy7PJE-v7K;JqO#Qi*Mdm4KkKc9IMwQ5v2c``aA!I1QI@ z#|*=uv&io%s<1NoqSECB*r|pO=-ThY*w;W%R_iZCNmiPj@~c>5kWq?@#$yfhv0z8; zR4bDll_nMp0>NuT@<_FLHg+NihIWNSq9pKfeG}GrtIrRYsmE^RW5GW^sbHB-q0-a> zJ_ug?gsyKJVkd#%$gZFnC<%OA--b2b>Ttw`@v%EMv0zH=RF+>FQhG(k-79jKmDOG*9Cv6<07#pQ#C4aSQD$|rg_X@)Ae=ql&fW%z7ks#wI_A!~J-E@~hZ#)wn;)TRE zbPGbtPk3CxFqNPfn+Qr4Zu|>e{1TRUjvc(XdtD^oMmLo@HUJU&e zc#w@L8I9zx=dqz_GPZ6xt1LU7(~KK3JC{b`P7M#*C-aLgax-~ae&r$D0;>E5Sz0@1 zr3FG(0W)PJp9Rw1_G}%rgMcNv>SC^R|5`_W#S$!ldqz=yHqdTqkbWdgn9DDp?8k-K zJ*hLA#MUFQ$ffYLrRy%b`mu8GOjOO3g*S4+h)2ub3oCldA3kx$g8*aUNVL%`3IUU{ zi>_=NHcoK2LNDoWd~HyPz>2WCl^2}yIZw)(9bh)Y-dYE3Gd_ThDSUlt{>7Y$WDR38a#Ua!RojGXVWgfk;Eq|Qg#|kLdEbY5haHOEL zJLyysZG;{lGys&I>dFuK8hz_{=-+WqEt(o#7`R+8Tnm9UezW)ks&iY=Qs_jM)g@fn zkk4tQh*dKC#Bn<4F@hm(h8=@qO4^fy7DN94cOqx842L^bf+eh&YDXmT#JAelTBf?;2DS(jZ?lVI(mxfwN?duT=?m~>!^gyz zTc&(>!SxF0ZcvFod)#IzgWiC%gPl1pPf-TV5Rggb@idr(sf3tv^Y{jsOcRia@puMI zrl{;NrQ^5)CZPf{u{xoINw7+QDZ@@=!X!`t6ZM!ATVNcZ;=|bI#8w#l3GjIOiES|U zRSkmi{1ZE1{JH>-SDeU&@dTAEjMtsWgR!>&#%xXYiT7dRrGk%7(4;%D2PPf@GC6W$ zFHFYa*r8MEx(R#@2U;AE3j6CztEkR>&|ZPyty*-+PbV6TgMwmaR}beH+{z&iu)W?5 zf`T;^=aEXB?77lers6>A;OzWm*e+&k6ErgL2|4*WC~+c6!ZbcWC?f>#OwUyyVMQc_ ziSq&KRRWbOt9Ak%aA6>MtOw;>qTJ0;en+D*rldK;`4lFuc~kQn?C^4ZI)yv{lBe<^_0fc&=6KuGUu-!+B%H7|r7f z1iPT!0K1udvl$MRJw7B)A1w~{rWH(SaX6c?m{yQ~xj3~)V^M%V3Po8I1ZeAwSO4#0r~2LTL+-v{L@FV!6Rt}nJo_IG6F3g)E1}pBwG~V&stYa zvFHmLC_O$opOT=v2o}Zsa#0T5Z_B6EAf0toL+f!L9QS>;{_7onB?`wCpC1TVzJj|Qjcy63AhXfi}BYJk@Pyy?sZya^;T8|E9UnexE z;8ePGzaKs13-j~sBz0=7Rf~IwEsi~}EQ=zZx~A>%HFC;`*0fi3IQ|~2x8Sq49X%AV z9BGZ)dxt8p{Zg(7?p6e1?yzyVC&$*<1#)GyiLVS<++9h7ar?nuIb*_oHr*5xQql-v z&}5_eh0YurU&hi~400?>`EOt|@TPcYHY0K}mBQRcKVlu(7<}Rm9A0i7GZ!0*!u~F+ ztDl8aI>2Z@0GU02`0udYEnWiue}ZH<5N-^Xw6h#6k-t0;UB9=I{~2RG*+{^*U;qzl zDcD5-hns+0jP}2f2{!P$C)&OpI1|^}SeyFV*RTA%B(&>%cO61#OzL!L>hdM2D*~3S zT>*d41n=?wp5FeR<9+9iA0IHmH(>lkcW>_iZ|`#DW4qr7tWH|~?%V1ASm5~W`9&ar OW=@|y?bsAq=6?WHUWC8^ literal 0 HcmV?d00001 diff --git a/game/ui/commons/main_menu/flags/en_EN_small.png b/game/ui/commons/main_menu/flags/en_EN_small.png new file mode 100644 index 0000000000000000000000000000000000000000..058928483031b52dc94964dab6e88f23485cb99e GIT binary patch literal 8760 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 literal 0 HcmV?d00001 diff --git a/game/ui/commons/main_menu/flags/fr_FR_small.png b/game/ui/commons/main_menu/flags/fr_FR_small.png new file mode 100644 index 0000000000000000000000000000000000000000..fcaf2cc1cefcf6ac8dcb5640d0d328bb10b6338e GIT binary patch literal 1840 zcmV-02haG4P) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O1b@lItcA{Ld+J1ZH3uI1Zmxxj~Mf24Szg_SS?_vJJ!GXN-qA{cpEDoQ1;*3VL*OAtltY7DK=&o`7)Ng#*HyB+G zwc8KmJwBsfz8<*6pz_>r;=aRiPek{L*WqU5*=~4cYM!q*2t%1L8R3yX7W321|5D5t zbwWfFOi)i3!8~=1G$wQNj8Pzj#^y~Hz_+sLw-3UCRKcJum?K^=+j31&gub-p7S9gj z1ogFq$Y|RW03yT|Bts4i*Z}oYAgjzu1RNs>%E+9Z=K=;ugd37%@32~oa^x8s&nT_2 zEF5@t!<#^axZo7rB$q*!_X7Q>kI+ySCtgH?s6-=4a&W;12_a~hCYRNzSJ9xVQIqEA zqK^_o)EHxmIdO9EKuIBKiYcX>*<=LDm@8v^Mo;15iZ4<^(Gp84xk5hGSE-?DjWyNW zxVZ+KXrXC~Ew$XqbT~!#U3%!+V^2K~Xl=ORhm0_E#F0k6v$k1%DgS{r+N|+nYL3%8 zYv?tqw<&1aiA>JG7<&TaIvIeVd2(hWdC!x%$(c=zMInqNWpZO0O~yc>@5D0b&fOPt zAMs`+e#9I9#+;edonX#@x>w%bu-4{2R~KW~Dx8>Fht)S&GDnlS^lrzr99-tP!M(3X zX4kFLQDbZhHtpmjxiS32$#j6(r2+ghy7!^9Iiy&;|G={-LnsfJn(8RkkA_qkjti?2 z@k!u};Q^P)5RO=&*~?LlV9XsPU-#+Jl@bl>q`WQLe` zp_yNm_My{}EfOYR=diGCE^x*GI$wTZ{OHJYs93n=`hCC342rtTSh9tvPeX)*Qarj@X(P zbH>&h7VQyRn;Ya2TLb-PY;Awl{(oB=SZhaYZDDl6*4UXdwx+|Jv9-bGjI9Bq4{Z&A z<3HKIQOY*yIlhgg0004lX+uL$Nkc;*aB^>EX>4Tx0C=2zkv&MmKpe$izeOqzb`WvM zP@ODD6>-!m6rn<>6dwn9(V5mf3wC^GdK>Ynq_3uDIs525hAY$B8(7{2usY=XGJjs&+&B+A7Aeh zJj?sspQBGHnhfv>#4}7cEaG+IsZC4gyiXis6-gmJCmu8Cg2azpmtB72Tz1&cGh;?B zJ4YNN7Rp^LcQLCND)A(7Tv0X3_vc+!IB#)QYjxJXCx2nIs4XvXo#rsoSimAg2#`@n z6*X8$(5jJQB1`)z5C4$k7s(})s|rSrd2B$1fN#kN02fXFV; zYS{Mov2C|bfWR|wrFHxpOOVCP_p=R7l5TV1NP9P#9PR0}TwLvZJ!2vZJ!2vZJ!2 evZJztSQY@CO3Wkq*x* void: + pass + +func _on_language_input(event : InputEvent, language : String): + if event.is_pressed(): + TranslationServer.set_locale(language) diff --git a/game/ui/commons/main_menu/options.tscn b/game/ui/commons/main_menu/options.tscn new file mode 100644 index 00000000..b6cd2221 --- /dev/null +++ b/game/ui/commons/main_menu/options.tscn @@ -0,0 +1,75 @@ +[gd_scene load_steps=5 format=2] + +[ext_resource path="res://game/ui/commons/fonts/caslonantique.tres" type="DynamicFont" id=1] +[ext_resource path="res://game/ui/commons/main_menu/flags/en_EN_small.png" type="Texture" id=2] +[ext_resource path="res://game/ui/commons/main_menu/flags/fr_FR_small.png" type="Texture" id=3] +[ext_resource path="res://game/ui/commons/main_menu/options.gd" type="Script" id=4] + +[node name="options" type="Control"] +anchor_right = 1.0 +anchor_bottom = 1.0 +script = ExtResource( 4 ) +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="back" type="Button" parent="."] +margin_left = 130.0 +margin_top = 329.0 +margin_right = 304.0 +margin_bottom = 383.0 +custom_fonts/font = ExtResource( 1 ) +text = "OPTIONS_BACK" +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="options_grid" type="GridContainer" parent="."] +anchor_left = 0.217 +anchor_top = 0.427 +anchor_right = 0.803 +anchor_bottom = 0.574 +margin_left = 0.23999 +margin_top = -0.300018 +margin_right = 17.1599 +margin_bottom = 0.400024 +custom_constants/hseparation = 167 +columns = 2 +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="options_language" type="Label" parent="options_grid"] +margin_top = 56.0 +margin_right = 220.0 +margin_bottom = 77.0 +custom_fonts/font = ExtResource( 1 ) +text = "OPTIONS_LANGUAGE" + +[node name="flags" type="HBoxContainer" parent="options_grid"] +margin_left = 387.0 +margin_right = 767.0 +margin_bottom = 133.0 +size_flags_vertical = 3 +custom_constants/separation = 30 +alignment = 1 + +[node name="fr_FR" type="TextureRect" parent="options_grid/flags"] +margin_right = 150.0 +margin_bottom = 133.0 +texture = ExtResource( 3 ) +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="en_EN" type="TextureRect" parent="options_grid/flags"] +margin_left = 180.0 +margin_right = 380.0 +margin_bottom = 133.0 +texture = ExtResource( 2 ) +__meta__ = { +"_edit_use_anchors_": false +} + +[connection signal="gui_input" from="options_grid/flags/fr_FR" to="." method="_on_language_input" binds= [ "fr_FR" ]] +[connection signal="gui_input" from="options_grid/flags/en_EN" to="." method="_on_language_input" binds= [ "en_EN" ]] diff --git a/project.godot b/project.godot index b5e9b264..117be014 100644 --- a/project.godot +++ b/project.godot @@ -157,6 +157,10 @@ switch_action_verb={ ] } +[locale] + +translations=PoolStringArray( "res://game/translations/game.csv", "res://game/translations/main_menu.csv", "res://game/translations/game.en.translation", "res://game/translations/game.fr.translation", "res://game/translations/main_menu.en.translation", "res://game/translations/main_menu.fr.translation" ) + [rendering] environment/default_environment="res://default_env.tres"