diff --git a/common/scene_manager/scripts/scenes/region_scene.gd b/common/scene_manager/scripts/scenes/region_scene.gd index 1f76975..1df3ac7 100644 --- a/common/scene_manager/scripts/scenes/region_scene.gd +++ b/common/scene_manager/scripts/scenes/region_scene.gd @@ -22,7 +22,7 @@ func is_needed_to_be_announced() -> bool: func get_scene_title() -> String: if region_data: - return region_data.region_name + return region_data.get_region_name() return "" func _on_generated(generated_scene : Node): diff --git a/project.godot b/project.godot index 12cec43..67f3a58 100644 --- a/project.godot +++ b/project.godot @@ -264,7 +264,7 @@ zoom_out={ [internationalization] locale/translation_remaps={} -locale/translations=PackedStringArray("res://translation/game/gui.en.translation", "res://translation/game/gui.fr.translation", "res://translation/dialogs/dialogic_character_translations.en.translation", "res://translation/dialogs/dialogic_demeter_ship_failed_translation.en.translation", "res://translation/dialogs/dialogic_demeter_ship_failed_translation.fr.translation", "res://translation/dialogs/dialogic_1_waking_up_translation.en.translation", "res://translation/dialogs/dialogic_1_waking_up_translation.fr.translation", "res://translation/dialogs/dialogic_2_demeter_intro_translation.en.translation", "res://translation/dialogs/dialogic_2_demeter_intro_translation.fr.translation", "res://translation/dialogs/dialogic_3_demeter_ship_presentation_translation.en.translation", "res://translation/dialogs/dialogic_3_demeter_ship_presentation_translation.fr.translation", "res://translation/dialogs/dialogic_4_cave_translation.en.translation", "res://translation/dialogs/dialogic_4_cave_translation.fr.translation", "res://translation/dialogs/dialogic_5_mercury_arrival_translation.en.translation", "res://translation/dialogs/dialogic_5_mercury_arrival_translation.fr.translation", "res://translation/dialogs/dialogic_6_mercury_departure_translation.en.translation", "res://translation/dialogs/dialogic_6_mercury_departure_translation.fr.translation", "res://translation/dialogs/dialogic_7_venus_arrival_translation.en.translation", "res://translation/dialogs/dialogic_7_venus_arrival_translation.fr.translation", "res://translation/dialogs/dialogic_8_venus_departure_translation.en.translation", "res://translation/dialogs/dialogic_8_venus_departure_translation.fr.translation", "res://translation/dialogs/dialogic_9_borea_translation.en.translation", "res://translation/dialogs/dialogic_cave_translation.en.translation", "res://translation/dialogs/dialogic_cave_translation.fr.translation", "res://translation/dialogs/dialogic_character_translations.fr.translation", "res://translation/dialogs/dialogic_6_vending_machine_presentation_translation.en.translation", "res://translation/dialogs/dialogic_6_vending_machine_presentation_translation.fr.translation", "res://translation/dialogs/dialogic_1_aqua_travel_phone_call_translation.en.translation", "res://translation/dialogs/dialogic_1_astra_travel_phone_call_translation.en.translation", "res://translation/dialogs/dialogic_1_estia_travel_phone_call_translation.en.translation", "res://translation/dialogs/dialogic_1_subterra_travel_phone_call_translation.en.translation", "res://translation/dialogs/dialogic_2_aqua_arrival_translation.en.translation", "res://translation/dialogs/dialogic_2_astra_top_translation.en.translation", "res://translation/dialogs/dialogic_2_estia_arrival_translation.en.translation", "res://translation/dialogs/dialogic_2_subterra_arrival_translation.en.translation", "res://translation/dialogs/dialogic_3_astra_end_translation.en.translation", "res://translation/dialogs/dialogic_91_borea_comms_up_translation.en.translation", "res://translation/dialogs/dialogic_92_borea_later_translation.en.translation", "res://translation/dialogs/dialogic_9_borea_arrival_translation.en.translation") +locale/translations=PackedStringArray("res://translation/game/gui.en.translation", "res://translation/game/gui.fr.translation", "res://translation/dialogs/dialogic_character_translations.en.translation", "res://translation/dialogs/dialogic_demeter_ship_failed_translation.en.translation", "res://translation/dialogs/dialogic_demeter_ship_failed_translation.fr.translation", "res://translation/dialogs/dialogic_1_waking_up_translation.en.translation", "res://translation/dialogs/dialogic_1_waking_up_translation.fr.translation", "res://translation/dialogs/dialogic_2_demeter_intro_translation.en.translation", "res://translation/dialogs/dialogic_2_demeter_intro_translation.fr.translation", "res://translation/dialogs/dialogic_3_demeter_ship_presentation_translation.en.translation", "res://translation/dialogs/dialogic_3_demeter_ship_presentation_translation.fr.translation", "res://translation/dialogs/dialogic_4_cave_translation.en.translation", "res://translation/dialogs/dialogic_4_cave_translation.fr.translation", "res://translation/dialogs/dialogic_5_mercury_arrival_translation.en.translation", "res://translation/dialogs/dialogic_5_mercury_arrival_translation.fr.translation", "res://translation/dialogs/dialogic_6_mercury_departure_translation.en.translation", "res://translation/dialogs/dialogic_6_mercury_departure_translation.fr.translation", "res://translation/dialogs/dialogic_7_venus_arrival_translation.en.translation", "res://translation/dialogs/dialogic_7_venus_arrival_translation.fr.translation", "res://translation/dialogs/dialogic_8_venus_departure_translation.en.translation", "res://translation/dialogs/dialogic_8_venus_departure_translation.fr.translation", "res://translation/dialogs/dialogic_9_borea_translation.en.translation", "res://translation/dialogs/dialogic_cave_translation.en.translation", "res://translation/dialogs/dialogic_cave_translation.fr.translation", "res://translation/dialogs/dialogic_character_translations.fr.translation", "res://translation/dialogs/dialogic_6_vending_machine_presentation_translation.en.translation", "res://translation/dialogs/dialogic_6_vending_machine_presentation_translation.fr.translation", "res://translation/dialogs/dialogic_1_aqua_travel_phone_call_translation.en.translation", "res://translation/dialogs/dialogic_1_astra_travel_phone_call_translation.en.translation", "res://translation/dialogs/dialogic_1_estia_travel_phone_call_translation.en.translation", "res://translation/dialogs/dialogic_1_subterra_travel_phone_call_translation.en.translation", "res://translation/dialogs/dialogic_2_aqua_arrival_translation.en.translation", "res://translation/dialogs/dialogic_2_astra_top_translation.en.translation", "res://translation/dialogs/dialogic_2_estia_arrival_translation.en.translation", "res://translation/dialogs/dialogic_2_subterra_arrival_translation.en.translation", "res://translation/dialogs/dialogic_3_astra_end_translation.en.translation", "res://translation/dialogs/dialogic_91_borea_comms_up_translation.en.translation", "res://translation/dialogs/dialogic_92_borea_later_translation.en.translation", "res://translation/dialogs/dialogic_9_borea_arrival_translation.en.translation", "res://translation/names/location_types.en.translation", "res://translation/names/location_types.fr.translation") locale/test="fr" [rendering] diff --git a/stages/terrain/region/scripts/post_process/clouds.gd b/stages/terrain/region/scripts/post_process/clouds.gd index 9da2373..cee05d6 100644 --- a/stages/terrain/region/scripts/post_process/clouds.gd +++ b/stages/terrain/region/scripts/post_process/clouds.gd @@ -45,7 +45,7 @@ func update_noise() -> void: var noise := FastNoiseLite.new() noise.noise_type = FastNoiseLite.TYPE_CELLULAR - noise.seed = region.data.region_name.hash() + region.data.charges + noise.seed = region.data.get_region_name().hash() + region.data.charges texture.noise = noise diff --git a/stages/terrain/region/scripts/post_process/region_meteo.gd b/stages/terrain/region/scripts/post_process/region_meteo.gd index 440b541..be228d7 100644 --- a/stages/terrain/region/scripts/post_process/region_meteo.gd +++ b/stages/terrain/region/scripts/post_process/region_meteo.gd @@ -18,10 +18,10 @@ extends Node @export var region : Region func _ready(): - meteo = Meteo.new(region.data.region_name.hash() + region.data.charges) + meteo = Meteo.new(region.data.get_region_name().hash() + region.data.charges) region.data.pass_day_proceeded.connect( func(data : RegionData): - meteo = Meteo.new(data.region_name.hash() + data.charges) + meteo = Meteo.new(data.get_region_name().hash() + data.charges) wind_particles.restart() ) diff --git a/stages/terrain/region/scripts/region_data.gd b/stages/terrain/region/scripts/region_data.gd index 35b9bbb..add77b8 100644 --- a/stages/terrain/region/scripts/region_data.gd +++ b/stages/terrain/region/scripts/region_data.gd @@ -16,7 +16,8 @@ const START_ROCK_HOLE_RADIUS = 0 const PLAYER_ROCK_HOLE_RADIUS = 5 @export var region_seed : int -@export var region_name : String +@export var region_first_name : String +@export var region_name_key : String @export var rock_threshold : float @export var decontamination_threshold : float @@ -67,7 +68,8 @@ func _init( if parameter: charges = parameter.get_charge() objective = parameter.get_objective() - region_name = parameter.get_region_name() + region_first_name = parameter.region_first_name; + region_name_key = parameter.region_name_key; region_seed = parameter.get_region_seed() rock_threshold = parameter.get_rock_threshold() decontamination_threshold = parameter.get_decontamination_threshold() @@ -101,7 +103,15 @@ func update(): failed.emit() updated.emit(self) -#endregion +func get_region_name() -> String: + var n := region_first_name + if region_name_key != "": + n = tr(region_name_key).format({"name": region_first_name}) + + for m in modifiers: + n = m.modify_region_name(n) + + return n #region ------------------ Score ------------------ diff --git a/stages/terrain/region/scripts/region_parameter.gd b/stages/terrain/region/scripts/region_parameter.gd index 0251abc..ef52215 100644 --- a/stages/terrain/region/scripts/region_parameter.gd +++ b/stages/terrain/region/scripts/region_parameter.gd @@ -5,28 +5,60 @@ const DEFAULT_ROCK_THRESHOLD = 0.3 const DEFAULT_DECONTAMINATION_THRESHOLD = 0.3 const DEFAULT_CRISTAL_THRESHOLD = 0.1 const DEFAULT_CHARGE = 10 -const DEFAULT_TALION_CELL_CHANCE : Array[int] = [0,0,0,1,1] -const DEFAULT_ENERGY_CELL_CHANCE : Array[int] = [1,2,2,2,3] +const DEFAULT_TALION_CELL_CHANCE: Array[int] = [0, 0, 0, 1, 1] +const DEFAULT_ENERGY_CELL_CHANCE: Array[int] = [1, 2, 2, 2, 3] const DEFAULT_START_DECONTAMINATION_ZONE_RADIUS = 3 -const DEFAULT_SEED_RARITY_POOL: Array[int] = [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,1] +const DEFAULT_SEED_RARITY_POOL: Array[int] = [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1] -@export var region_name : String -@export var objective : int -@export var charge : int -@export var region_seed : int -@export var modifiers : Array[RegionModifier] +const JUST_NAME_PROBABILITY := 0.3 +const REGION_TYPES_CSV := "res://translation/names/location_types.csv" +const REGION_NAMES_FILE := "res://translation/names/location_names.csv" + +@export var region_first_name: String +@export var region_name_key: String +@export var objective: int +@export var charge: int +@export var region_seed: int +@export var modifiers: Array[RegionModifier] func _init( - _name = Random.generate_random_word(), - _modifiers : Array[RegionModifier] = [], + _name = "", + _modifiers: Array[RegionModifier] = [], _region_seed = randi(), ): - region_name = _name + set_random_region_name() modifiers = _modifiers region_seed = _region_seed +func get_random_region_first_name() -> String: + var name_file := FileAccess.open(REGION_NAMES_FILE, FileAccess.READ) + var n_names := name_file.get_line().to_int() + var name_ind := randi_range(0, n_names) + var first_name := name_file.get_line() + for i in range(name_ind): + first_name = name_file.get_line() + return first_name + +func get_random_region_name_key() -> String: + var place_file := FileAccess.open(REGION_TYPES_CSV, FileAccess.READ) + var n_places := place_file.get_line().split(",")[0].to_int() + var place_ind := randi_range(0, n_places) + var place_key := place_file.get_line().split(",")[0] + for i in range(place_ind): + place_key = place_file.get_line().split(",")[0] + return place_key + +func set_random_region_name(): + region_first_name = get_random_region_first_name() + if randf() > JUST_NAME_PROBABILITY: + region_name_key = get_random_region_name_key() + else: + region_name_key = "" + func get_region_name() -> String: - var n := region_name + var n := region_first_name + if region_name_key != "": + n = tr(region_name_key).format({"name": region_first_name}) for m in modifiers: n = m.modify_region_name(n) diff --git a/translation/names/location_names.csv b/translation/names/location_names.csv new file mode 100644 index 0000000..1d0806b --- /dev/null +++ b/translation/names/location_names.csv @@ -0,0 +1,100 @@ +49 +Isitt +Pomoa +Ezeron +Ebis +Ecloya +Vlamedun +Iuqeresh +Faishostruc +Iupoqune +Slazor +Plulune +Fledu +Jiclot +Greyun +Uasland +Brisiobu +Eazeyo +Ebimeron +Fosmule +Yaglaisal +Ushium +Nesnar +Broysau +Shiesal +Eblie +Ostraria +Scev bren +Nochuedan +Woshania +Eblor +Ochil +Speles +Oscesh +Estor +Lagronus +Relmania +Bobbeon +Zigrore +Peclite +Eivis +Drugantu +Latunides +Qisos +Bosos +Sreriq +Yesta +Nodeuria +Thosone +Zinuna +Viurus +Natis +Laduphus +Cebbaphus +Gulnyke +Pungea +Vebos +Nebos +Dremili +Seganides +Icania +Aboulara +Guzadus +Dulmea +Kueli +Deothe +Gonides +Monvelib +Baccutum +Cimemia +Ricia +Nechov +Huphus +Choacurry +Maliat +Deaphus +Melutania +Cumao +Ponvuna +Thunzo +Thonides +Iulia +Choabantu +Crugacarro +Oratal +Chromia +Onglea +Dophosie +Xepra +Bonus +Neirus +Brazacury +Xilmertum +Vibraios +Gohosie +Chistrade +Zapra +Boruta +Mathor +Dirunides diff --git a/translation/names/location_names.csv.import b/translation/names/location_names.csv.import new file mode 100644 index 0000000..0cfdc52 --- /dev/null +++ b/translation/names/location_names.csv.import @@ -0,0 +1,16 @@ +[remap] + +importer="csv_translation" +type="Translation" +uid="uid://soi6t0mktsjj" + +[deps] + +source_file="res://translation/names/location_names.csv" + +[params] + +compress=1 +delimiter=0 +unescape_keys=false +unescape_translations=true diff --git a/translation/names/location_types.csv b/translation/names/location_types.csv new file mode 100644 index 0000000..3c53805 --- /dev/null +++ b/translation/names/location_types.csv @@ -0,0 +1,24 @@ +23,en,fr +VALLEY,Valley of {name},Vallée {name} +HIGHLANDS,{name} Highlands,Hautes terres de {name} +HEIGHTS,{name} Heights,Hauteurs de {name} +MOUNTAIN,Mountain of {name},Montagne {name} +PEAKS,{name} Peaks,Piques de {name} +HILLS,{name} Hills,Collines {name} +PASS,Pass of {name},Passe {name} +PLAIN,Plain of {name},Plaine {name} +CANAL,Canal of {name},Canal de {name} +FLATLANDS,Flatlands of {name},Terres plates de {name} +LABYRINTH,{name} Labyrinth,Labyrinthe {name} +REGION,Region of {name},Région de {name} +BARRIER,Barrier of {name},Barrière de {name} +CROWN,{name} Crown,Couronne {name} +SUMMIT,Summit of {name},Sommet de {name} +PANORAMA,{name} Panorama,Panorama de {name} +EXPANSE,{name} Expanse,Étendues {name} +GROUNDS,{name} Grounds,Terres de {name} +PLATEAU,Plateau of {name},Plateau de {name} +FOOTHILLS,{name} Foothills,Contreforts de {name} +CANYON,Canyon of {name},Canyon {name} +RIDGE,{name} Ridge,Crête de {name} +LANDSCAPE,{name} Landscape,Paysage de {name} diff --git a/translation/names/location_types.csv.import b/translation/names/location_types.csv.import new file mode 100644 index 0000000..4344545 --- /dev/null +++ b/translation/names/location_types.csv.import @@ -0,0 +1,19 @@ +[remap] + +importer="csv_translation" +type="Translation" +uid="uid://po0o4bpp34vl" + +[deps] + +files=["res://translation/names/location_types.en.translation", "res://translation/names/location_types.fr.translation"] + +source_file="res://translation/names/location_types.csv" +dest_files=["res://translation/names/location_types.en.translation", "res://translation/names/location_types.fr.translation"] + +[params] + +compress=1 +delimiter=0 +unescape_keys=false +unescape_translations=true