From 0a4984f0bb940156fbd646e46803482ea6794ff4 Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Tue, 10 Mar 2026 14:55:20 +0100 Subject: [PATCH 001/111] Add zoom possibility in Developer Settings --- project.godot | 4 +++ sources/menus/settings/developer_settings.gd | 33 +++++++++++++++++++ .../menus/settings/developer_settings.tscn | 2 +- 3 files changed, 38 insertions(+), 1 deletion(-) diff --git a/project.godot b/project.godot index 0906419a..2b6cb6d6 100644 --- a/project.godot +++ b/project.godot @@ -91,6 +91,10 @@ right_click={ ] } +[input_devices] + +pointing/android/enable_pan_and_scale_gestures=true + [internationalization] locale/translation_remaps={} diff --git a/sources/menus/settings/developer_settings.gd b/sources/menus/settings/developer_settings.gd index 7e04af94..80e1d673 100644 --- a/sources/menus/settings/developer_settings.gd +++ b/sources/menus/settings/developer_settings.gd @@ -3,6 +3,9 @@ extends Control const LOG_LEVEL_ELEMENT: PackedScene = preload("res://sources/menus/settings/log_level_element.tscn") const CLEAR_LOCAL_DATA_CONFIRMATIONS: int = 5 +const ZOOM_MIN: float = 1.0 +const ZOOM_MAX: float = 3.0 +const ZOOM_STEP_WHEEL: float = 0.1 static var return_path: String = "res://sources/menus/main/main_menu.tscn" @@ -12,6 +15,8 @@ var loglevel_regex: RegEx var clear_local_data_confirmations: int = 0 var showing_previous_session_logs: bool = false var previous_session_logs: PackedStringArray = [] +var zoom_level: float = 1.0 + @onready var slider: HSlider = $VBoxContainer/Controls/LineCountSlider @onready var slider_label: Label = $VBoxContainer/Controls/SliderLabel @@ -127,6 +132,34 @@ func _on_filters_changed(checked: bool, index: int) -> void: _update_log_text() +func _input(event: InputEvent) -> void: + # Pinch to zoom on mobile + if event is InputEventMagnifyGesture: + var new_zoom := clampf(zoom_level * event.factor, ZOOM_MIN, ZOOM_MAX) + _apply_zoom(new_zoom, event.position) + get_viewport().set_input_as_handled() + # Mouse wheel zoom on desktop + elif event is InputEventMouseButton and event.pressed: + var new_zoom := zoom_level + if event.button_index == MOUSE_BUTTON_WHEEL_UP: + new_zoom = clampf(zoom_level + ZOOM_STEP_WHEEL, ZOOM_MIN, ZOOM_MAX) + elif event.button_index == MOUSE_BUTTON_WHEEL_DOWN: + new_zoom = clampf(zoom_level - ZOOM_STEP_WHEEL, ZOOM_MIN, ZOOM_MAX) + if new_zoom != zoom_level: + _apply_zoom(new_zoom, event.position) + get_viewport().set_input_as_handled() + + +func _apply_zoom(new_zoom: float, screen_pos: Vector2) -> void: + # Convert screen position to local (pre-scale) coordinates + var local_pos: Vector2 = (screen_pos - pivot_offset) / zoom_level + pivot_offset + # Shift the pivot so the point under the gesture/cursor stays fixed on screen + if not is_equal_approx(new_zoom, 1.0): + pivot_offset = (screen_pos - local_pos * new_zoom) / (1.0 - new_zoom) + zoom_level = new_zoom + scale = Vector2(zoom_level, zoom_level) + + func _on_back_button_pressed() -> void: await OpeningCurtain.close() if return_path == "": diff --git a/sources/menus/settings/developer_settings.tscn b/sources/menus/settings/developer_settings.tscn index a02255c4..ad21cd28 100644 --- a/sources/menus/settings/developer_settings.tscn +++ b/sources/menus/settings/developer_settings.tscn @@ -41,8 +41,8 @@ layout_mode = 2 theme_override_constants/separation = 20 [node name="BackButton" type="TextureButton" parent="InterfaceLeft/Container" unique_id=1761957378] +custom_minimum_size = Vector2(0, 350) layout_mode = 2 -size_flags_vertical = 3 texture_normal = ExtResource("2_utgug") texture_pressed = ExtResource("3_dttok") texture_disabled = ExtResource("4_bsu7d") From b3566bdab4976944392c8cbc39acad0d7878f652 Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Mon, 16 Mar 2026 15:36:23 +0100 Subject: [PATCH 002/111] Switch app config (name, icon, scene) from editor dropdown The export_tool_manager dropdown now applies project settings immediately when toggling between "Kalulu Game" and "Prof Tool", replacing the need to manually apply prof_tool_patch.diff. Co-Authored-By: Claude Opus 4.6 --- .../export_tool_exporter.gd | 12 +++++-- .../export_tool_manager_plugin.gd | 31 ++++++++++++++++++- 2 files changed, 39 insertions(+), 4 deletions(-) diff --git a/addons/export_tool_manager/export_tool_exporter.gd b/addons/export_tool_manager/export_tool_exporter.gd index 675fff7f..8a004d14 100644 --- a/addons/export_tool_manager/export_tool_exporter.gd +++ b/addons/export_tool_manager/export_tool_exporter.gd @@ -6,12 +6,16 @@ func _get_name() -> String: var tool_configs: Dictionary[String, Dictionary] = { "game": { + "name": "Kalulu", "main_scene": "res://sources/menus/splash_screen/splash_screen.tscn", - "output_name": "kalulu_app" + "icon": "res://assets/kalulu_icon.png", + "output_name": "Kalulu" }, "prof_tool": { + "name": "Prof_Tool", "main_scene": "res://sources/language_tool/prof_tool_menu.tscn", - "output_name": "prof_tool" + "icon": "res://assets/prof_tool_icon.png", + "output_name": "Prof_Tool" } } @@ -26,6 +30,8 @@ func _export_begin(features: PackedStringArray, is_debug: bool, path: String, fl push_error("Tool '%s' is not defined in the configuration." % selected_tool) return - var config: Dictionary[String, String] = tool_configs[selected_tool] + var config: Dictionary = tool_configs[selected_tool] + ProjectSettings.set_setting("application/config/name", config["name"]) ProjectSettings.set_setting("application/run/main_scene", config["main_scene"]) + ProjectSettings.set_setting("application/config/icon", config["icon"]) ProjectSettings.save() diff --git a/addons/export_tool_manager/export_tool_manager_plugin.gd b/addons/export_tool_manager/export_tool_manager_plugin.gd index 2febc745..4ae83473 100644 --- a/addons/export_tool_manager/export_tool_manager_plugin.gd +++ b/addons/export_tool_manager/export_tool_manager_plugin.gd @@ -3,6 +3,19 @@ extends EditorPlugin const EXPORTER_PATH: String = "res://addons/export_tool_manager/export_tool_exporter.gd" +const TOOL_CONFIGS: Dictionary = { + "game": { + "name": "Kalulu", + "main_scene": "res://sources/menus/splash_screen/splash_screen.tscn", + "icon": "res://assets/kalulu_icon.png", + }, + "prof_tool": { + "name": "Prof_Tool", + "main_scene": "res://sources/language_tool/prof_tool_menu.tscn", + "icon": "res://assets/prof_tool_icon.png", + } +} + var tool_selector: OptionButton var exporter_plugin: EditorExportPlugin var export_button: Button @@ -11,7 +24,7 @@ func _enter_tree() -> void: # Tool Selector UI tool_selector = OptionButton.new() tool_selector.name = "Tool Exporter" - tool_selector.add_item("Game") + tool_selector.add_item("Kalulu Game") tool_selector.add_item("Prof Tool") tool_selector.connect("item_selected", _on_tool_selected) add_control_to_container(EditorPlugin.CONTAINER_TOOLBAR, tool_selector) @@ -29,6 +42,8 @@ func _enter_tree() -> void: "game", _: tool_selector.select(0) + _apply_tool_config(current_tool) + # Exporter plugin exporter_plugin = load(EXPORTER_PATH).new() add_export_plugin(exporter_plugin) @@ -58,6 +73,20 @@ func _on_tool_selected(index: int) -> void: var settings: EditorSettings = get_editor_interface().get_editor_settings() settings.set_setting("export_tool_manager/current_tool", tool) + _apply_tool_config(tool) + + +func _apply_tool_config(tool: String) -> void: + if not TOOL_CONFIGS.has(tool): + push_error("ExportToolManager: Unknown tool '%s'" % tool) + return + + var config: Dictionary = TOOL_CONFIGS[tool] + ProjectSettings.set_setting("application/config/name", config["name"]) + ProjectSettings.set_setting("application/run/main_scene", config["main_scene"]) + ProjectSettings.set_setting("application/config/icon", config["icon"]) + ProjectSettings.save() + print("ExportToolManager: Switched to '%s' (scene: %s)" % [config["name"], config["main_scene"]]) func _on_export_all_game_pressed() -> void: export_all_game_presets() From 58fe768457481df0da90df5cf1d1d65b13a042e8 Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Mon, 16 Mar 2026 15:56:16 +0100 Subject: [PATCH 003/111] Make Export All button dynamic based on selected tool The button label and export presets now change depending on the dropdown selection. Game exports to Autobuild/Kalulu_Game/, Prof Tool exports to Autobuild/Prof_Tool/. Shows an alert and aborts if the version folder already exists. Co-Authored-By: Claude Opus 4.6 --- .../export_tool_manager_plugin.gd | 83 +++++++++++++------ 1 file changed, 56 insertions(+), 27 deletions(-) diff --git a/addons/export_tool_manager/export_tool_manager_plugin.gd b/addons/export_tool_manager/export_tool_manager_plugin.gd index 4ae83473..37f58e37 100644 --- a/addons/export_tool_manager/export_tool_manager_plugin.gd +++ b/addons/export_tool_manager/export_tool_manager_plugin.gd @@ -8,17 +8,38 @@ const TOOL_CONFIGS: Dictionary = { "name": "Kalulu", "main_scene": "res://sources/menus/splash_screen/splash_screen.tscn", "icon": "res://assets/kalulu_icon.png", + "export_folder": "Kalulu_Game", + "button_label": "Export All (Kalulu Game)", + "presets": { + "Android Kalulu AAB": "/Android/Kalulu.aab", + "Android Kalulu APK": "/Android/Kalulu.apk", + "Android Kalulu APK 32 bits": "/Android/Kalulu_32.apk", + "Windows Kalulu": "/Windows/Kalulu-Windows.zip", + "Linux Kalulu": "/Linux/Kalulu-Linux.zip", + # Apple in last because it's always the most complicated + #"iOS Kalulu": "/iOS/Kalulu.ipa", + #"macOS Kalulu": "/macOS/Kalulu-macOS.dmg", + }, }, "prof_tool": { "name": "Prof_Tool", "main_scene": "res://sources/language_tool/prof_tool_menu.tscn", "icon": "res://assets/prof_tool_icon.png", + "export_folder": "Prof_Tool", + "button_label": "Export All (Prof Tool)", + "presets": { + "Windows ProfTool": "/Windows/Prof_Tool-Windows.zip", + "Linux ProfTool": "/Linux/Prof_Tool-Linux.zip", + # Apple in last because it's always the most complicated + #"macOS ProfTool": "/macOS/Prof_Tool-macOS.dmg", + }, } } var tool_selector: OptionButton var exporter_plugin: EditorExportPlugin var export_button: Button +var current_tool: String = "game" func _enter_tree() -> void: # Tool Selector UI @@ -30,16 +51,16 @@ func _enter_tree() -> void: add_control_to_container(EditorPlugin.CONTAINER_TOOLBAR, tool_selector) var settings: EditorSettings = get_editor_interface().get_editor_settings() - var current: Variant = settings.get_setting("export_tool_manager/current_tool") - var current_tool: String = "game" + var saved: Variant = settings.get_setting("export_tool_manager/current_tool") - if typeof(current) == TYPE_STRING and current.strip_edges() != "": - current_tool = current.strip_edges() + if typeof(saved) == TYPE_STRING and saved.strip_edges() != "": + current_tool = saved.strip_edges() match current_tool: "prof_tool": tool_selector.select(1) "game", _: + current_tool = "game" tool_selector.select(0) _apply_tool_config(current_tool) @@ -50,8 +71,8 @@ func _enter_tree() -> void: # Export All Button export_button = Button.new() - export_button.text = "Export All (Game)" - export_button.pressed.connect(_on_export_all_game_pressed) + export_button.text = TOOL_CONFIGS[current_tool]["button_label"] + export_button.pressed.connect(_on_export_all_pressed) add_control_to_container(EditorPlugin.CONTAINER_TOOLBAR, export_button) func _exit_tree() -> void: @@ -64,16 +85,15 @@ func _exit_tree() -> void: remove_export_plugin(exporter_plugin) func _on_tool_selected(index: int) -> void: - var tool: String = "game" match index: 1: - tool = "prof_tool" + current_tool = "prof_tool" 0, _: - tool = "game" + current_tool = "game" var settings: EditorSettings = get_editor_interface().get_editor_settings() - settings.set_setting("export_tool_manager/current_tool", tool) - _apply_tool_config(tool) + settings.set_setting("export_tool_manager/current_tool", current_tool) + _apply_tool_config(current_tool) func _apply_tool_config(tool: String) -> void: @@ -86,29 +106,38 @@ func _apply_tool_config(tool: String) -> void: ProjectSettings.set_setting("application/run/main_scene", config["main_scene"]) ProjectSettings.set_setting("application/config/icon", config["icon"]) ProjectSettings.save() + + if export_button: + export_button.text = config["button_label"] + print("ExportToolManager: Switched to '%s' (scene: %s)" % [config["name"], config["main_scene"]]) -func _on_export_all_game_pressed() -> void: - export_all_game_presets() +func _on_export_all_pressed() -> void: + export_all_presets() + + +func export_all_presets() -> void: + var config: Dictionary = TOOL_CONFIGS[current_tool] + var base_folder: String = "../Export/Autobuild/%s/" % config["export_folder"] + var version_folder: String = base_folder + get_application_version_with_code() + + # Check if the version folder already exists + if DirAccess.dir_exists_absolute(version_folder): + var dialog: AcceptDialog = AcceptDialog.new() + dialog.title = "Export aborted" + dialog.dialog_text = "The export folder already exists:\n%s\n\nDelete it manually before re-exporting." % version_folder + get_editor_interface().get_base_control().add_child(dialog) + dialog.popup_centered() + dialog.confirmed.connect(dialog.queue_free) + dialog.canceled.connect(dialog.queue_free) + return -func export_all_game_presets() -> void: var godot_path: String = OS.get_executable_path() - var exportFolder: String = "../Export/autobuilds/" - var presets: Dictionary[String, String]= { - "Android Kalulu AAB": "/Android/kalulu_app.aab", - "Android Kalulu APK": "/Android/kalulu_app.apk", - "Android Kalulu APK 32 bits": "/Android/kalulu_app_32.apk", - "Windows Kalulu": "/Windows/Kalulu-Windows.zip", - "Linux Kalulu": "/Linux/Kalulu-Linux.zip", - - # Apple in last because it's always the most complicated - #"iOS Kalulu": "/iOS/KaluluApp.ipa", - #"macOS Kalulu": "/macOS/Kalulu-macOS.dmg" - } + var presets: Dictionary = config["presets"] for preset_name in presets.keys(): await get_tree().create_timer(1).timeout - var output_path: String = exportFolder + get_application_version_with_code() + presets[preset_name] + var output_path: String = version_folder + presets[preset_name] print("Start exporting " + preset_name) DirAccess.make_dir_recursive_absolute(output_path.get_base_dir()) From 38b26c6ebbed33eceff5116ea10ce1fd1c4e058f Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Tue, 10 Mar 2026 16:42:22 +0100 Subject: [PATCH 004/111] Better pause system --- sources/minigames/base/base_minigame.gd | 23 +++++++++++-------- sources/minigames/base/base_minigame.tscn | 2 +- .../base/minigame_audio_stream_player.gd | 2 +- 3 files changed, 16 insertions(+), 11 deletions(-) diff --git a/sources/minigames/base/base_minigame.gd b/sources/minigames/base/base_minigame.gd index e3cd2683..2ba2cd56 100644 --- a/sources/minigames/base/base_minigame.gd +++ b/sources/minigames/base/base_minigame.gd @@ -411,11 +411,10 @@ func _play_stimulus() -> void: return -func _pause_game() -> bool: - var pause: bool = not get_tree().paused - get_tree().paused = pause - Log.trace("BaseMinigame: Pause toggled to %s for %s" % [str(pause), Type.keys()[minigame_name]]) - return pause +func _set_root_timers_paused(paused: bool) -> void: + for child in get_children(): + if child is Timer: + child.paused = paused func _highlight() -> void: @@ -460,14 +459,20 @@ func _on_minigame_ui_back_button_pressed() -> void: func _on_minigame_ui_stimulus_button_pressed() -> void: - _pause_game() + game_root.process_mode = Node.PROCESS_MODE_DISABLED + set_process(false) + set_physics_process(false) + _set_root_timers_paused(true) minigame_ui.lock() - + @warning_ignore("redundant_await") await _play_stimulus() - + minigame_ui.unlock() - _pause_game() + _set_root_timers_paused(false) + set_process(true) + set_physics_process(true) + game_root.process_mode = Node.PROCESS_MODE_PAUSABLE func _on_minigame_ui_kalulu_button_pressed() -> void: diff --git a/sources/minigames/base/base_minigame.tscn b/sources/minigames/base/base_minigame.tscn index ceda0a04..5fb3e75e 100644 --- a/sources/minigames/base/base_minigame.tscn +++ b/sources/minigames/base/base_minigame.tscn @@ -16,7 +16,7 @@ grow_vertical = 2 script = ExtResource("1_jdfsm") [node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="." unique_id=649246549] -process_mode = 3 +process_mode = 1 bus = &"Voice" script = ExtResource("2_dkgx4") diff --git a/sources/minigames/base/minigame_audio_stream_player.gd b/sources/minigames/base/minigame_audio_stream_player.gd index 892b0b11..63cf46b9 100644 --- a/sources/minigames/base/minigame_audio_stream_player.gd +++ b/sources/minigames/base/minigame_audio_stream_player.gd @@ -44,4 +44,4 @@ func play_audio_stream(audio: AudioStreamMP3) -> void: stream = audio play() if not audio.loop: - await get_tree().create_timer(audio.get_length() + 0.25).timeout + await get_tree().create_timer(audio.get_length() + 0.25, false).timeout From 6f3f0e3c4e4cc5951b8e0a06be6c1b36c3c71de8 Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Fri, 27 Mar 2026 10:43:33 +0100 Subject: [PATCH 005/111] Project settings direct config instead of UID --- project.godot | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/project.godot b/project.godot index 2b6cb6d6..5c8d7628 100644 --- a/project.godot +++ b/project.godot @@ -17,10 +17,10 @@ compatibility/default_parent_skeleton_in_mesh_instance_3d=true config/name="Kalulu" config/description="Open-source educational app to teach reading skills using Godot, based on the graphemic method, designed for children aged 5+" config/version="3.0.0" -run/main_scene="uid://xndd7r8jpai5" +run/main_scene="res://sources/menus/splash_screen/splash_screen.tscn" config/features=PackedStringArray("4.6", "Forward Plus") boot_splash/bg_color=Color(0.141176, 0.141176, 0.141176, 1) -config/icon="uid://cctkobpymorie" +config/icon="res://assets/kalulu_icon.png" custom/unlock_everything=false custom/unlock_everything.debug=false From 228eeccc1d9f328d1c502cbb4dc892726de7ba21 Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Thu, 2 Apr 2026 16:43:06 +0200 Subject: [PATCH 006/111] Update FAQ --- README.es.md | 18 +++++++++++------- README.fr.md | 14 +++++++++----- README.md | 16 ++++++++++------ README.pt-br.md | 20 ++++++++++++-------- 4 files changed, 42 insertions(+), 26 deletions(-) diff --git a/README.es.md b/README.es.md index 327c9afb..672400fa 100644 --- a/README.es.md +++ b/README.es.md @@ -53,11 +53,11 @@ Cada lección sigue una progresión lógica basada en datos lingüísticos extra ```bash # Clona tu fork del repositorio -git clone https://github.com/TU_USUARIO/Kalulu.git +git clone https://github.com/TU_USUARIO/Kalulu-Frontend.git # O bien -git clone git@github.com:YOUR_USERNAME/Kalulu.git +git clone git@github.com:YOUR_USERNAME/Kalulu-Frontend.git -cd Kalulu +cd Kalulu-Frontend ``` 🔁 _Reemplaza `TU_USUARIO` con tu nombre de usuario._ @@ -113,13 +113,17 @@ Asegúrate de que tu código siga nuestras convenciones de codificación e inclu ## ❓ FAQ -### 📱 O Kalulu está disponível para dispositivos móveis? +### 📱 ¿Está Kalulu disponible en móviles? -Sim! Kalulu está disponível para: +¡Sí! Kalulu está disponible para: - [![Android](https://img.shields.io/badge/PlayStore-Kalulu-green?logo=google-play)](https://play.google.com/store/apps/details?id=org.godotengine.kalulu) - [![iOS](https://img.shields.io/badge/AppStore-Kalulu-blue?logo=apple)](https://apps.apple.com/fr/app/kalulu-education/id1639075967) -### 💻 Existe uma versão para computador? +### 💻 ¿Está Kalulu disponible en escritorio? -Uma versão experimental para Windows, Mac e Linux está em desenvolvimento. Fique ligado! +¡Sí! Las versiones para Windows, Mac y Linux están disponibles en la sección [Releases](https://github.com/Excello-Recherche-Education/Kalulu-Frontend/releases). + +### 🌐 ¿Está Kalulu disponible directamente en la web? + +¡Estamos trabajando en ello, mantente atento! diff --git a/README.fr.md b/README.fr.md index b4f24843..02b300d4 100644 --- a/README.fr.md +++ b/README.fr.md @@ -53,11 +53,11 @@ Chaque leçon suit une séquence structurée basée sur des données linguistiqu ```bash # Clonez votre fork du dépôt -git clone https://github.com/VOTRE_UTILISATEUR/Kalulu.git +git clone https://github.com/VOTRE_UTILISATEUR/Kalulu-Frontend.git # Ou -git clone git@github.com:YOUR_USERNAME/Kalulu.git +git clone git@github.com:YOUR_USERNAME/Kalulu-Frontend.git -cd Kalulu +cd Kalulu-Frontend ``` 🔁 _Remplacez `VOTRE_UTILISATEUR` par votre nom d'utilisateur GitHub._ @@ -120,6 +120,10 @@ Oui ! Kalulu est disponible pour : - [![Android](https://img.shields.io/badge/PlayStore-Kalulu-green?logo=google-play)](https://play.google.com/store/apps/details?id=org.godotengine.kalulu) - [![iOS](https://img.shields.io/badge/AppStore-Kalulu-blue?logo=apple)](https://apps.apple.com/fr/app/kalulu-education/id1639075967) -### 💻 Existe-t-il une version pour ordinateur ? +### 💻 Kalulu est-il disponible sur ordinateur ? -Une version pour Windows, Mac et Linux est en cours de développement expérimental. Restez à l’écoute ! +Oui ! Des versions pour Windows, Mac et Linux sont disponibles dans la section [Releases](https://github.com/Excello-Recherche-Education/Kalulu-Frontend/releases). + +### 🌐 Kalulu est-il disponible directement sur le web ? + +Nous y travaillons, restez à l’écoute ! diff --git a/README.md b/README.md index 4d3bcd7a..2712711d 100644 --- a/README.md +++ b/README.md @@ -51,18 +51,18 @@ Each lesson follows a structured sequence based on linguistic data drawn from ch We recommend forking the repository before cloning, so you can easily contribute or manage your own changes. -1. Go to the [Kalulu GitHub Repository](https://github.com/Excello-Recherche-Education/Kalulu). +1. Go to the [Kalulu GitHub Repository](https://github.com/Excello-Recherche-Education/Kalulu-Frontend). 2. Click the **Fork** button at the top-right corner to create your own copy of the repo. 3. Once forked, open your terminal and run the following commands: ```bash # Clone your fork of the repository -git clone https://github.com/YOUR_USERNAME/Kalulu.git +git clone https://github.com/YOUR_USERNAME/Kalulu-Frontend.git # Or -git clone git@github.com:YOUR_USERNAME/Kalulu.git +git clone git@github.com:YOUR_USERNAME/Kalulu-Frontend.git # Navigate into the project directory -cd Kalulu +cd Kalulu-Frontend ``` 🔁 *Remember to replace `YOUR_USERNAME` with your actual GitHub username.* @@ -141,9 +141,13 @@ Yes! Kalulu is available on: - [![Android](https://img.shields.io/badge/PlayStore-Kalulu-green?logo=google-play)](https://play.google.com/store/apps/details?id=org.godotengine.kalulu) - [![iOS](https://img.shields.io/badge/AppStore-Kalulu-blue?logo=apple)](https://apps.apple.com/fr/app/kalulu-education/id1639075967) -### 💻 Is there a desktop version? +### 💻 Is Kalulu available on desktop? -An experimental version for Windows, Mac, and Linux is currently in development. Stay tuned! +Yes! Desktop versions for Windows, Mac, and Linux are available in the [Releases](https://github.com/Excello-Recherche-Education/Kalulu-Frontend/releases) section. + +### 🌐 Is Kalulu available directly on the web? + +We are working on it, stay tuned! --- diff --git a/README.pt-br.md b/README.pt-br.md index 8c500831..94333824 100644 --- a/README.pt-br.md +++ b/README.pt-br.md @@ -17,7 +17,7 @@ - [2. Instalar o Godot Engine](#2-instalar-o-godot-engine) - [🧩 Addons inclusos](#-addons-inclusos) - [🤝 Quer ajudar?](#-quer-ajudar-) -- [❓ Preguntas Frecuentes](#faq) +- [❓ Perguntas Frequentes](#faq) --- @@ -51,11 +51,11 @@ Cada lição segue uma sequência estruturada com base em dados da literatura in ```bash # Clone o seu fork do repositório -git clone https://github.com/SEU_USUARIO/Kalulu.git +git clone https://github.com/SEU_USUARIO/Kalulu-Frontend.git # Ou então -git clone git@github.com:YOUR_USERNAME/Kalulu.git +git clone git@github.com:YOUR_USERNAME/Kalulu-Frontend.git -cd Kalulu +cd Kalulu-Frontend ``` 🔁 _Substitua `SEU_USUARIO` pelo seu nome de usuário._ @@ -111,13 +111,17 @@ Certifique-se de que seu código siga nossas convenções de codificação e inc ## ❓ FAQ -### 📱 ¿Está Kalulu disponible en móviles? +### 📱 O Kalulu está disponível para dispositivos móveis? -¡Sí! Kalulu está disponible para: +Sim! Kalulu está disponível para: - [![Android](https://img.shields.io/badge/PlayStore-Kalulu-green?logo=google-play)](https://play.google.com/store/apps/details?id=org.godotengine.kalulu) - [![iOS](https://img.shields.io/badge/AppStore-Kalulu-blue?logo=apple)](https://apps.apple.com/fr/app/kalulu-education/id1639075967) -### 💻 ¿Existe una versión para ordenadores? +### 💻 O Kalulu está disponível no desktop? -Una versión experimental para Windows, Mac y Linux está en desarrollo. ¡Mantente atento! +Sim! Versões para Windows, Mac e Linux estão disponíveis na seção [Releases](https://github.com/Excello-Recherche-Education/Kalulu-Frontend/releases). + +### 🌐 O Kalulu está disponível diretamente na web? + +Estamos trabalhando nisso, fique ligado! From 4cc67b0f8370c251eed68b961c1e1f5b7ef741b7 Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Mon, 30 Mar 2026 15:42:59 +0200 Subject: [PATCH 007/111] Auto reimport --- addons/godot-form-validator/editor_icon.png.import | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/addons/godot-form-validator/editor_icon.png.import b/addons/godot-form-validator/editor_icon.png.import index abf2a09d..cacdeae8 100644 --- a/addons/godot-form-validator/editor_icon.png.import +++ b/addons/godot-form-validator/editor_icon.png.import @@ -18,6 +18,8 @@ dest_files=["res://.godot/imported/editor_icon.png-6f130a2788dfaa185bebbdd85ed98 compress/mode=0 compress/high_quality=false compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 @@ -25,6 +27,10 @@ mipmaps/generate=false mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 process/fix_alpha_border=true process/premult_alpha=false process/normal_map_invert_y=false From d9522bc922f8f53115d9eee14d8c1157e9df8f83 Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Tue, 31 Mar 2026 10:23:35 +0200 Subject: [PATCH 008/111] Redesign gardens with circular layout and new ocean theme Replace rectangular garden backgrounds with circular Garden_01.png asset, arrange lesson buttons in a circular pattern instead of sine-wave layout, and introduce three visual states for buttons (locked/unlocked/completed) using the new lesson_circle.png texture. Add jellyfish mascot to gardens. - Add new assets: Garden_01.png, lesson_circle.png, jellyfish.png - Update garden background to use keep_aspect_centered circular display - Implement circular lesson positioning with configurable radius - Simplify position validation to circle-distance check - Add layout cache versioning to invalidate old layouts - Update boss_button.tscn to match new button design Co-Authored-By: Claude Opus 4.6 (1M context) --- assets/gardens/buttons/lesson_circle.png | Bin 0 -> 2044 bytes .../gardens/buttons/lesson_circle.png.import | 40 ++++++ assets/gardens/gardens/Garden_01.png | Bin 0 -> 17383 bytes assets/gardens/gardens/Garden_01.png.import | 40 ++++++ assets/gardens/jellyfish.png | Bin 0 -> 7671 bytes assets/gardens/jellyfish.png.import | 40 ++++++ resources/gardens/garden.gd | 19 ++- resources/gardens/garden.tscn | 17 ++- sources/gardens/boss_button.tscn | 41 ++++--- sources/gardens/gardens.gd | 115 +++++++----------- sources/lesson_screen/lesson_button.gd | 45 +++++-- sources/lesson_screen/lesson_button.tscn | 45 ++++--- 12 files changed, 284 insertions(+), 118 deletions(-) create mode 100644 assets/gardens/buttons/lesson_circle.png create mode 100644 assets/gardens/buttons/lesson_circle.png.import create mode 100644 assets/gardens/gardens/Garden_01.png create mode 100644 assets/gardens/gardens/Garden_01.png.import create mode 100644 assets/gardens/jellyfish.png create mode 100644 assets/gardens/jellyfish.png.import diff --git a/assets/gardens/buttons/lesson_circle.png b/assets/gardens/buttons/lesson_circle.png new file mode 100644 index 0000000000000000000000000000000000000000..d5b211b28d070172bec7740d73a88490e3946dd1 GIT binary patch literal 2044 zcmVR^}(tW+?X3gT1{O$G6Epi~g2 zg2){t6)aW3$`!0s!Acd({&)q8mPv_U07&q;&e8G5*cQg;@e6>UfFHhp|Bi@n|BBs! z0hj~X>Fwxt&G!m)b+R@h8-RK^sv4ErVj8n+pPu)%&8dE92yH-@0i zux>*E`)Gqz_HFEj+;SJY0awg8cM}R(xzE6VurXW~wIw$UwW2*@RV;-WWGF}MceaY$ zj#5JlT88~~evaFWQQKp)@jPxb-WyWa>BbrgSvQ}6e`D2c7P&2NhEUNmRKD1^T}1WRpfR=t!U4{Z?T?yf;QM6c9hkH7(tt1r99U4jYKbuO|0oD9ngfvQ`Ginc@{8>(NiOH1Cb zxB0GUYqU-|2Cvv8!P|_~XGL41kd4IyHh%V2*?a}<359HI9`JbExR0PMfj>O_T=DNS z))V!v@1QNwz<=!A1ff@bP6p=aI$27-(c`tYzJiuv%Nhz*Xzemp_w;l@w`;rNeBrOVGBc%bb!U=i9s* zYuk0MP{^jnjn`UfQ_<$w&2utMt*)=N30jU`OfqGyy3nRw=MxIq)ZOE`qRp@rYnCYh zUuf`p(Iypbg+eB0>n2}Zx1wdhe_J$0(pLN0THT7aYTFV?+KQUXQ+0xtp=Bm1_X(RI z-c+aST%({#wIemE+O3L~p^(XS_tbc8=&hiw`e=zHZ*}Vnu63O=;D3F#Mv``Q270Zc z)f(i9oGh>X>1a{>pcu4XwkHxfd6y>zO?-KvaOZ6?XnJ9=^zE&9-Cce{q(>iu zmc?m@BrbFBsG^Bas%R2~f+j({?bV{7iEnc_2Te;);>!%epQ$brb%$o0;@1K!Xx@)G z7E#wJK`3Yvgn}kPC}nyo&g;0}I+AZaXA#J5bjt zfw-W(Ms0hgyol?D7zo+!xxD(u&3mjY+2CO-kTyRD;<87 z9d!-1B&E&yq>UdbSv#+~m0ObnY2%fO8#Jnd_Ux@GlCsL&R0VB^F5XHrN3QgQ*Ios+ z?!76JvcI`yXXs~ObWdqY)Cs?@4xP_LqaRkbaefy#Tesu|SZP3Qou zS~f<~^g@F>ed<;;CkH+^YmX%8h@By}tNRU2_eXnb`1O*eXBzHq(6pktC;6@EH%T&H zX>lTAo1kf8Fl|54VpoGUTZYTW7SXXpXwjX=&AEI$eSWmhOixKR`y| zh@B+ddLy8&yK*nlc2`sIM91Bxx(02FE_tNxg&uAf>)LfX8n30P)3~gtub_ce4N`Li zGJ4ubyU&wT9?`)Vsc?h;-gay6v!a3ST}#C;^!(c1zR!X>V1EgkiH_G-JiLJ1$Dw0e z6t=PYil-MO`8wTBVH+QBAp^h1C@O5@;WcF7|GZ9xZTP&048j}?>%yi>AH#CQW|!*_ zPuBP4jcaDuMO`hz$Jcq0ys3~!T_3RJjF*7VDId9IrJzSL#W+)a34Dw2ykdXk3nH9m z7_#fUw7@P5Y84@jZ$x|{c#MkX-&nTTNl4$v&uYjJKh;mMJt+NdwuAx z-TF3I72CyaM!BH|&B?Gq?9Y+gF=T`5Cd&+|>nyXwCJSHCcJ!C_*f1kw;30$I2hGW` z@tXqoK49ypEoorrU1yaH8^b*^oeRGIV8e(!aywcXYtWn-Ha=OB=3@OGTRmyKP1Mkg zJ!nO9EO3vEd#59J)Qx*2A*G-dxzH^bN2S|iU1Czjv>%d0<00002kW2! literal 0 HcmV?d00001 diff --git a/assets/gardens/buttons/lesson_circle.png.import b/assets/gardens/buttons/lesson_circle.png.import new file mode 100644 index 00000000..8ea545ff --- /dev/null +++ b/assets/gardens/buttons/lesson_circle.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cxjy5f7oyl8mq" +path="res://.godot/imported/lesson_circle.png-05f9dc6a36bb9c72360b598507504f72.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/gardens/buttons/lesson_circle.png" +dest_files=["res://.godot/imported/lesson_circle.png-05f9dc6a36bb9c72360b598507504f72.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/gardens/gardens/Garden_01.png b/assets/gardens/gardens/Garden_01.png new file mode 100644 index 0000000000000000000000000000000000000000..8beebe1598817431ecb54366346418f59e0fdb28 GIT binary patch literal 17383 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 PackedScene: + if not _lesson_button_scene_cache: + _lesson_button_scene_cache = load(LESSON_BUTTON_SCENE_PATH) + return _lesson_button_scene_cache const FLOWER_MATERIAL_PATH: String = "res://resources/gardens/flower_material.tres" const FLOWER_Z_INDEX: int = 1 @@ -96,7 +103,11 @@ func set_lesson_buttons(p_lesson_buttons: Array[GardenLayout.GardenLayoutLessonB func set_background(p_color: int) -> void: if not background: return - background.texture = load(BACKGROUND_PATH_MODEL % [p_color+1]) + var path: String = BACKGROUND_PATH_MODEL % [p_color + 1] + if ResourceLoader.exists(path): + background.texture = load(path) + else: + background.texture = load(BACKGROUND_PATH_MODEL % [1]) color = garden_colors[p_color] for button: LessonButton in get_lesson_buttons(): button.completed_color = color @@ -104,7 +115,7 @@ func set_background(p_color: int) -> void: func _ensure_button_controls_count(target_count: int) -> void: while get_lesson_buttons().size() < target_count: - var new_button: LessonButton = LESSON_BUTTON_SCENE.instantiate() + var new_button: LessonButton = get_lesson_button_scene().instantiate() new_button.completed_color = color buttons.add_child(new_button) new_button.owner = self diff --git a/resources/gardens/garden.tscn b/resources/gardens/garden.tscn index 147dd98d..0968e2fc 100644 --- a/resources/gardens/garden.tscn +++ b/resources/gardens/garden.tscn @@ -1,11 +1,12 @@ [gd_scene format=3 uid="uid://btg3qd8eld1mm"] [ext_resource type="Script" uid="uid://ch5h4p1o54whq" path="res://resources/gardens/garden.gd" id="1_5owem"] -[ext_resource type="Texture2D" uid="uid://b5kildofgmthb" path="res://assets/gardens/gardens/garden_01_open.png" id="3_p7iv3"] +[ext_resource type="Texture2D" uid="uid://d26hapg1hf8a6" path="res://assets/gardens/gardens/Garden_01.png" id="3_p7iv3"] +[ext_resource type="Texture2D" uid="uid://bfqwlmmliem8f" path="res://assets/gardens/jellyfish.png" id="jellyfish_tex"] [ext_resource type="PackedScene" uid="uid://delcgui3v0eek" path="res://sources/lesson_screen/lesson_button.tscn" id="4_epm30"] [node name="Garden" type="Control" unique_id=1950346826] -custom_minimum_size = Vector2(2400, 2.08165e-12) +custom_minimum_size = Vector2(1800, 2.08165e-12) layout_mode = 3 anchors_preset = 15 anchor_right = 1.0 @@ -27,6 +28,7 @@ grow_vertical = 2 mouse_filter = 2 texture = ExtResource("3_p7iv3") expand_mode = 1 +stretch_mode = 3 [node name="Buttons" type="Control" parent="." unique_id=1943933146] layout_mode = 1 @@ -41,6 +43,17 @@ mouse_filter = 2 layout_mode = 0 completed_color = Color(0.588235, 0.439216, 0.878431, 1) +[node name="Jellyfish" type="TextureRect" parent="."] +layout_mode = 0 +offset_left = 1300.0 +offset_top = 80.0 +offset_right = 1500.0 +offset_bottom = 420.0 +mouse_filter = 2 +texture = ExtResource("jellyfish_tex") +expand_mode = 1 +stretch_mode = 5 + [node name="Flowers" type="Control" parent="." unique_id=1191503680] layout_mode = 1 anchors_preset = 15 diff --git a/sources/gardens/boss_button.tscn b/sources/gardens/boss_button.tscn index b0f6b52f..129d9d48 100644 --- a/sources/gardens/boss_button.tscn +++ b/sources/gardens/boss_button.tscn @@ -1,11 +1,7 @@ [gd_scene format=3 uid="uid://dkxci0n2tcyxc"] -[ext_resource type="Texture2D" uid="uid://3iuuq06ovbos" path="res://assets/theme/button_normal_empty.svg" id="1_pdrhc"] -[ext_resource type="Texture2D" uid="uid://j7sffldhbunj" path="res://assets/theme/button_pressed_empty.svg" id="2_2g676"] -[ext_resource type="Texture2D" uid="uid://be30a3cmy0w46" path="res://assets/theme/button_focused_empty.svg" id="3_fksie"] -[ext_resource type="Texture2D" uid="uid://c0rumwiaimvxy" path="res://assets/theme/button_disabled.svg" id="4_4vg60"] +[ext_resource type="Texture2D" uid="uid://cxjy5f7oyl8mq" path="res://assets/gardens/buttons/lesson_circle.png" id="lesson_circle"] [ext_resource type="Script" uid="uid://bbjhs5nta7xxj" path="res://sources/gardens/boss_button.gd" id="5_3d6pj"] -[ext_resource type="Texture2D" uid="uid://dwk8xgv3xsmm0" path="res://assets/theme/button_center.svg" id="6_o0qkw"] [ext_resource type="PackedScene" uid="uid://cn2rw06pltyiu" path="res://sources/utils/fx/right.tscn" id="7_rtwam"] [ext_resource type="Texture2D" uid="uid://cfnjk06m367r3" path="res://assets/minigames/boss/boss_icon.png" id="8_oy4mt"] @@ -16,11 +12,11 @@ offset_bottom = 512.0 pivot_offset = Vector2(180, 180) size_flags_horizontal = 4 size_flags_vertical = 4 -texture_normal = ExtResource("1_pdrhc") -texture_pressed = ExtResource("2_2g676") -texture_hover = ExtResource("3_fksie") -texture_disabled = ExtResource("4_4vg60") -texture_focused = ExtResource("1_pdrhc") +texture_normal = ExtResource("lesson_circle") +texture_pressed = ExtResource("lesson_circle") +texture_hover = ExtResource("lesson_circle") +texture_disabled = ExtResource("lesson_circle") +texture_focused = ExtResource("lesson_circle") stretch_mode = 0 script = ExtResource("5_3d6pj") icon_texture = ExtResource("8_oy4mt") @@ -39,6 +35,23 @@ anchor_bottom = 0.5 grow_horizontal = 2 grow_vertical = 2 +[node name="Border" type="TextureRect" parent="." unique_id=758604924] +unique_name_in_owner = true +visible = false +show_behind_parent = true +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = -15.0 +offset_top = -15.0 +offset_right = 15.0 +offset_bottom = 15.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = ExtResource("lesson_circle") +expand_mode = 1 + [node name="Center" type="TextureRect" parent="." unique_id=758604923] unique_name_in_owner = true show_behind_parent = true @@ -48,7 +61,8 @@ anchor_right = 1.0 anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 -texture = ExtResource("6_o0qkw") +texture = ExtResource("lesson_circle") +expand_mode = 1 [node name="Label" type="Label" parent="." unique_id=962237768] unique_name_in_owner = true @@ -62,8 +76,6 @@ offset_top = 8.0 grow_horizontal = 2 grow_vertical = 2 mouse_filter = 1 -theme_override_colors/font_outline_color = Color(0, 0, 0, 1) -theme_override_constants/outline_size = 10 theme_override_font_sizes/font_size = 110 horizontal_alignment = 1 vertical_alignment = 1 @@ -80,7 +92,8 @@ anchor_right = 1.0 anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 -texture = ExtResource("6_o0qkw") +texture = ExtResource("lesson_circle") +expand_mode = 1 [node name="Icon" type="TextureRect" parent="." unique_id=502041740] unique_name_in_owner = true diff --git a/sources/gardens/gardens.gd b/sources/gardens/gardens.gd index 3d2c8aa7..d1efb567 100644 --- a/sources/gardens/gardens.gd +++ b/sources/gardens/gardens.gd @@ -9,17 +9,20 @@ const LOOK_AND_LEARN_SCENE: PackedScene = preload("res://sources/look_and_learn/ const BOSS_BUTTON_SCENE: PackedScene = preload("res://sources/gardens/boss_button.tscn") const BOSS_MINIGAME_SCENE_PATH: String = "res://sources/minigames/boss/boss_minigame.tscn" const FLOWER_VFX: PackedScene = preload("res://sources/gardens/flower_particle.tscn") -const GARDEN_SIZE: int = 2400 +const GARDEN_SIZE: int = 1800 const GARDEN_TEXTURES_NB: int = 20 const FLOWER_TYPES_NB: int = 5 -const FLOWER_OFFSET_FROM_LESSON: float = 200.0 -const LESSON_VERTICAL_BASE: float = 920.0 -const LESSON_VERTICAL_RANGE: float = 300.0 +const FLOWER_OFFSET_FROM_LESSON: float = 150.0 +const GARDEN_CENTER_Y: float = 900.0 +const GARDEN_CIRCLE_RADIUS: float = 650.0 +const LESSON_CIRCLE_RADIUS: float = 450.0 +const LESSON_START_ANGLE: float = -PI / 2.0 const FINAL_BOSS_PADDING: float = 120.0 const TRANSPARENCY_THRESHOLD: float = 0.05 const POSITION_SEARCH_STEP: int = 40 const MAX_POSITION_SEARCH_RADIUS: int = 300 const BACK_BUTTON_HOLD_DURATION_SECONDS: float = 1.0 +const LAYOUT_VERSION: int = 2 static var lesson_button_half_size: Vector2 = Vector2.ZERO static var garden_alpha_cache: Dictionary = {} @@ -161,7 +164,7 @@ func _apply_progression_to_gardens(transition_context: Dictionary) -> void: for button_index: int in range(lesson_buttons.size()): var button: LessonButton = lesson_buttons[button_index] if not lesson_index in lessons: - button.set_disabled(true) + button.set_button_disabled(true) if button_index < garden_control.flowers_visible.size(): garden_control.flowers_visible[button_index] = false continue @@ -171,12 +174,12 @@ func _apply_progression_to_gardens(transition_context: Dictionary) -> void: var is_blocked_by_boss: bool = UserDataManager.student_progression.is_lesson_blocked_by_boss(lesson_index) var is_lesson_unlocked: bool = lesson_unlocks["look_and_learn"] != StudentProgression.Status.Locked and not is_blocked_by_boss var is_look_and_learn_completed: bool = lesson_unlocks["look_and_learn"] == StudentProgression.Status.Completed and not is_blocked_by_boss - button.set_disabled(not is_lesson_unlocked) + button.set_button_disabled(not is_lesson_unlocked) if button_index < garden_control.flowers_visible.size(): garden_control.flowers_visible[button_index] = is_look_and_learn_completed if transition_context.new_lesson_unlocked and lesson_index == transition_context.newly_unlocked_lesson_number: - button.set_disabled(true) + button.set_button_disabled(true) if not(transition_context.new_lesson_unlocked and lesson_index == transition_context.newly_unlocked_lesson_number - 1): button.completed = UserDataManager.student_progression.is_lesson_completed(lesson_index) and not is_blocked_by_boss @@ -373,7 +376,7 @@ func _play_new_lesson_unlock_sequence() -> void: # Enable the next lesson button if new_lesson_button: - new_lesson_button.set_disabled(false) + new_lesson_button.set_button_disabled(false) #endregion @@ -459,19 +462,14 @@ static func _get_garden_background_image(garden_color_index: int) -> Image: return garden_image -static func _get_garden_dimensions(garden_color_index: int, garden_image: Image = null) -> Vector2: - if not garden_image: - garden_image = _get_garden_background_image(garden_color_index) - if not garden_image: - return Vector2(GARDEN_SIZE, LESSON_VERTICAL_BASE + LESSON_VERTICAL_RANGE) - var width_scale: float = float(GARDEN_SIZE) / float(maxf(1, garden_image.get_width())) - return Vector2(GARDEN_SIZE, float(garden_image.get_height()) * width_scale) +static func _get_garden_dimensions(_garden_color_index: int, _garden_image: Image = null) -> Vector2: + return Vector2(GARDEN_SIZE, GARDEN_CENTER_Y * 2.0) static func _get_lesson_button_half_size() -> Vector2: if lesson_button_half_size != Vector2.ZERO: return lesson_button_half_size - var button: LessonButton = Garden.LESSON_BUTTON_SCENE.instantiate() + var button: LessonButton = Garden.get_lesson_button_scene().instantiate() var measured_size: Vector2 = button.get_combined_minimum_size() if measured_size == Vector2.ZERO: measured_size = button.get_rect().size @@ -492,7 +490,7 @@ static func _get_layout_cache_base_dir() -> String: static func _get_layout_cache_path(session_id: int, total_lessons: int) -> String: - return _get_layout_cache_base_dir().path_join("layout_%s_%s.tres" % [str(session_id), str(total_lessons)]) + return _get_layout_cache_base_dir().path_join("layout_v%s_%s_%s.tres" % [str(LAYOUT_VERSION), str(session_id), str(total_lessons)]) static func _load_layout_from_cache(session_id: int, total_lessons: int) -> GardensLayout: @@ -538,49 +536,14 @@ static func _is_position_on_garden_texture(garden_color_index: int, tested_posit return true -static func _find_valid_position_on_garden(garden_color_index: int, tested_position: Vector2, garden_dimensions: Vector2, probe_half_size: Vector2 = Vector2.ZERO) -> Vector2: - var garden_image: Image = _get_garden_background_image(garden_color_index) - if not garden_image: - return Utils.clamp_position_to_area(tested_position, garden_dimensions, probe_half_size) - var clamped: Vector2 = Utils.clamp_position_to_area(tested_position, garden_dimensions, probe_half_size) - if _is_position_on_garden_texture(garden_color_index, clamped, garden_dimensions, probe_half_size, garden_image): - return clamped - # Try moving toward the center first (helps for very irregular shapes). - var center: Vector2 = garden_dimensions * 0.5 - var toward_center: Vector2 = (center - clamped).normalized() - if toward_center.length() > 0.0: - for radius: int in range(POSITION_SEARCH_STEP, MAX_POSITION_SEARCH_RADIUS + POSITION_SEARCH_STEP, POSITION_SEARCH_STEP): - var candidate: Vector2 = Utils.clamp_position_to_area(clamped + toward_center * float(radius), garden_dimensions, probe_half_size) - if _is_position_on_garden_texture(garden_color_index, candidate, garden_dimensions, probe_half_size, garden_image): - return candidate - # Radial scan around the point. - var angles: Array[float] = [] - for angle_deg: int in range(0, 360, 30): - angles.append(deg_to_rad(angle_deg)) - for radius: int in range(POSITION_SEARCH_STEP, MAX_POSITION_SEARCH_RADIUS + POSITION_SEARCH_STEP, POSITION_SEARCH_STEP): - for angle: float in angles: - var offset: Vector2 = Vector2.RIGHT.rotated(angle) * float(radius) - var candidate2: Vector2 = Utils.clamp_position_to_area(clamped + offset, garden_dimensions, probe_half_size) - if _is_position_on_garden_texture(garden_color_index, candidate2, garden_dimensions, probe_half_size, garden_image): - return candidate2 - # Fallback for very irregular gardens: search the whole texture to find the closest valid spot. - # This is slower than the radial scan, so we only run it as a last resort. - Log.trace("Gardens: Falling back to full texture scan for garden %s from position %s" % [str(garden_color_index), str(clamped)]) - var closest_valid_position: Vector2 = clamped - var closest_distance: float = INF - for height: int in range(0, int(garden_dimensions.y) + POSITION_SEARCH_STEP, POSITION_SEARCH_STEP): - for width: int in range(0, int(garden_dimensions.x) + POSITION_SEARCH_STEP, POSITION_SEARCH_STEP): - var candidate3: Vector2 = Utils.clamp_position_to_area(Vector2(float(width), float(height)), garden_dimensions, probe_half_size) - if not _is_position_on_garden_texture(garden_color_index, candidate3, garden_dimensions, probe_half_size, garden_image): - continue - var distance: float = candidate3.distance_squared_to(clamped) - if distance < closest_distance: - closest_distance = distance - closest_valid_position = candidate3 - if closest_distance < INF: - Log.trace("Gardens: Full texture scan selected %s for garden %s" % [str(closest_valid_position), str(garden_color_index)]) - return closest_valid_position - return clamped +static func _find_valid_position_on_garden(_garden_color_index: int, tested_position: Vector2, _garden_dimensions: Vector2, _probe_half_size: Vector2 = Vector2.ZERO) -> Vector2: + var center: Vector2 = Vector2(float(GARDEN_SIZE) / 2.0, GARDEN_CENTER_Y) + var distance: float = tested_position.distance_to(center) + if distance <= GARDEN_CIRCLE_RADIUS: + return tested_position + # Clamp to circle boundary + var direction: Vector2 = (tested_position - center).normalized() + return center + direction * GARDEN_CIRCLE_RADIUS static func _find_overlapping_position_index(tested_position: Vector2, placed_positions: Array[Vector2], min_distance: float, ignore_index: int = -1) -> int: @@ -782,16 +745,20 @@ static func _generate_lesson_positions(lessons_for_garden: int, garden_index: in if lessons_for_garden <= 0: Log.trace("Gardens: No lessons for garden %s, returning empty positions" % str(garden_index)) return positions - var spacing: float = float(GARDEN_SIZE) / float(lessons_for_garden + 1) - Log.trace("Gardens: Garden %s lesson spacing calculated as %s" % [str(garden_index), str(spacing)]) - var vertical_phase: float = float(garden_index % 3) * 0.65 - Log.trace("Gardens: Garden %s vertical phase set to %s" % [str(garden_index), str(vertical_phase)]) - for lesson_index: int in range(lessons_for_garden): - var x_pos: int = int(spacing * float(lesson_index + 1)) - var wave_position: float = float(lesson_index) / maxf(1.0, lessons_for_garden - 1) - var y_pos: int = int(LESSON_VERTICAL_BASE + sin(vertical_phase + wave_position * PI) * LESSON_VERTICAL_RANGE) - Log.trace("Gardens: Garden %s lesson %s position -> x: %s, wave position: %s, y: %s" % [str(garden_index), str(lesson_index), str(x_pos), str(wave_position), str(y_pos)]) - positions.append(Vector2i(x_pos, y_pos)) + var center: Vector2 = Vector2(float(GARDEN_SIZE) / 2.0, GARDEN_CENTER_Y) + Log.trace("Gardens: Garden %s circle center at %s" % [str(garden_index), str(center)]) + if lessons_for_garden == 1: + positions.append(Vector2i(int(center.x), int(center.y))) + Log.trace("Gardens: Garden %s single lesson placed at center" % str(garden_index)) + else: + var angle_step: float = TAU / float(lessons_for_garden) + var phase_offset: float = float(garden_index % 5) * 0.4 + for lesson_index: int in range(lessons_for_garden): + var angle: float = LESSON_START_ANGLE + phase_offset + angle_step * float(lesson_index) + var x_pos: int = int(center.x + cos(angle) * LESSON_CIRCLE_RADIUS) + var y_pos: int = int(center.y + sin(angle) * LESSON_CIRCLE_RADIUS) + Log.trace("Gardens: Garden %s lesson %s angle: %s, position: (%s, %s)" % [str(garden_index), str(lesson_index), str(angle), str(x_pos), str(y_pos)]) + positions.append(Vector2i(x_pos, y_pos)) Log.info("Gardens: Completed lesson positions for garden %s" % str(garden_index)) return positions @@ -886,7 +853,7 @@ func _open_minigames_layout(button: LessonButton, lesson_number: int) -> void: func _handle_lesson_button(lesson_number: int, status: StudentProgression.Status, color: Color) -> void: lesson_button.text = lessons[lesson_number][0].grapheme lesson_button.completed_color = color - lesson_button.set_disabled(status == StudentProgression.Status.Locked) + lesson_button.set_button_disabled(status == StudentProgression.Status.Locked) lesson_button.completed = status == StudentProgression.Status.Completed lesson_button_particles.emitting = status == StudentProgression.Status.Unlocked if status == StudentProgression.Status.Completed: @@ -1148,10 +1115,10 @@ func _set_up_boss_buttons() -> void: var is_completed: bool = UserDataManager.student_progression.is_boss_completed(gate_lesson) var is_blocked_by_boss: bool = UserDataManager.student_progression.is_lesson_blocked_by_boss(gate_lesson) var is_unlocked: bool = UserDataManager.student_progression.is_lesson_completed(gate_lesson) and not is_blocked_by_boss - boss_button.set_disabled(not is_unlocked and not is_completed) + boss_button.set_button_disabled(not is_unlocked and not is_completed) boss_button.completed = is_completed else: - boss_button.set_disabled(true) + boss_button.set_button_disabled(true) var garden_index: int = _get_garden_index_for_lesson(gate_lesson) boss_button.pressed.connect(_on_boss_button_pressed.bind(gate_lesson, garden_index)) _set_up_final_boss_button() @@ -1178,7 +1145,7 @@ func _set_up_final_boss_button() -> void: boss_button.size = final_boss_size boss_button.pivot_offset = final_boss_size * 0.5 boss_button.position = final_boss_center - final_boss_size * 0.5 - boss_button.set_disabled(false) + boss_button.set_button_disabled(false) boss_button.pressed.connect(_on_final_boss_button_pressed.bind(final_lesson_number, last_garden_index)) _update_final_boss_scroll_space(final_boss_center, final_boss_size) diff --git a/sources/lesson_screen/lesson_button.gd b/sources/lesson_screen/lesson_button.gd index 9576b038..52f0ce7e 100644 --- a/sources/lesson_screen/lesson_button.gd +++ b/sources/lesson_screen/lesson_button.gd @@ -1,6 +1,14 @@ class_name LessonButton extends TextureButton +const LOCKED_COLOR: Color = Color("cccccc") +const LOCKED_LABEL_COLOR: Color = Color("999999") +const UNLOCKED_FILL_COLOR: Color = Color("176d78") +const UNLOCKED_LABEL_COLOR: Color = Color("9be3ea") +const UNLOCKED_BORDER_COLOR: Color = Color("fbb03b") +const COMPLETED_FILL_COLOR: Color = Color("9be3ea") +const COMPLETED_LABEL_COLOR: Color = Color("0a555b") + @export_color_no_alpha var base_color: Color: set = _set_base_color @export_color_no_alpha var completed_color: Color: @@ -11,6 +19,7 @@ extends TextureButton set = _set_completed @onready var center: TextureRect = %Center +@onready var border: TextureRect = %Border @onready var label: Label = %Label @onready var placeholder: TextureRect = %Placeholder @onready var right_fx: RightFX = %RightFX @@ -20,6 +29,7 @@ func _ready() -> void: _set_base_color(base_color) _set_completed_color(completed_color) _set_text(text) + _update_visual_state() func show_placeholder(is_shown: bool) -> void: @@ -32,16 +42,33 @@ func right() -> void: await right_fx.finished +func _update_visual_state() -> void: + if not center or not border or not label: + return + if disabled: + # Locked state + center.modulate = LOCKED_COLOR + border.visible = false + label.add_theme_color_override("font_color", LOCKED_LABEL_COLOR) + elif completed: + # Completed state + center.modulate = COMPLETED_FILL_COLOR + border.visible = false + label.add_theme_color_override("font_color", COMPLETED_LABEL_COLOR) + else: + # Unlocked state + center.modulate = UNLOCKED_FILL_COLOR + border.visible = true + border.modulate = UNLOCKED_BORDER_COLOR + label.add_theme_color_override("font_color", UNLOCKED_LABEL_COLOR) + + func _set_base_color(color: Color) -> void: base_color = color - if center and not completed: - center.modulate = color func _set_completed_color(color: Color) -> void: completed_color = color - if center and completed: - center.modulate = color func _set_text(value: String) -> void: @@ -52,7 +79,9 @@ func _set_text(value: String) -> void: func _set_completed(value: bool) -> void: completed = value - if completed: - center.modulate = completed_color - else: - center.modulate = base_color + _update_visual_state() + + +func set_button_disabled(value: bool) -> void: + disabled = value + _update_visual_state() diff --git a/sources/lesson_screen/lesson_button.tscn b/sources/lesson_screen/lesson_button.tscn index c84cff58..d8d9a799 100644 --- a/sources/lesson_screen/lesson_button.tscn +++ b/sources/lesson_screen/lesson_button.tscn @@ -1,11 +1,7 @@ [gd_scene format=3 uid="uid://delcgui3v0eek"] -[ext_resource type="Texture2D" uid="uid://3iuuq06ovbos" path="res://assets/theme/button_normal_empty.svg" id="1_pdrhc"] -[ext_resource type="Texture2D" uid="uid://j7sffldhbunj" path="res://assets/theme/button_pressed_empty.svg" id="2_2g676"] -[ext_resource type="Texture2D" uid="uid://be30a3cmy0w46" path="res://assets/theme/button_focused_empty.svg" id="3_fksie"] -[ext_resource type="Texture2D" uid="uid://c0rumwiaimvxy" path="res://assets/theme/button_disabled.svg" id="4_4vg60"] +[ext_resource type="Texture2D" uid="uid://cxjy5f7oyl8mq" path="res://assets/gardens/buttons/lesson_circle.png" id="lesson_circle"] [ext_resource type="Script" uid="uid://d1gj4en3e7b8b" path="res://sources/lesson_screen/lesson_button.gd" id="4_mbltp"] -[ext_resource type="Texture2D" uid="uid://dwk8xgv3xsmm0" path="res://assets/theme/button_center.svg" id="6_o0qkw"] [ext_resource type="PackedScene" uid="uid://cn2rw06pltyiu" path="res://sources/utils/fx/right.tscn" id="7_rtwam"] [node name="LessonButton" type="TextureButton" unique_id=530361935] @@ -15,15 +11,15 @@ offset_bottom = 300.0 pivot_offset = Vector2(150, 150) size_flags_horizontal = 4 size_flags_vertical = 4 -texture_normal = ExtResource("1_pdrhc") -texture_pressed = ExtResource("2_2g676") -texture_hover = ExtResource("3_fksie") -texture_disabled = ExtResource("4_4vg60") -texture_focused = ExtResource("1_pdrhc") +texture_normal = ExtResource("lesson_circle") +texture_pressed = ExtResource("lesson_circle") +texture_hover = ExtResource("lesson_circle") +texture_disabled = ExtResource("lesson_circle") +texture_focused = ExtResource("lesson_circle") stretch_mode = 0 script = ExtResource("4_mbltp") -base_color = Color(0.109804, 0.14902, 0.384314, 1) -completed_color = Color(0.109804, 0.14902, 0.384314, 1) +base_color = Color(0.0901961, 0.427451, 0.470588, 1) +completed_color = Color(0.0901961, 0.427451, 0.470588, 1) [node name="RightFX" parent="." unique_id=1485482935 instance=ExtResource("7_rtwam")] unique_name_in_owner = true @@ -37,6 +33,23 @@ anchor_bottom = 0.5 grow_horizontal = 2 grow_vertical = 2 +[node name="Border" type="TextureRect" parent="." unique_id=1026350138] +unique_name_in_owner = true +visible = false +show_behind_parent = true +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = -15.0 +offset_top = -15.0 +offset_right = 15.0 +offset_bottom = 15.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = ExtResource("lesson_circle") +expand_mode = 1 + [node name="Center" type="TextureRect" parent="." unique_id=1026350137] unique_name_in_owner = true show_behind_parent = true @@ -46,7 +59,8 @@ anchor_right = 1.0 anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 -texture = ExtResource("6_o0qkw") +texture = ExtResource("lesson_circle") +expand_mode = 1 [node name="Label" type="Label" parent="." unique_id=540958749] unique_name_in_owner = true @@ -60,8 +74,6 @@ offset_top = 8.0 grow_horizontal = 2 grow_vertical = 2 mouse_filter = 1 -theme_override_colors/font_outline_color = Color(0, 0, 0, 1) -theme_override_constants/outline_size = 10 theme_override_font_sizes/font_size = 110 horizontal_alignment = 1 vertical_alignment = 1 @@ -78,4 +90,5 @@ anchor_right = 1.0 anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 -texture = ExtResource("6_o0qkw") +texture = ExtResource("lesson_circle") +expand_mode = 1 From dc83e7b4e21ec36e7d1cb6ca1199de8cafab62e0 Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Tue, 31 Mar 2026 11:22:46 +0200 Subject: [PATCH 009/111] Fix garden visuals: tint, sizing, button layout and colors - Tint garden background #176d78 via modulate in set_background() - Fix background as 1700x1700 centered square instead of stretched - Make TextureButton self_modulate transparent so Center/Border are visible - Diagonal lesson layout from bottom-left to upper-right matching mockup - Center buttons on generated positions instead of top-left alignment - Increase garden size back to 2400 with 850px circle radius Co-Authored-By: Claude Opus 4.6 (1M context) --- resources/gardens/garden.gd | 7 ++++-- resources/gardens/garden.tscn | 23 ++++++++++---------- sources/gardens/boss_button.tscn | 1 + sources/gardens/gardens.gd | 27 +++++++++++++----------- sources/lesson_screen/lesson_button.tscn | 1 + 5 files changed, 33 insertions(+), 26 deletions(-) diff --git a/resources/gardens/garden.gd b/resources/gardens/garden.gd index 6b82ad25..f23ee336 100644 --- a/resources/gardens/garden.gd +++ b/resources/gardens/garden.gd @@ -95,9 +95,11 @@ func set_lesson_buttons(p_lesson_buttons: Array[GardenLayout.GardenLayoutLessonB for index: int in range(p_lesson_buttons.size()): var lesson_button: GardenLayout.GardenLayoutLessonButton = p_lesson_buttons[index] var lesson_button_control: LessonButton = lesson_buttons[index] - lesson_button_control.position = Vector2(lesson_button.position) + # Center the button on the generated position + var half_size: Vector2 = lesson_button_control.size / 2.0 + lesson_button_control.position = Vector2(lesson_button.position) - half_size lesson_button_control.show() - lesson_button_control.pivot_offset = lesson_button_control.size / 2 + lesson_button_control.pivot_offset = half_size func set_background(p_color: int) -> void: @@ -108,6 +110,7 @@ func set_background(p_color: int) -> void: background.texture = load(path) else: background.texture = load(BACKGROUND_PATH_MODEL % [1]) + background.modulate = Color("176d78") color = garden_colors[p_color] for button: LessonButton in get_lesson_buttons(): button.completed_color = color diff --git a/resources/gardens/garden.tscn b/resources/gardens/garden.tscn index 0968e2fc..47b96d93 100644 --- a/resources/gardens/garden.tscn +++ b/resources/gardens/garden.tscn @@ -6,7 +6,7 @@ [ext_resource type="PackedScene" uid="uid://delcgui3v0eek" path="res://sources/lesson_screen/lesson_button.tscn" id="4_epm30"] [node name="Garden" type="Control" unique_id=1950346826] -custom_minimum_size = Vector2(1800, 2.08165e-12) +custom_minimum_size = Vector2(2400, 2.08165e-12) layout_mode = 3 anchors_preset = 15 anchor_right = 1.0 @@ -19,16 +19,15 @@ garden_colors = Array[Color]([Color(0.588235, 0.439216, 0.878431, 1), Color(1, 0 [node name="Background" type="TextureRect" parent="." unique_id=667507132] unique_name_in_owner = true -layout_mode = 1 -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -grow_horizontal = 2 -grow_vertical = 2 +layout_mode = 0 +offset_left = 350.0 +offset_top = 50.0 +offset_right = 2050.0 +offset_bottom = 1750.0 mouse_filter = 2 texture = ExtResource("3_p7iv3") expand_mode = 1 -stretch_mode = 3 +stretch_mode = 0 [node name="Buttons" type="Control" parent="." unique_id=1943933146] layout_mode = 1 @@ -45,10 +44,10 @@ completed_color = Color(0.588235, 0.439216, 0.878431, 1) [node name="Jellyfish" type="TextureRect" parent="."] layout_mode = 0 -offset_left = 1300.0 -offset_top = 80.0 -offset_right = 1500.0 -offset_bottom = 420.0 +offset_left = 1550.0 +offset_top = -30.0 +offset_right = 1830.0 +offset_bottom = 450.0 mouse_filter = 2 texture = ExtResource("jellyfish_tex") expand_mode = 1 diff --git a/sources/gardens/boss_button.tscn b/sources/gardens/boss_button.tscn index 129d9d48..3f3bf53c 100644 --- a/sources/gardens/boss_button.tscn +++ b/sources/gardens/boss_button.tscn @@ -7,6 +7,7 @@ [node name="BossButton" type="TextureButton" unique_id=1297494779] z_index = 2 +self_modulate = Color(1, 1, 1, 0) offset_right = 512.0 offset_bottom = 512.0 pivot_offset = Vector2(180, 180) diff --git a/sources/gardens/gardens.gd b/sources/gardens/gardens.gd index d1efb567..499b6cb5 100644 --- a/sources/gardens/gardens.gd +++ b/sources/gardens/gardens.gd @@ -9,20 +9,19 @@ const LOOK_AND_LEARN_SCENE: PackedScene = preload("res://sources/look_and_learn/ const BOSS_BUTTON_SCENE: PackedScene = preload("res://sources/gardens/boss_button.tscn") const BOSS_MINIGAME_SCENE_PATH: String = "res://sources/minigames/boss/boss_minigame.tscn" const FLOWER_VFX: PackedScene = preload("res://sources/gardens/flower_particle.tscn") -const GARDEN_SIZE: int = 1800 +const GARDEN_SIZE: int = 2400 const GARDEN_TEXTURES_NB: int = 20 const FLOWER_TYPES_NB: int = 5 const FLOWER_OFFSET_FROM_LESSON: float = 150.0 const GARDEN_CENTER_Y: float = 900.0 -const GARDEN_CIRCLE_RADIUS: float = 650.0 -const LESSON_CIRCLE_RADIUS: float = 450.0 -const LESSON_START_ANGLE: float = -PI / 2.0 +const GARDEN_CIRCLE_RADIUS: float = 850.0 +const LESSON_PATH_SPREAD: float = 0.85 const FINAL_BOSS_PADDING: float = 120.0 const TRANSPARENCY_THRESHOLD: float = 0.05 const POSITION_SEARCH_STEP: int = 40 const MAX_POSITION_SEARCH_RADIUS: int = 300 const BACK_BUTTON_HOLD_DURATION_SECONDS: float = 1.0 -const LAYOUT_VERSION: int = 2 +const LAYOUT_VERSION: int = 8 static var lesson_button_half_size: Vector2 = Vector2.ZERO static var garden_alpha_cache: Dictionary = {} @@ -751,14 +750,18 @@ static func _generate_lesson_positions(lessons_for_garden: int, garden_index: in positions.append(Vector2i(int(center.x), int(center.y))) Log.trace("Gardens: Garden %s single lesson placed at center" % str(garden_index)) else: - var angle_step: float = TAU / float(lessons_for_garden) - var phase_offset: float = float(garden_index % 5) * 0.4 + # Diagonal path from bottom-left to upper-right through the circle, + # matching the design mockup layout. + var half_spread: float = GARDEN_CIRCLE_RADIUS * LESSON_PATH_SPREAD * 0.5 for lesson_index: int in range(lessons_for_garden): - var angle: float = LESSON_START_ANGLE + phase_offset + angle_step * float(lesson_index) - var x_pos: int = int(center.x + cos(angle) * LESSON_CIRCLE_RADIUS) - var y_pos: int = int(center.y + sin(angle) * LESSON_CIRCLE_RADIUS) - Log.trace("Gardens: Garden %s lesson %s angle: %s, position: (%s, %s)" % [str(garden_index), str(lesson_index), str(angle), str(x_pos), str(y_pos)]) - positions.append(Vector2i(x_pos, y_pos)) + var t: float = float(lesson_index) / float(lessons_for_garden - 1) + # Diagonal: bottom-left (t=0) to upper-right (t=1) + var x_pos: float = center.x + (t - 0.5) * half_spread * 2.0 + var y_pos: float = center.y + (0.5 - t) * half_spread * 1.6 + # Slight sine curve to avoid a straight line + x_pos += sin(t * PI) * GARDEN_CIRCLE_RADIUS * 0.08 + Log.trace("Gardens: Garden %s lesson %s t: %s, position: (%s, %s)" % [str(garden_index), str(lesson_index), str(t), str(x_pos), str(y_pos)]) + positions.append(Vector2i(int(x_pos), int(y_pos))) Log.info("Gardens: Completed lesson positions for garden %s" % str(garden_index)) return positions diff --git a/sources/lesson_screen/lesson_button.tscn b/sources/lesson_screen/lesson_button.tscn index d8d9a799..863975b2 100644 --- a/sources/lesson_screen/lesson_button.tscn +++ b/sources/lesson_screen/lesson_button.tscn @@ -6,6 +6,7 @@ [node name="LessonButton" type="TextureButton" unique_id=530361935] z_index = 1 +self_modulate = Color(1, 1, 1, 0) offset_right = 300.0 offset_bottom = 300.0 pivot_offset = Vector2(150, 150) From 56f003d43301a4fb70bdd2d42a3cade9ab52a977 Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Tue, 31 Mar 2026 14:18:51 +0200 Subject: [PATCH 010/111] Simplify: remove dead code, unused exports, and duplicate colors - Remove dead functions: _get_garden_background_image, _is_position_on_garden_texture, _get_garden_dimensions, and associated constants/caches - Remove unused base_color/completed_color exports from LessonButton (colors now driven by constants in _update_visual_state) - Use LessonButton.UNLOCKED_FILL_COLOR instead of duplicate Color("176d78") - Inline garden dimensions as constant expression - Remove unused color parameter from _handle_lesson_button - Fix missing blank line in garden.gd constant block Co-Authored-By: Claude Opus 4.6 (1M context) --- resources/gardens/garden.gd | 14 ++----- resources/gardens/garden.tscn | 1 - sources/gardens/boss_button.tscn | 2 - sources/gardens/gardens.gd | 52 ++---------------------- sources/lesson_screen/lesson_button.gd | 27 +++--------- sources/lesson_screen/lesson_button.tscn | 2 - 6 files changed, 13 insertions(+), 85 deletions(-) diff --git a/resources/gardens/garden.gd b/resources/gardens/garden.gd index f23ee336..028acf10 100644 --- a/resources/gardens/garden.gd +++ b/resources/gardens/garden.gd @@ -12,6 +12,7 @@ enum FlowerSizes{ const FLOWER_PATH_MODEL: String = "res://assets/gardens/flowers/plant_%02d_%02d_%s.png" const BACKGROUND_PATH_MODEL: String = "res://assets/gardens/gardens/Garden_%02d.png" const LESSON_BUTTON_SCENE_PATH: String = "res://sources/lesson_screen/lesson_button.tscn" +const FLOWER_MATERIAL_PATH: String = "res://resources/gardens/flower_material.tres" static var _lesson_button_scene_cache: PackedScene = null @@ -19,7 +20,6 @@ static func get_lesson_button_scene() -> PackedScene: if not _lesson_button_scene_cache: _lesson_button_scene_cache = load(LESSON_BUTTON_SCENE_PATH) return _lesson_button_scene_cache -const FLOWER_MATERIAL_PATH: String = "res://resources/gardens/flower_material.tres" const FLOWER_Z_INDEX: int = 1 @export var garden_layout: GardenLayout: @@ -95,7 +95,6 @@ func set_lesson_buttons(p_lesson_buttons: Array[GardenLayout.GardenLayoutLessonB for index: int in range(p_lesson_buttons.size()): var lesson_button: GardenLayout.GardenLayoutLessonButton = p_lesson_buttons[index] var lesson_button_control: LessonButton = lesson_buttons[index] - # Center the button on the generated position var half_size: Vector2 = lesson_button_control.size / 2.0 lesson_button_control.position = Vector2(lesson_button.position) - half_size lesson_button_control.show() @@ -106,20 +105,15 @@ func set_background(p_color: int) -> void: if not background: return var path: String = BACKGROUND_PATH_MODEL % [p_color + 1] - if ResourceLoader.exists(path): - background.texture = load(path) - else: - background.texture = load(BACKGROUND_PATH_MODEL % [1]) - background.modulate = Color("176d78") + var texture: Texture2D = load(path) if ResourceLoader.exists(path) else load(BACKGROUND_PATH_MODEL % [1]) + background.texture = texture + background.modulate = LessonButton.UNLOCKED_FILL_COLOR color = garden_colors[p_color] - for button: LessonButton in get_lesson_buttons(): - button.completed_color = color func _ensure_button_controls_count(target_count: int) -> void: while get_lesson_buttons().size() < target_count: var new_button: LessonButton = get_lesson_button_scene().instantiate() - new_button.completed_color = color buttons.add_child(new_button) new_button.owner = self diff --git a/resources/gardens/garden.tscn b/resources/gardens/garden.tscn index 47b96d93..4e0d290f 100644 --- a/resources/gardens/garden.tscn +++ b/resources/gardens/garden.tscn @@ -40,7 +40,6 @@ mouse_filter = 2 [node name="LessonButton" parent="Buttons" unique_id=1734726442 instance=ExtResource("4_epm30")] layout_mode = 0 -completed_color = Color(0.588235, 0.439216, 0.878431, 1) [node name="Jellyfish" type="TextureRect" parent="."] layout_mode = 0 diff --git a/sources/gardens/boss_button.tscn b/sources/gardens/boss_button.tscn index 3f3bf53c..5b38bd28 100644 --- a/sources/gardens/boss_button.tscn +++ b/sources/gardens/boss_button.tscn @@ -21,8 +21,6 @@ texture_focused = ExtResource("lesson_circle") stretch_mode = 0 script = ExtResource("5_3d6pj") icon_texture = ExtResource("8_oy4mt") -base_color = Color(0.537255, 0.231373, 0.8, 1) -completed_color = Color(0.537255, 0.231373, 0.8, 1) [node name="RightFX" parent="." unique_id=1100015067 instance=ExtResource("7_rtwam")] unique_name_in_owner = true diff --git a/sources/gardens/gardens.gd b/sources/gardens/gardens.gd index 499b6cb5..763e2540 100644 --- a/sources/gardens/gardens.gd +++ b/sources/gardens/gardens.gd @@ -17,14 +17,10 @@ const GARDEN_CENTER_Y: float = 900.0 const GARDEN_CIRCLE_RADIUS: float = 850.0 const LESSON_PATH_SPREAD: float = 0.85 const FINAL_BOSS_PADDING: float = 120.0 -const TRANSPARENCY_THRESHOLD: float = 0.05 -const POSITION_SEARCH_STEP: int = 40 -const MAX_POSITION_SEARCH_RADIUS: int = 300 const BACK_BUTTON_HOLD_DURATION_SECONDS: float = 1.0 -const LAYOUT_VERSION: int = 8 +const LAYOUT_VERSION: int = 9 static var lesson_button_half_size: Vector2 = Vector2.ZERO -static var garden_alpha_cache: Dictionary = {} static var transition_data: Dictionary = {} static var cached_gardens_layout: GardensLayout static var cached_layout_session_id: int = -1 @@ -444,26 +440,6 @@ func _play_brain_tutorial() -> void: #region Garden layout helpers -static func _get_garden_background_image(garden_color_index: int) -> Image: - if garden_alpha_cache.has(garden_color_index): - return garden_alpha_cache[garden_color_index] - - var path: String = Garden.BACKGROUND_PATH_MODEL % [garden_color_index + 1] - var garden_texture: Texture2D = load(path) - if not garden_texture: - Log.warn("Gardens: Unable to load garden texture %s, skipping transparency validation" % path) - return null - var garden_image: Image = garden_texture.get_image() - if not garden_image: - Log.warn("Gardens: Unable to retrieve image data for garden texture %s, skipping transparency validation" % path) - return null - garden_alpha_cache[garden_color_index] = garden_image - return garden_image - - -static func _get_garden_dimensions(_garden_color_index: int, _garden_image: Image = null) -> Vector2: - return Vector2(GARDEN_SIZE, GARDEN_CENTER_Y * 2.0) - static func _get_lesson_button_half_size() -> Vector2: if lesson_button_half_size != Vector2.ZERO: @@ -517,23 +493,6 @@ static func _save_layout_to_cache(layout: GardensLayout, session_id: int, total_ Log.warn("Gardens: Failed to save layout cache at %s: %s" % [cache_path, error_string(error)]) -static func _is_position_on_garden_texture(garden_color_index: int, tested_position: Vector2, garden_dimensions: Vector2, probe_half_size: Vector2 = Vector2.ZERO, garden_image: Image = null) -> bool: - if not garden_image: - garden_image = _get_garden_background_image(garden_color_index) - if not garden_image: - return true - var safe_dim: Vector2 = Utils.safe_dimensions(garden_dimensions) - var base_position: Vector2 = tested_position if probe_half_size == Vector2.ZERO else tested_position + probe_half_size - var offsets: Array[Vector2] = Utils.build_probe_offsets(probe_half_size) - for offset: Vector2 in offsets: - var sample: Vector2 = base_position + offset - if sample.x < 0.0 or sample.x > safe_dim.x or sample.y < 0.0 or sample.y > safe_dim.y: - return false - var pixel: Vector2i = Utils.position_to_pixel(sample, safe_dim, garden_image) - if garden_image.get_pixelv(pixel).a < TRANSPARENCY_THRESHOLD: - return false - return true - static func _find_valid_position_on_garden(_garden_color_index: int, tested_position: Vector2, _garden_dimensions: Vector2, _probe_half_size: Vector2 = Vector2.ZERO) -> Vector2: var center: Vector2 = Vector2(float(GARDEN_SIZE) / 2.0, GARDEN_CENTER_Y) @@ -682,8 +641,7 @@ static func _generate_single_garden_layout(garden_index: int, lessons_for_garden var garden_layout: GardenLayout = GardenLayout.new() garden_layout.color = garden_index % GARDEN_TEXTURES_NB Log.trace("Gardens: Garden %s color index set to %s" % [str(garden_index), str(garden_layout.color)]) - var garden_image: Image = _get_garden_background_image(garden_layout.color) - var garden_dimensions: Vector2 = _get_garden_dimensions(garden_layout.color, garden_image) + var garden_dimensions: Vector2 = Vector2(GARDEN_SIZE, GARDEN_CENTER_Y * 2.0) var half_size: Vector2 = _get_lesson_button_half_size() # Initial path positions @@ -827,7 +785,7 @@ func _open_minigames_layout(button: LessonButton, lesson_number: int) -> void: else: minigame_background_center.modulate = current_garden.color # Lesson button - _handle_lesson_button(current_lesson_number, lesson_unlocks["look_and_learn"] as StudentProgression.Status, current_garden.color) + _handle_lesson_button(current_lesson_number, lesson_unlocks["look_and_learn"] as StudentProgression.Status) # Minigames var minigame_layouts: Array[MinigameLayout] = _get_minigame_layouts() for layout_index: int in minigame_layouts.size(): @@ -853,9 +811,8 @@ func _open_minigames_layout(button: LessonButton, lesson_number: int) -> void: minigame_layout_opened.emit() -func _handle_lesson_button(lesson_number: int, status: StudentProgression.Status, color: Color) -> void: +func _handle_lesson_button(lesson_number: int, status: StudentProgression.Status) -> void: lesson_button.text = lessons[lesson_number][0].grapheme - lesson_button.completed_color = color lesson_button.set_button_disabled(status == StudentProgression.Status.Locked) lesson_button.completed = status == StudentProgression.Status.Completed lesson_button_particles.emitting = status == StudentProgression.Status.Unlocked @@ -1012,7 +969,6 @@ func set_up_path() -> void: var garden_control: Garden = garden_parent.get_child(index) for button: GardenLayout.GardenLayoutLessonButton in garden_layout.lesson_buttons: var point_position: Vector2 = garden_parent.position + garden_control.position + Vector2(button.position) - point_position += garden_control.get_button_size() / 2 var point_in_position: Vector2 = Vector2.ZERO if curve.point_count > 0: point_in_position = curve.get_point_position(curve.point_count - 1) + curve.get_point_out(curve.point_count - 1) - point_position diff --git a/sources/lesson_screen/lesson_button.gd b/sources/lesson_screen/lesson_button.gd index 52f0ce7e..e6be2d2e 100644 --- a/sources/lesson_screen/lesson_button.gd +++ b/sources/lesson_screen/lesson_button.gd @@ -9,10 +9,6 @@ const UNLOCKED_BORDER_COLOR: Color = Color("fbb03b") const COMPLETED_FILL_COLOR: Color = Color("9be3ea") const COMPLETED_LABEL_COLOR: Color = Color("0a555b") -@export_color_no_alpha var base_color: Color: - set = _set_base_color -@export_color_no_alpha var completed_color: Color: - set = _set_completed_color @export var text: String: set = _set_text @export var completed: bool = false: @@ -26,8 +22,6 @@ const COMPLETED_LABEL_COLOR: Color = Color("0a555b") func _ready() -> void: - _set_base_color(base_color) - _set_completed_color(completed_color) _set_text(text) _update_visual_state() @@ -42,35 +36,29 @@ func right() -> void: await right_fx.finished +func set_button_disabled(value: bool) -> void: + disabled = value + _update_visual_state() + + func _update_visual_state() -> void: if not center or not border or not label: return if disabled: - # Locked state center.modulate = LOCKED_COLOR border.visible = false label.add_theme_color_override("font_color", LOCKED_LABEL_COLOR) elif completed: - # Completed state center.modulate = COMPLETED_FILL_COLOR border.visible = false label.add_theme_color_override("font_color", COMPLETED_LABEL_COLOR) else: - # Unlocked state center.modulate = UNLOCKED_FILL_COLOR border.visible = true border.modulate = UNLOCKED_BORDER_COLOR label.add_theme_color_override("font_color", UNLOCKED_LABEL_COLOR) -func _set_base_color(color: Color) -> void: - base_color = color - - -func _set_completed_color(color: Color) -> void: - completed_color = color - - func _set_text(value: String) -> void: text = value if label: @@ -80,8 +68,3 @@ func _set_text(value: String) -> void: func _set_completed(value: bool) -> void: completed = value _update_visual_state() - - -func set_button_disabled(value: bool) -> void: - disabled = value - _update_visual_state() diff --git a/sources/lesson_screen/lesson_button.tscn b/sources/lesson_screen/lesson_button.tscn index 863975b2..4dfa1c6b 100644 --- a/sources/lesson_screen/lesson_button.tscn +++ b/sources/lesson_screen/lesson_button.tscn @@ -19,8 +19,6 @@ texture_disabled = ExtResource("lesson_circle") texture_focused = ExtResource("lesson_circle") stretch_mode = 0 script = ExtResource("4_mbltp") -base_color = Color(0.0901961, 0.427451, 0.470588, 1) -completed_color = Color(0.0901961, 0.427451, 0.470588, 1) [node name="RightFX" parent="." unique_id=1485482935 instance=ExtResource("7_rtwam")] unique_name_in_owner = true From d45318606b3b0fdccf1ef93db576c7453c03171a Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Tue, 31 Mar 2026 16:00:58 +0200 Subject: [PATCH 011/111] Implement fixed 5-slot diagonal layout for garden lesson buttons Buttons are placed at 5 fixed positions on a diagonal from bottom-left to upper-right. When fewer lessons exist, evenly spaced slots are selected. Reduced spread radius to keep all buttons inside the circle. Co-Authored-By: Claude Opus 4.6 (1M context) --- resources/gardens/garden.tscn | 13 +++++---- sources/gardens/gardens.gd | 51 ++++++++++++++++++++++------------- 2 files changed, 39 insertions(+), 25 deletions(-) diff --git a/resources/gardens/garden.tscn b/resources/gardens/garden.tscn index 4e0d290f..ef02d513 100644 --- a/resources/gardens/garden.tscn +++ b/resources/gardens/garden.tscn @@ -2,8 +2,8 @@ [ext_resource type="Script" uid="uid://ch5h4p1o54whq" path="res://resources/gardens/garden.gd" id="1_5owem"] [ext_resource type="Texture2D" uid="uid://d26hapg1hf8a6" path="res://assets/gardens/gardens/Garden_01.png" id="3_p7iv3"] -[ext_resource type="Texture2D" uid="uid://bfqwlmmliem8f" path="res://assets/gardens/jellyfish.png" id="jellyfish_tex"] [ext_resource type="PackedScene" uid="uid://delcgui3v0eek" path="res://sources/lesson_screen/lesson_button.tscn" id="4_epm30"] +[ext_resource type="Texture2D" uid="uid://bfqwlmmliem8f" path="res://assets/gardens/jellyfish.png" id="jellyfish_tex"] [node name="Garden" type="Control" unique_id=1950346826] custom_minimum_size = Vector2(2400, 2.08165e-12) @@ -27,7 +27,6 @@ offset_bottom = 1750.0 mouse_filter = 2 texture = ExtResource("3_p7iv3") expand_mode = 1 -stretch_mode = 0 [node name="Buttons" type="Control" parent="." unique_id=1943933146] layout_mode = 1 @@ -41,12 +40,12 @@ mouse_filter = 2 [node name="LessonButton" parent="Buttons" unique_id=1734726442 instance=ExtResource("4_epm30")] layout_mode = 0 -[node name="Jellyfish" type="TextureRect" parent="."] +[node name="Jellyfish" type="TextureRect" parent="." unique_id=1070527896] layout_mode = 0 -offset_left = 1550.0 -offset_top = -30.0 -offset_right = 1830.0 -offset_bottom = 450.0 +offset_left = 1269.0 +offset_top = 50.0 +offset_right = 1549.0 +offset_bottom = 530.0 mouse_filter = 2 texture = ExtResource("jellyfish_tex") expand_mode = 1 diff --git a/sources/gardens/gardens.gd b/sources/gardens/gardens.gd index 763e2540..f8a72676 100644 --- a/sources/gardens/gardens.gd +++ b/sources/gardens/gardens.gd @@ -15,10 +15,10 @@ const FLOWER_TYPES_NB: int = 5 const FLOWER_OFFSET_FROM_LESSON: float = 150.0 const GARDEN_CENTER_Y: float = 900.0 const GARDEN_CIRCLE_RADIUS: float = 850.0 -const LESSON_PATH_SPREAD: float = 0.85 +const MAX_POSITIONS_PER_GARDEN: int = 5 const FINAL_BOSS_PADDING: float = 120.0 const BACK_BUTTON_HOLD_DURATION_SECONDS: float = 1.0 -const LAYOUT_VERSION: int = 9 +const LAYOUT_VERSION: int = 11 static var lesson_button_half_size: Vector2 = Vector2.ZERO static var transition_data: Dictionary = {} @@ -696,6 +696,28 @@ static func _generate_single_garden_layout(garden_index: int, lessons_for_garden return garden_layout +static func _get_garden_slot_positions(center: Vector2) -> Array[Vector2]: + var r: float = GARDEN_CIRCLE_RADIUS * 0.6 + # 5 fixed slots on a diagonal from bottom-left to upper-right + var slots: Array[Vector2] = [] + for i: int in range(MAX_POSITIONS_PER_GARDEN): + var t: float = float(i) / float(MAX_POSITIONS_PER_GARDEN - 1) + var x: float = center.x + (t - 0.5) * r * 2.0 + var y: float = center.y + (0.5 - t) * r * 1.6 + x += sin(t * PI) * GARDEN_CIRCLE_RADIUS * 0.08 + slots.append(Vector2(x, y)) + return slots + + +static func _get_selected_slot_indices(lesson_count: int) -> Array[int]: + match lesson_count: + 1: return [2] + 2: return [1, 3] + 3: return [0, 2, 4] + 4: return [0, 1, 3, 4] + _: return [0, 1, 2, 3, 4] + + static func _generate_lesson_positions(lessons_for_garden: int, garden_index: int) -> Array[Vector2i]: Log.info("Gardens: Generating lesson positions for garden %s" % str(garden_index)) var positions: Array[Vector2i] = [] @@ -704,22 +726,15 @@ static func _generate_lesson_positions(lessons_for_garden: int, garden_index: in return positions var center: Vector2 = Vector2(float(GARDEN_SIZE) / 2.0, GARDEN_CENTER_Y) Log.trace("Gardens: Garden %s circle center at %s" % [str(garden_index), str(center)]) - if lessons_for_garden == 1: - positions.append(Vector2i(int(center.x), int(center.y))) - Log.trace("Gardens: Garden %s single lesson placed at center" % str(garden_index)) - else: - # Diagonal path from bottom-left to upper-right through the circle, - # matching the design mockup layout. - var half_spread: float = GARDEN_CIRCLE_RADIUS * LESSON_PATH_SPREAD * 0.5 - for lesson_index: int in range(lessons_for_garden): - var t: float = float(lesson_index) / float(lessons_for_garden - 1) - # Diagonal: bottom-left (t=0) to upper-right (t=1) - var x_pos: float = center.x + (t - 0.5) * half_spread * 2.0 - var y_pos: float = center.y + (0.5 - t) * half_spread * 1.6 - # Slight sine curve to avoid a straight line - x_pos += sin(t * PI) * GARDEN_CIRCLE_RADIUS * 0.08 - Log.trace("Gardens: Garden %s lesson %s t: %s, position: (%s, %s)" % [str(garden_index), str(lesson_index), str(t), str(x_pos), str(y_pos)]) - positions.append(Vector2i(int(x_pos), int(y_pos))) + # 5 fixed slots on a diagonal from bottom-left to upper-right. + # When fewer lessons exist, pick evenly spaced slots: + # 5 → 1,2,3,4,5 | 4 → 1,2,4,5 | 3 → 1,3,5 | 2 → 2,4 | 1 → 3 + var all_slots: Array[Vector2] = _get_garden_slot_positions(center) + var selected_indices: Array[int] = _get_selected_slot_indices(lessons_for_garden) + for i: int in range(selected_indices.size()): + var slot: Vector2 = all_slots[selected_indices[i]] + Log.trace("Gardens: Garden %s lesson %s using slot %s, position: (%s, %s)" % [str(garden_index), str(i), str(selected_indices[i]), str(slot.x), str(slot.y)]) + positions.append(Vector2i(int(slot.x), int(slot.y))) Log.info("Gardens: Completed lesson positions for garden %s" % str(garden_index)) return positions From b13fe0638d7870fe5a8f781b8ae41169cbc83859 Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Thu, 2 Apr 2026 09:25:08 +0200 Subject: [PATCH 012/111] Hard-place 5 lesson buttons in garden scene with show/hide logic MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace dynamic button instantiation with 5 fixed LessonButton instances (Slot1-Slot5) positioned at hardcoded coordinates in the garden scene. Garden._configure_slots() shows/hides slots based on lesson count using the SLOT_SELECTION mapping (5→all, 4→skip middle, 3→1,3,5, etc.). - Add error log if lesson count exceeds MAX_LESSONS (5) - Remove dynamic _ensure_button_controls_count from garden.gd - Replace position generation functions with SLOT_CENTERS constant - Buttons are clickable via existing _set_up_lessons signal wiring Co-Authored-By: Claude Opus 4.6 (1M context) --- resources/gardens/garden.gd | 85 ++++++++++++++++++----------------- resources/gardens/garden.tscn | 39 +++++++++++++++- sources/gardens/gardens.gd | 54 +++++----------------- sources/gardens/gardens.tscn | 2 +- 4 files changed, 95 insertions(+), 85 deletions(-) diff --git a/resources/gardens/garden.gd b/resources/gardens/garden.gd index 028acf10..85b4c8a9 100644 --- a/resources/gardens/garden.gd +++ b/resources/gardens/garden.gd @@ -11,16 +11,18 @@ enum FlowerSizes{ const FLOWER_PATH_MODEL: String = "res://assets/gardens/flowers/plant_%02d_%02d_%s.png" const BACKGROUND_PATH_MODEL: String = "res://assets/gardens/gardens/Garden_%02d.png" -const LESSON_BUTTON_SCENE_PATH: String = "res://sources/lesson_screen/lesson_button.tscn" const FLOWER_MATERIAL_PATH: String = "res://resources/gardens/flower_material.tres" -static var _lesson_button_scene_cache: PackedScene = null - - -static func get_lesson_button_scene() -> PackedScene: - if not _lesson_button_scene_cache: - _lesson_button_scene_cache = load(LESSON_BUTTON_SCENE_PATH) - return _lesson_button_scene_cache const FLOWER_Z_INDEX: int = 1 +const MAX_LESSONS: int = 5 + +# Maps lesson count → which slot indices to use +const SLOT_SELECTION: Dictionary = { + 1: [2], + 2: [1, 3], + 3: [0, 2, 4], + 4: [0, 1, 3, 4], + 5: [0, 1, 2, 3, 4], +} @export var garden_layout: GardenLayout: set = set_garden_layout @@ -33,8 +35,12 @@ var color: Color var current_progression: float = 0.0 var max_progression: float = 0.0 var garden_index: int = -1 +# Maps visible button index → slot node +var active_buttons: Array[LessonButton] = [] -@onready var buttons: Control = $Buttons +@onready var all_slots: Array[LessonButton] = [ + $Buttons/Slot1, $Buttons/Slot2, $Buttons/Slot3, $Buttons/Slot4, $Buttons/Slot5 +] @onready var flowers_container: Control = $Flowers @onready var flower_material: Material = load(FLOWER_MATERIAL_PATH) @onready var flower_controls: Array[TextureRect] = [] @@ -42,10 +48,9 @@ var garden_index: int = -1 func get_button_size() -> Vector2: - var lesson_buttons: Array[LessonButton] = get_lesson_buttons() - if lesson_buttons.is_empty(): + if all_slots.is_empty(): return Vector2.ZERO - return lesson_buttons[0].get_size() + return all_slots[0].get_size() func set_garden_layout(p_garden_layout: GardenLayout) -> void: @@ -55,7 +60,7 @@ func set_garden_layout(p_garden_layout: GardenLayout) -> void: garden_layout = p_garden_layout set_flowers(garden_layout.flowers) set_background(garden_layout.color) - set_lesson_buttons(garden_layout.lesson_buttons) + _configure_slots(garden_layout.lesson_buttons.size()) func set_flowers(p_flowers: Array[GardenLayout.Flower], default_size: FlowerSizes = FlowerSizes.NOT_STARTED) -> void: @@ -87,18 +92,23 @@ func update_flowers() -> void: flower_scene.position = Vector2(flower.position.x - flower_scene.size.x / 2, flower.position.y - flower_scene.size.y) -func set_lesson_buttons(p_lesson_buttons: Array[GardenLayout.GardenLayoutLessonButton]) -> void: - _ensure_button_controls_count(p_lesson_buttons.size()) - var lesson_buttons: Array[LessonButton] = get_lesson_buttons() - for lesson_button_control: LessonButton in lesson_buttons: - lesson_button_control.hide() - for index: int in range(p_lesson_buttons.size()): - var lesson_button: GardenLayout.GardenLayoutLessonButton = p_lesson_buttons[index] - var lesson_button_control: LessonButton = lesson_buttons[index] - var half_size: Vector2 = lesson_button_control.size / 2.0 - lesson_button_control.position = Vector2(lesson_button.position) - half_size - lesson_button_control.show() - lesson_button_control.pivot_offset = half_size +func _configure_slots(lesson_count: int) -> void: + if not all_slots or all_slots.is_empty(): + return + if lesson_count > MAX_LESSONS: + Log.error("Garden: Too many lessons (%d) for garden %d — maximum is %d" % [lesson_count, garden_index, MAX_LESSONS]) + lesson_count = MAX_LESSONS + # Hide all slots + for slot: LessonButton in all_slots: + slot.hide() + slot.set_button_disabled(true) + # Show only selected slots + active_buttons.clear() + var indices: Array = SLOT_SELECTION.get(lesson_count, []) + for i: int in range(indices.size()): + var slot: LessonButton = all_slots[indices[i]] + slot.show() + active_buttons.append(slot) func set_background(p_color: int) -> void: @@ -111,13 +121,6 @@ func set_background(p_color: int) -> void: color = garden_colors[p_color] -func _ensure_button_controls_count(target_count: int) -> void: - while get_lesson_buttons().size() < target_count: - var new_button: LessonButton = get_lesson_button_scene().instantiate() - buttons.add_child(new_button) - new_button.owner = self - - func _ensure_flower_controls_count(target_count: int) -> void: for child: Node in flowers_container.get_children(): child.queue_free() @@ -138,17 +141,19 @@ func _create_flower_control() -> TextureRect: func get_lesson_buttons() -> Array[LessonButton]: - var lesson_buttons: Array[LessonButton] = [] - for button: Node in buttons.get_children(): - if button is LessonButton: - lesson_buttons.append(button as LessonButton) - return lesson_buttons + return active_buttons func set_lesson_label(ind: int, text: String) -> void: - var lesson_buttons: Array[LessonButton] = get_lesson_buttons() - assert(ind < lesson_buttons.size()) - lesson_buttons[ind].text = text + assert(ind < active_buttons.size()) + active_buttons[ind].text = text + + +func get_slot_center(slot_index: int) -> Vector2: + if slot_index < 0 or slot_index >= all_slots.size(): + return Vector2.ZERO + var slot: LessonButton = all_slots[slot_index] + return slot.position + slot.size / 2.0 func get_progress_ratio() -> float: diff --git a/resources/gardens/garden.tscn b/resources/gardens/garden.tscn index ef02d513..25ad3cc1 100644 --- a/resources/gardens/garden.tscn +++ b/resources/gardens/garden.tscn @@ -37,8 +37,45 @@ grow_horizontal = 2 grow_vertical = 2 mouse_filter = 2 -[node name="LessonButton" parent="Buttons" unique_id=1734726442 instance=ExtResource("4_epm30")] +[node name="Slot1" parent="Buttons" instance=ExtResource("4_epm30")] layout_mode = 0 +offset_left = 540.0 +offset_top = 1158.0 +offset_right = 840.0 +offset_bottom = 1458.0 +pivot_offset = Vector2(150, 150) + +[node name="Slot2" parent="Buttons" instance=ExtResource("4_epm30")] +layout_mode = 0 +offset_left = 843.0 +offset_top = 954.0 +offset_right = 1143.0 +offset_bottom = 1254.0 +pivot_offset = Vector2(150, 150) + +[node name="Slot3" parent="Buttons" instance=ExtResource("4_epm30")] +layout_mode = 0 +offset_left = 1118.0 +offset_top = 750.0 +offset_right = 1418.0 +offset_bottom = 1050.0 +pivot_offset = Vector2(150, 150) + +[node name="Slot4" parent="Buttons" instance=ExtResource("4_epm30")] +layout_mode = 0 +offset_left = 1353.0 +offset_top = 546.0 +offset_right = 1653.0 +offset_bottom = 846.0 +pivot_offset = Vector2(150, 150) + +[node name="Slot5" parent="Buttons" instance=ExtResource("4_epm30")] +layout_mode = 0 +offset_left = 1560.0 +offset_top = 342.0 +offset_right = 1860.0 +offset_bottom = 642.0 +pivot_offset = Vector2(150, 150) [node name="Jellyfish" type="TextureRect" parent="." unique_id=1070527896] layout_mode = 0 diff --git a/sources/gardens/gardens.gd b/sources/gardens/gardens.gd index f8a72676..c0ad596a 100644 --- a/sources/gardens/gardens.gd +++ b/sources/gardens/gardens.gd @@ -15,11 +15,14 @@ const FLOWER_TYPES_NB: int = 5 const FLOWER_OFFSET_FROM_LESSON: float = 150.0 const GARDEN_CENTER_Y: float = 900.0 const GARDEN_CIRCLE_RADIUS: float = 850.0 -const MAX_POSITIONS_PER_GARDEN: int = 5 const FINAL_BOSS_PADDING: float = 120.0 const BACK_BUTTON_HOLD_DURATION_SECONDS: float = 1.0 -const LAYOUT_VERSION: int = 11 - +const LAYOUT_VERSION: int = 12 +# Centers of the 5 fixed button slots (must match garden.tscn positions) +const SLOT_CENTERS: Array[Vector2i] = [ + Vector2i(690, 1308), Vector2i(993, 1104), Vector2i(1268, 900), + Vector2i(1503, 696), Vector2i(1710, 492) +] static var lesson_button_half_size: Vector2 = Vector2.ZERO static var transition_data: Dictionary = {} static var cached_gardens_layout: GardensLayout @@ -645,7 +648,7 @@ static func _generate_single_garden_layout(garden_index: int, lessons_for_garden var half_size: Vector2 = _get_lesson_button_half_size() # Initial path positions - var raw_positions: Array[Vector2i] = _generate_lesson_positions(lessons_for_garden, garden_index) + var raw_positions: Array[Vector2i] = _get_slot_positions_for_count(lessons_for_garden) # Clamp to texture + avoid overlaps var resolved_positions: Array[Vector2] = [] @@ -696,46 +699,11 @@ static func _generate_single_garden_layout(garden_index: int, lessons_for_garden return garden_layout -static func _get_garden_slot_positions(center: Vector2) -> Array[Vector2]: - var r: float = GARDEN_CIRCLE_RADIUS * 0.6 - # 5 fixed slots on a diagonal from bottom-left to upper-right - var slots: Array[Vector2] = [] - for i: int in range(MAX_POSITIONS_PER_GARDEN): - var t: float = float(i) / float(MAX_POSITIONS_PER_GARDEN - 1) - var x: float = center.x + (t - 0.5) * r * 2.0 - var y: float = center.y + (0.5 - t) * r * 1.6 - x += sin(t * PI) * GARDEN_CIRCLE_RADIUS * 0.08 - slots.append(Vector2(x, y)) - return slots - - -static func _get_selected_slot_indices(lesson_count: int) -> Array[int]: - match lesson_count: - 1: return [2] - 2: return [1, 3] - 3: return [0, 2, 4] - 4: return [0, 1, 3, 4] - _: return [0, 1, 2, 3, 4] - - -static func _generate_lesson_positions(lessons_for_garden: int, garden_index: int) -> Array[Vector2i]: - Log.info("Gardens: Generating lesson positions for garden %s" % str(garden_index)) +static func _get_slot_positions_for_count(lesson_count: int) -> Array[Vector2i]: + var indices: Array = Garden.SLOT_SELECTION.get(lesson_count, []) var positions: Array[Vector2i] = [] - if lessons_for_garden <= 0: - Log.trace("Gardens: No lessons for garden %s, returning empty positions" % str(garden_index)) - return positions - var center: Vector2 = Vector2(float(GARDEN_SIZE) / 2.0, GARDEN_CENTER_Y) - Log.trace("Gardens: Garden %s circle center at %s" % [str(garden_index), str(center)]) - # 5 fixed slots on a diagonal from bottom-left to upper-right. - # When fewer lessons exist, pick evenly spaced slots: - # 5 → 1,2,3,4,5 | 4 → 1,2,4,5 | 3 → 1,3,5 | 2 → 2,4 | 1 → 3 - var all_slots: Array[Vector2] = _get_garden_slot_positions(center) - var selected_indices: Array[int] = _get_selected_slot_indices(lessons_for_garden) - for i: int in range(selected_indices.size()): - var slot: Vector2 = all_slots[selected_indices[i]] - Log.trace("Gardens: Garden %s lesson %s using slot %s, position: (%s, %s)" % [str(garden_index), str(i), str(selected_indices[i]), str(slot.x), str(slot.y)]) - positions.append(Vector2i(int(slot.x), int(slot.y))) - Log.info("Gardens: Completed lesson positions for garden %s" % str(garden_index)) + for i: int in indices: + positions.append(SLOT_CENTERS[i]) return positions #endregion diff --git a/sources/gardens/gardens.tscn b/sources/gardens/gardens.tscn index 5080c475..f084ecc9 100644 --- a/sources/gardens/gardens.tscn +++ b/sources/gardens/gardens.tscn @@ -17,7 +17,7 @@ [ext_resource type="Texture2D" uid="uid://bb00fhnenbml5" path="res://assets/lesson_screen/big_button.png" id="20_elp7t"] [ext_resource type="Texture2D" uid="uid://dq23np4euf6da" path="res://assets/minigames/penguin/graphic/gauge_icon_penguin_full.png" id="20_ouafq"] [ext_resource type="Texture2D" uid="uid://dlnklpyefn0m2" path="res://assets/lesson_screen/big_button_center.png" id="21_r0a4h"] -[ext_resource type="Material" path="res://resources/gardens/minigame_icon_material.tres" id="22_cgp31"] +[ext_resource type="Material" uid="uid://dne7hgkrp4tdy" path="res://resources/gardens/minigame_icon_material.tres" id="22_cgp31"] [ext_resource type="Texture2D" uid="uid://dkomjpclxvmqf" path="res://assets/lesson_screen/top_left.png" id="23_p1d10"] [ext_resource type="Texture2D" uid="uid://rux5delnabp5" path="res://assets/lesson_screen/top_right.png" id="24_30f83"] [ext_resource type="AudioStream" uid="uid://bgof22p2ofunc" path="res://assets/sfx/ui_yes_button.mp3" id="24_ljadf"] From 17f5048eb742142125a702d70356e064a4505bb6 Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Thu, 2 Apr 2026 09:28:24 +0200 Subject: [PATCH 013/111] Fix: replace removed get_lesson_button_scene with constant size Button size is fixed at 300x300 in the scene, no need to instantiate and measure at runtime. Co-Authored-By: Claude Opus 4.6 (1M context) --- sources/gardens/gardens.gd | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/sources/gardens/gardens.gd b/sources/gardens/gardens.gd index c0ad596a..6c87a1a9 100644 --- a/sources/gardens/gardens.gd +++ b/sources/gardens/gardens.gd @@ -23,7 +23,6 @@ const SLOT_CENTERS: Array[Vector2i] = [ Vector2i(690, 1308), Vector2i(993, 1104), Vector2i(1268, 900), Vector2i(1503, 696), Vector2i(1710, 492) ] -static var lesson_button_half_size: Vector2 = Vector2.ZERO static var transition_data: Dictionary = {} static var cached_gardens_layout: GardensLayout static var cached_layout_session_id: int = -1 @@ -445,18 +444,7 @@ func _play_brain_tutorial() -> void: static func _get_lesson_button_half_size() -> Vector2: - if lesson_button_half_size != Vector2.ZERO: - return lesson_button_half_size - var button: LessonButton = Garden.get_lesson_button_scene().instantiate() - var measured_size: Vector2 = button.get_combined_minimum_size() - if measured_size == Vector2.ZERO: - measured_size = button.get_rect().size - if measured_size == Vector2.ZERO and button.texture_normal: - measured_size = button.texture_normal.get_size() - if measured_size == Vector2.ZERO: - measured_size = Vector2(300, 300) - lesson_button_half_size = measured_size * 0.5 - return lesson_button_half_size + return Vector2(150, 150) static func _get_layout_cache_base_dir() -> String: From 49d5fcd38b511a8400aa2fb30f91acd14b55cac7 Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Thu, 2 Apr 2026 09:58:24 +0200 Subject: [PATCH 014/111] Replace old flower system with new plant assets and progressive reveal - Add 8 garden plant assets (garden_plant_01 to 08) from victory assets - Remove entire old flower system (FlowerSizes enum, flower generation, flower VFX transitions, flower_controls, flowers_visible, flowers_sizes) - Remove Flower class from GardenLayout - Plants are created programmatically in Garden._create_plants() at fixed positions matching the Explanation.png mockup layout - All plants hidden by default, revealed progressively based on completed minigames ratio: 0 completed = 0 visible, all completed = all 8 visible - Add lowercase file naming rule to CLAUDE.md - Fix current_garden lookup to use _get_garden_index_for_lesson instead of removed flower_info system Co-Authored-By: Claude Opus 4.6 (1M context) --- assets/gardens/plants/garden_plant_01.png | Bin 0 -> 7021 bytes .../gardens/plants/garden_plant_01.png.import | 40 ++++++ assets/gardens/plants/garden_plant_02.png | Bin 0 -> 2476 bytes .../gardens/plants/garden_plant_02.png.import | 40 ++++++ assets/gardens/plants/garden_plant_03.png | Bin 0 -> 3138 bytes .../gardens/plants/garden_plant_03.png.import | 40 ++++++ assets/gardens/plants/garden_plant_04.png | Bin 0 -> 3878 bytes .../gardens/plants/garden_plant_04.png.import | 40 ++++++ assets/gardens/plants/garden_plant_05.png | Bin 0 -> 1157 bytes .../gardens/plants/garden_plant_05.png.import | 40 ++++++ assets/gardens/plants/garden_plant_06.png | Bin 0 -> 2207 bytes .../gardens/plants/garden_plant_06.png.import | 40 ++++++ assets/gardens/plants/garden_plant_07.png | Bin 0 -> 2105 bytes .../gardens/plants/garden_plant_07.png.import | 40 ++++++ assets/gardens/plants/garden_plant_08.png | Bin 0 -> 3452 bytes .../gardens/plants/garden_plant_08.png.import | 40 ++++++ resources/gardens/garden.gd | 121 ++++++++---------- resources/gardens/garden.tscn | 2 +- resources/gardens/garden_layout.gd | 54 +------- sources/gardens/gardens.gd | 119 ++--------------- 20 files changed, 391 insertions(+), 225 deletions(-) create mode 100644 assets/gardens/plants/garden_plant_01.png create mode 100644 assets/gardens/plants/garden_plant_01.png.import create mode 100644 assets/gardens/plants/garden_plant_02.png create mode 100644 assets/gardens/plants/garden_plant_02.png.import create mode 100644 assets/gardens/plants/garden_plant_03.png create mode 100644 assets/gardens/plants/garden_plant_03.png.import create mode 100644 assets/gardens/plants/garden_plant_04.png create mode 100644 assets/gardens/plants/garden_plant_04.png.import create mode 100644 assets/gardens/plants/garden_plant_05.png create mode 100644 assets/gardens/plants/garden_plant_05.png.import create mode 100644 assets/gardens/plants/garden_plant_06.png create mode 100644 assets/gardens/plants/garden_plant_06.png.import create mode 100644 assets/gardens/plants/garden_plant_07.png create mode 100644 assets/gardens/plants/garden_plant_07.png.import create mode 100644 assets/gardens/plants/garden_plant_08.png create mode 100644 assets/gardens/plants/garden_plant_08.png.import diff --git a/assets/gardens/plants/garden_plant_01.png b/assets/gardens/plants/garden_plant_01.png new file mode 100644 index 0000000000000000000000000000000000000000..03b738ac8f95546c278dc289e45e29743be6b77a GIT binary patch literal 7021 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 literal 0 HcmV?d00001 diff --git a/assets/gardens/plants/garden_plant_01.png.import b/assets/gardens/plants/garden_plant_01.png.import new file mode 100644 index 00000000..e18b848b --- /dev/null +++ b/assets/gardens/plants/garden_plant_01.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dcekseb1b3ruw" +path="res://.godot/imported/garden_plant_01.png-07239077c7e27ab025d33e6293e9ea16.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/gardens/plants/garden_plant_01.png" +dest_files=["res://.godot/imported/garden_plant_01.png-07239077c7e27ab025d33e6293e9ea16.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/gardens/plants/garden_plant_02.png b/assets/gardens/plants/garden_plant_02.png new file mode 100644 index 0000000000000000000000000000000000000000..825aa221dfdcba2eb98bf8e5df4bf50c84a8c3d8 GIT binary patch literal 2476 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 literal 0 HcmV?d00001 diff --git a/assets/gardens/plants/garden_plant_03.png.import b/assets/gardens/plants/garden_plant_03.png.import new file mode 100644 index 00000000..36fd9cef --- /dev/null +++ b/assets/gardens/plants/garden_plant_03.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dgssb0oonuqku" +path="res://.godot/imported/garden_plant_03.png-ff63d21df369ee5bcd9355bcb43ee470.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/gardens/plants/garden_plant_03.png" +dest_files=["res://.godot/imported/garden_plant_03.png-ff63d21df369ee5bcd9355bcb43ee470.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/gardens/plants/garden_plant_04.png b/assets/gardens/plants/garden_plant_04.png new file mode 100644 index 0000000000000000000000000000000000000000..87c507e2a2d3e569c2192f423a2bec7c2859dc43 GIT binary patch literal 3878 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 literal 0 HcmV?d00001 diff --git a/assets/gardens/plants/garden_plant_04.png.import b/assets/gardens/plants/garden_plant_04.png.import new file mode 100644 index 00000000..fb68b260 --- /dev/null +++ b/assets/gardens/plants/garden_plant_04.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bqp1nkk53y1is" +path="res://.godot/imported/garden_plant_04.png-0c83d7b73dc919af4dee7102075e1eb6.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/gardens/plants/garden_plant_04.png" +dest_files=["res://.godot/imported/garden_plant_04.png-0c83d7b73dc919af4dee7102075e1eb6.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/gardens/plants/garden_plant_05.png b/assets/gardens/plants/garden_plant_05.png new file mode 100644 index 0000000000000000000000000000000000000000..21b15a877b85ba2044ff7048ad8ddb60dbd50e7b GIT binary patch literal 1157 zcmV;01bX|4P)Cx|;i(+T1cG6J2T=>#Pc zluS@(f|?0RHh>A#2iYeM!H#X+E4f17IX;*K%lgqZl7C&qnK6a{%z>=&c*qVYtF5S> zkLJvy$T^T#+lPV2Zh%#_4Hs;T(cb39n3a)XXN*}IV`f9@peb%jE2Eml}mPc)*5#X9#PE%z!m;Azg3_8?4Z>?FG^zbKs|Bfj!w{-`t}@B}FcPKT?H_ z;Hj#^tI(AaIRm!%3(+<-$b zaM3kfbEYQ{;0i&Jw~ohalGi&f;TpQj=)-$p=hBk7P(?J!z%5)ek!t9YftyI}!M6kp z7%wuDtA{FAAUEQfG^ZePoAR2+LOTV5jx$hVM?*fww)eat5cKSiEmr6^bXxTZ_)3qdbl^0yKYZr#%y`b@8S2?S zVEg0Mm=pUH*<^+d=d7{cq~JL#t8hJ8D3M+{1tTkojD{pK7Lv$VNFrk)iHwCLG8U4^ zSU3rh?;MX`U=7`@+HdB*K4J~60&87_%QF~hPUXg!t+oLrwT*G!iUHz|iM{qMa)`&X zz=obgI`%yt^JV*9lhXMCH`QY!ufC$E$c5(lx4!c3klMazB!4OR2vX6OHpN*xPwoz7ldI4DHJ4mc#x*A$Ft(uvXEkr6}S~H_Z58y139wSXT9pm zRk#$V50CIMGc(LsZhEdu-=6DG-}R7dZ0mk`<8^K;l?fn~K$u~z z%X#&@x$a!>?^>oT$yi7tVAE$a3|V474_)ygTkY0m!0!P8u*ZgVaJ#V&^)znn_0P%tH#9$ZN^E!1mH@HGu9S52*HxxW+azpry&SQ1aYFGA XRocaL^A!zN00000NkvXXu0mjfEDA0S literal 0 HcmV?d00001 diff --git a/assets/gardens/plants/garden_plant_05.png.import b/assets/gardens/plants/garden_plant_05.png.import new file mode 100644 index 00000000..b8bf3689 --- /dev/null +++ b/assets/gardens/plants/garden_plant_05.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dvxnktx1wiyxp" +path="res://.godot/imported/garden_plant_05.png-91fe6b5b0510425b3b5e77884962f930.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/gardens/plants/garden_plant_05.png" +dest_files=["res://.godot/imported/garden_plant_05.png-91fe6b5b0510425b3b5e77884962f930.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/gardens/plants/garden_plant_06.png b/assets/gardens/plants/garden_plant_06.png new file mode 100644 index 0000000000000000000000000000000000000000..71af402f10fb00bd0a725bd9c0ccd47c373bc60e GIT binary patch literal 2207 zcmV;Q2w?Y#P)HV}RGT6G9xs7>A)e zYuz_O2wVXk0Q|Oa{0o46uF9{0q#c02wC~RV4gj_Qe$mQ54&~`lKsR!|xYoV)hA!9- z$9S$b+-6}u9ku}OhR;us-A+fRmE8^U$x%8 zA=hL{E_4~%0HAE2L~U3We*~0kNsK7}giHhh<&s356m~fpp-?JGj3|H1(Flc7eNqqL z9YH>uKLX0Mq%CL!Wt$%U5-ZRD3K&alK+Kb~T-YY4bF)xyFND}B*-{)g$2oh%2PtOSN62935p1f`g1 zw>T5@6~H|t@%I28CvuxhcQciUML`=`U!&>jEHXz;rY^yfDx!SM@LvP?UHd*w3Nw{g zC6Kh%?Z_5$QfyI{QTb~jX#+W|PbaLkMP4uOWBtia#OGG`!XJHLJC~*y^+a|*IbOvO z)H*I`TDfhmLV?ZE`Z{VG_@J9l${&Of!IMdy?S4?!h&gdCi((!ZFl#j7Mb)q4sPu%A zq`F8i=Cj|OsUpj(CN_MU$L+FGN>|o#9L|RjVR_t4bAWry9q9pbf(FP5TeYBT>6i%= zr`>|KvY>E+bll%YxDb-`(TH1Q^zxl9;pB{1id;w!L$rR=;P|Owe?-?xb6#-NzO_c~6%}gWo=oNZfGViy`Fgfqkw<9gW zMzhAHJCr2q{ga6hYP4g?Y1cS!pP=9o_LYEd2wj<^<`F$%KFW2VU6^e(asxTyQmyC& zITAWY%uq|}Arq*45%MeRI4vA&5Z29h@JvXJSt{W~`D*f=LY%F8Z?U|A*@iD5_|+Ja zyek<{X`fU1Bd0$x;046VW(-MG=gqXwDMmJiux`8uG4FfL?iRC&*i=^=pyv?*+v3-> zB;Wfv6ZqtN4O$oqkj_8o0SmEf+>{tt%m_E_9!-Fb2Ly)4V@aa!>8OTxMm$fq+8T5# zB0Fmxu_RHuToq8qbdJ;n=!klb$=W1sC-2lcYS69d36ak*S-ZO_=N&Rb2Ewc;H zOO{kY-f45l=Y|MKCtXkEc*+JDK%GDT*bGG7T_J(TQ=KsuXbH zmq>B6DHwE&LQFO#Iza~^gO9Zs$J-8~Jd#{lCptmBkg+@_=E-QIY#5WG2S=r?c3d$| z4OZqrFBYP(V%~OUIIa^_iv^PSAY?OLJv&WBRZAeL70U!Qn(VBRLm_v3=vGtq$9x8JVfjM3P#P zy@UC7U^>Ja6|anT;g~5k`90>>w!!$?xcXq)%GKd)A)g^0s!{sfhwUnFM ztMD1J?HwdRHO6F~bsC%(H6`X4a863tl2^A&Cpj?6@-=n0j`9;in(k`*VGU@BpCh!;w)B1ITu(hja7`9T_Na~2nFJ(zDnES&Dl1x_A z2I?~9qyt!9Dk);$sRJJ{{y}R1e+KCJ3j2{nSbxLPjJqRN zwl=!S_dUYmc{LpI!|#Qp3SrLLE91?zd|R?#`Uz)8+XDENc)qinDY!`T**kwJsBGK{ zz`p_KPo2IMu4svuk_$ke>^1@CKO$jbskfq)(GBkv=-mt;20L9O#q7b)3DvG9;M_kz zT($6tyK&It@VRk6yiTK z(Ldu*Na|8lxFV8R5kPa?)Mo))8p-~IiegDUX!}SmiDX?3FsI&BkT;N9tnlwLnXtv& zJ#fgurv;Hfy}PO0=8%UGTocr7O5=NiB54E3e5sL<99Rr(>rg(a#p@ynkO73oNAN}n z!H{=vNXhV8^S*`OpM-y}cn6Q`zr|&<)JlN!`b&6<@}==ck_VhO?zcWd-#MJue#EYj6!_L)1IPm!a2a{1=D&`1v$ampo|?z hDbPc@6^?)q)Bkn0Mr*p=sUiRX002ovPDHLkV1g(3{m=ja literal 0 HcmV?d00001 diff --git a/assets/gardens/plants/garden_plant_06.png.import b/assets/gardens/plants/garden_plant_06.png.import new file mode 100644 index 00000000..28e1b9d5 --- /dev/null +++ b/assets/gardens/plants/garden_plant_06.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://f2arml2f4b8p" +path="res://.godot/imported/garden_plant_06.png-6af51fe97db89d5ded4b02479cb5fed2.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/gardens/plants/garden_plant_06.png" +dest_files=["res://.godot/imported/garden_plant_06.png-6af51fe97db89d5ded4b02479cb5fed2.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/gardens/plants/garden_plant_07.png b/assets/gardens/plants/garden_plant_07.png new file mode 100644 index 0000000000000000000000000000000000000000..5bece57b836414bcbd77993ee11dbfd113b22dcd GIT binary patch literal 2105 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 Vector2: - if all_slots.is_empty(): - return Vector2.ZERO - return all_slots[0].get_size() +func _ready() -> void: + _create_plants() func set_garden_layout(p_garden_layout: GardenLayout) -> void: @@ -58,51 +56,19 @@ func set_garden_layout(p_garden_layout: GardenLayout) -> void: Log.error("Garden: Cannot set garden layout because it is null") return garden_layout = p_garden_layout - set_flowers(garden_layout.flowers) set_background(garden_layout.color) _configure_slots(garden_layout.lesson_buttons.size()) -func set_flowers(p_flowers: Array[GardenLayout.Flower], default_size: FlowerSizes = FlowerSizes.NOT_STARTED) -> void: - flowers = p_flowers - flowers_sizes = [] - flowers_visible = [] - for _i: int in range(flowers.size()): - flowers_sizes.append(default_size) - flowers_visible.append(true) - _ensure_flower_controls_count(flowers.size()) - update_flowers() - - -func update_flowers() -> void: - for index: int in range(flowers.size()): - if index >= flower_controls.size(): - break - var flower: GardenLayout.Flower = flowers[index] - var flower_scene: TextureRect = flower_controls[index] - var flower_is_visible: bool = index < flowers_visible.size() and flowers_visible[index] - flower_scene.visible = flower_is_visible - if not flower_is_visible: - continue - var flower_size: String = FlowerSizes.keys()[flowers_sizes[index]] - flower_size = flower_size.to_lower() - flower_scene.texture = load(FLOWER_PATH_MODEL % [flower.color+1, flower.type+1, flower_size]) - flower_scene.size = flower_scene.get_combined_minimum_size() * 3 - flower_scene.pivot_offset = Vector2(flower_scene.size.x / 2, flower_scene.size.y) - flower_scene.position = Vector2(flower.position.x - flower_scene.size.x / 2, flower.position.y - flower_scene.size.y) - - func _configure_slots(lesson_count: int) -> void: if not all_slots or all_slots.is_empty(): return if lesson_count > MAX_LESSONS: Log.error("Garden: Too many lessons (%d) for garden %d — maximum is %d" % [lesson_count, garden_index, MAX_LESSONS]) lesson_count = MAX_LESSONS - # Hide all slots for slot: LessonButton in all_slots: slot.hide() slot.set_button_disabled(true) - # Show only selected slots active_buttons.clear() var indices: Array = SLOT_SELECTION.get(lesson_count, []) for i: int in range(indices.size()): @@ -121,23 +87,42 @@ func set_background(p_color: int) -> void: color = garden_colors[p_color] -func _ensure_flower_controls_count(target_count: int) -> void: - for child: Node in flowers_container.get_children(): - child.queue_free() - flower_controls.clear() - for _i: int in range(target_count): - var new_flower: TextureRect = _create_flower_control() - flowers_container.add_child(new_flower) - new_flower.owner = self - flower_controls.append(new_flower) +func _create_plants() -> void: + if not plants_container: + return + for i: int in range(PLANT_COUNT): + var plant: TextureRect = TextureRect.new() + plant.texture = load(PLANT_PATH_MODEL % [i + 1]) + plant.expand_mode = 1 + plant.stretch_mode = 5 + plant.mouse_filter = Control.MOUSE_FILTER_IGNORE + var layout: Dictionary = PLANT_LAYOUTS[i] + plant.position = Vector2(layout.x, layout.y) + plant.size = Vector2(layout.w, layout.h) + plant.visible = false + plants_container.add_child(plant) + plant_controls.append(plant) -func _create_flower_control() -> TextureRect: - var flower_control: TextureRect = TextureRect.new() - flower_control.material = flower_material - flower_control.z_index = FLOWER_Z_INDEX - flower_control.mouse_filter = Control.MOUSE_FILTER_IGNORE - return flower_control +func update_plants_visibility(completed_minigames: int, total_minigames: int) -> void: + if total_minigames <= 0: + return + # Distribute 8 plants across the total minigame count. + # 0 completed → 0 visible, all completed → all 8 visible. + var visible_count: int = 0 + if completed_minigames >= total_minigames: + visible_count = PLANT_COUNT + elif completed_minigames > 0: + visible_count = int(float(completed_minigames) * float(PLANT_COUNT) / float(total_minigames)) + visible_count = clampi(visible_count, 1, PLANT_COUNT - 1) + for i: int in range(plant_controls.size()): + plant_controls[i].visible = i < visible_count + + +func get_button_size() -> Vector2: + if all_slots.is_empty(): + return Vector2.ZERO + return all_slots[0].get_size() func get_lesson_buttons() -> Array[LessonButton]: diff --git a/resources/gardens/garden.tscn b/resources/gardens/garden.tscn index 25ad3cc1..9ca1feb5 100644 --- a/resources/gardens/garden.tscn +++ b/resources/gardens/garden.tscn @@ -88,7 +88,7 @@ texture = ExtResource("jellyfish_tex") expand_mode = 1 stretch_mode = 5 -[node name="Flowers" type="Control" parent="." unique_id=1191503680] +[node name="Plants" type="Control" parent="."] layout_mode = 1 anchors_preset = 15 anchor_right = 1.0 diff --git a/resources/gardens/garden_layout.gd b/resources/gardens/garden_layout.gd index 7e0484cf..ed1970a1 100644 --- a/resources/gardens/garden_layout.gd +++ b/resources/gardens/garden_layout.gd @@ -9,32 +9,14 @@ enum FirstOrLast { } @export var color: int = 0 -@export var flowers_export: Array[Dictionary] = []: - set = set_flowers_export @export var lesson_buttons_export: Array[Dictionary] = []: set = set_lesson_buttons_export @export var is_first_or_last: FirstOrLast = FirstOrLast.Neither -var flowers: Array[Flower] = []: - set = set_flowers var lesson_buttons: Array[GardenLayoutLessonButton] = []: set = set_lesson_buttons -func set_flowers_export(p_flowers_export: Array[Dictionary]) -> void: - flowers_export = p_flowers_export - flowers.clear() - for flower_dict: Dictionary in flowers_export: - flowers.append(Flower.from_dict(flower_dict)) - - -func set_flowers(p_flowers: Array[Flower]) -> void: - flowers = p_flowers - flowers_export.clear() - for flower: Flower in flowers: - flowers_export.append(flower.to_dict()) - - func set_lesson_buttons_export(p_lesson_buttons_export: Array[Dictionary]) -> void: lesson_buttons_export = p_lesson_buttons_export lesson_buttons.clear() @@ -49,44 +31,20 @@ func set_lesson_buttons(p_lesson_buttons: Array[GardenLayoutLessonButton]) -> vo lesson_buttons_export.append(lesson_button.to_dict()) -class Flower: - var color: int = 0 - var type: int = 0 - var position: Vector2 = Vector2i.ZERO - - - func _init(p_color: int = 0, p_type: int = 0, p_position: Vector2i = Vector2i.ZERO) -> void: - color = p_color - type = p_type - position = p_position - - - static func from_dict(d: Dictionary) -> Flower: - return Flower.new(d.color as int, d.type as int, d.position as Vector2i) - - - func to_dict() -> Dictionary: - return { - color = color, - type = type, - position = position, - } - - class GardenLayoutLessonButton: var position: Vector2i = Vector2i.ZERO var path_out_position: Vector2i = Vector2i.ZERO - - + + func _init(p_position: Vector2i = Vector2i.ZERO, p_path_out_position: Vector2i = Vector2i.ZERO) -> void: position = p_position path_out_position = p_path_out_position - - + + static func from_dict(d: Dictionary) -> GardenLayoutLessonButton: return GardenLayoutLessonButton.new(d.position as Vector2i, d.path_out_position as Vector2i) - - + + func to_dict() -> Dictionary: return { position = position, diff --git a/sources/gardens/gardens.gd b/sources/gardens/gardens.gd index 6c87a1a9..041b338e 100644 --- a/sources/gardens/gardens.gd +++ b/sources/gardens/gardens.gd @@ -8,16 +8,13 @@ const GARDEN_SCENE: PackedScene = preload("res://resources/gardens/garden.tscn") const LOOK_AND_LEARN_SCENE: PackedScene = preload("res://sources/look_and_learn/look_and_learn.tscn") const BOSS_BUTTON_SCENE: PackedScene = preload("res://sources/gardens/boss_button.tscn") const BOSS_MINIGAME_SCENE_PATH: String = "res://sources/minigames/boss/boss_minigame.tscn" -const FLOWER_VFX: PackedScene = preload("res://sources/gardens/flower_particle.tscn") const GARDEN_SIZE: int = 2400 const GARDEN_TEXTURES_NB: int = 20 -const FLOWER_TYPES_NB: int = 5 -const FLOWER_OFFSET_FROM_LESSON: float = 150.0 const GARDEN_CENTER_Y: float = 900.0 const GARDEN_CIRCLE_RADIUS: float = 850.0 const FINAL_BOSS_PADDING: float = 120.0 const BACK_BUTTON_HOLD_DURATION_SECONDS: float = 1.0 -const LAYOUT_VERSION: int = 12 +const LAYOUT_VERSION: int = 13 # Centers of the 5 fixed button slots (must match garden.tscn positions) const SLOT_CENTERS: Array[Vector2i] = [ Vector2i(690, 1308), Vector2i(993, 1104), Vector2i(1268, 900), @@ -55,7 +52,6 @@ var current_lesson_number: int = -1 var current_garden: Garden var current_button_global_position: Vector2 = Vector2.ZERO var current_button: LessonButton -var lesson_to_flower_index: Dictionary = {} var scroll_end_base_width: float = 0.0 var back_button_hold_progress_seconds: float = 0.0 var is_back_button_hold_active: bool = false @@ -155,25 +151,19 @@ func _build_transition_context() -> Dictionary: func _apply_progression_to_gardens(transition_context: Dictionary) -> void: var lesson_index: int = 1 for garden_control: Garden in garden_parent.get_children(): - garden_control.current_progression = 0.0 - garden_control.max_progression = 0.0 + var total_minigames: int = 0 + var completed_minigames_total: int = 0 var lesson_buttons: Array[LessonButton] = garden_control.get_lesson_buttons() for button_index: int in range(lesson_buttons.size()): var button: LessonButton = lesson_buttons[button_index] if not lesson_index in lessons: button.set_button_disabled(true) - if button_index < garden_control.flowers_visible.size(): - garden_control.flowers_visible[button_index] = false continue - lesson_to_flower_index[lesson_index] = {"garden": garden_control, "index": button_index} var lesson_unlocks: Dictionary = UserDataManager.student_progression.unlocks[lesson_index] var is_blocked_by_boss: bool = UserDataManager.student_progression.is_lesson_blocked_by_boss(lesson_index) var is_lesson_unlocked: bool = lesson_unlocks["look_and_learn"] != StudentProgression.Status.Locked and not is_blocked_by_boss - var is_look_and_learn_completed: bool = lesson_unlocks["look_and_learn"] == StudentProgression.Status.Completed and not is_blocked_by_boss button.set_button_disabled(not is_lesson_unlocked) - if button_index < garden_control.flowers_visible.size(): - garden_control.flowers_visible[button_index] = is_look_and_learn_completed if transition_context.new_lesson_unlocked and lesson_index == transition_context.newly_unlocked_lesson_number: button.set_button_disabled(true) @@ -182,19 +172,15 @@ func _apply_progression_to_gardens(transition_context: Dictionary) -> void: button.completed = UserDataManager.student_progression.is_lesson_completed(lesson_index) and not is_blocked_by_boss var completed_minigames: int = 0 if is_blocked_by_boss else _count_completed_minigames(lesson_index) - if transition_context.is_current_lesson and transition_context.is_first_clear and transition_context.is_minigame_completed and transition_context.last_played_minigame_number >= 0 and transition_context.last_played_minigame_number < (lesson_unlocks["games"] as Array).size(): - if lesson_unlocks["games"][transition_context.last_played_minigame_number] == StudentProgression.Status.Completed: - completed_minigames = max(0, completed_minigames - 1) - - if button_index < garden_control.flowers_sizes.size(): - garden_control.flowers_sizes[button_index] = _get_flower_size_for_completion(completed_minigames) if not is_blocked_by_boss: - garden_control.current_progression += float(completed_minigames) - garden_control.max_progression += float((lesson_unlocks["games"] as Array).size()) + completed_minigames_total += completed_minigames + total_minigames += (lesson_unlocks["games"] as Array).size() + garden_control.current_progression = float(completed_minigames_total) + garden_control.max_progression = float(total_minigames) lesson_index += 1 - garden_control.update_flowers() + garden_control.update_plants_visibility(completed_minigames_total, total_minigames) _set_up_boss_buttons() #endregion @@ -252,7 +238,6 @@ func _center_scroll_on_x(target_x: float) -> void: #region Transitions and animations func _handle_transition_sequences(transition_context: Dictionary) -> void: - await _apply_transition_flowers(transition_context) await get_tree().create_timer(1).timeout if transition_data.has("current_lesson_number") and not transition_data.get("skip_minigame_layout", false): await _open_minigames_layout(_get_current_lesson_button(transition_data.current_lesson_number as int), transition_data.current_lesson_number as int) @@ -262,60 +247,6 @@ func _handle_transition_sequences(transition_context: Dictionary) -> void: await _play_boss_unlock_sequence(transition_context.pending_boss_gate_lesson as int) -func _apply_transition_flowers(transition_context: Dictionary) -> void: - _reveal_completed_look_and_learn_flower() - - # Play the flowers animation if needed - if transition_context.is_current_lesson and transition_context.is_first_clear and transition_context.is_minigame_completed and transition_data.has("current_lesson_number"): - await get_tree().create_timer(1).timeout - var lesson_number: int = transition_data.current_lesson_number as int - var flower_info: Dictionary = _get_flower_info(lesson_number) - if flower_info.is_empty(): - return - var target_garden: Garden = flower_info.garden - var target_index: int = flower_info.index - var new_completed_count: int = _count_completed_minigames(lesson_number) - var target_size: Garden.FlowerSizes = _get_flower_size_for_completion(new_completed_count) - var current_size: Garden.FlowerSizes = target_garden.flowers_sizes[target_index] - target_garden.flowers_visible[target_index] = true - if target_size != current_size: - var flower_vfx: FlowerVFX = FLOWER_VFX.instantiate() - target_garden.flower_controls[target_index].add_child(flower_vfx) - flower_vfx.anchor_bottom = 0.5 - flower_vfx.anchor_top = 0.5 - flower_vfx.anchor_left = 0.5 - flower_vfx.anchor_right = 0.5 - flower_vfx.play() - await get_tree().create_timer(0.5).timeout - target_garden.flowers_sizes[target_index] = target_size - target_garden.update_flowers() - - -func _reveal_completed_look_and_learn_flower() -> void: - if not transition_data.get("look_and_learn_completed", false): - return - var lesson_number_variant: Variant = transition_data.get("current_lesson_number", null) - if lesson_number_variant == null: - return - var lesson_number: int = lesson_number_variant as int - var flower_info: Dictionary = _get_flower_info(lesson_number) - if flower_info.is_empty(): - return - var target_garden: Garden = flower_info.garden - var target_index: int = flower_info.index - if target_index < target_garden.flowers_visible.size(): - target_garden.flowers_visible[target_index] = true - if target_index < target_garden.flowers_sizes.size(): - target_garden.flowers_sizes[target_index] = _get_flower_size_for_completion(_count_completed_minigames(lesson_number)) - target_garden.update_flowers() - - -func _get_flower_info(lesson_number: int) -> Dictionary: - var flower_info: Dictionary = lesson_to_flower_index.get(lesson_number, {}) - if flower_info and flower_info.has("garden") and flower_info.has("index"): - return flower_info - return {} - func _play_new_lesson_unlock_sequence() -> void: var max_lesson: int = UserDataManager.student_progression.get_max_unlocked_lesson_index() @@ -396,7 +327,6 @@ func _ready() -> void: _lock() - lesson_to_flower_index.clear() var transition_context: Dictionary = _build_transition_context() _set_unlocked_path(transition_context.most_advanced_unlocked_lesson_index as int, (transition_context.pending_boss_gate_lesson <= 0) as bool) _apply_progression_to_gardens(transition_context) @@ -669,20 +599,6 @@ static func _generate_single_garden_layout(garden_index: int, lessons_for_garden lesson_buttons.append(GardenLayout.GardenLayoutLessonButton.new(lesson_position, path_out)) garden_layout.lesson_buttons = lesson_buttons - # Build flowers (keep RNG call order identical) - var flowers: Array[GardenLayout.Flower] = [] - for lesson_index: int in range(resolved_positions.size()): - var flower_position: Vector2i = Utils.round_vec2(resolved_positions[lesson_index]) - flower_position.y = max(0, flower_position.y - int(FLOWER_OFFSET_FROM_LESSON)) - var flower_color: int = garden_layout.color - var flower_type: int = (lesson_index + garden_index + rng.randi_range(0, FLOWER_TYPES_NB - 1)) % FLOWER_TYPES_NB - var adjusted: Vector2 = _find_valid_position_on_garden(garden_layout.color, Vector2(flower_position), garden_dimensions) - if not adjusted.is_equal_approx(Vector2(flower_position)): - Log.trace("Gardens: Adjusted flower %s position from %s to %s to stay on background" % [str(lesson_index), str(flower_position), str(adjusted)]) - flower_position = Utils.round_vec2(adjusted) - Log.trace("Gardens: Garden %s flower %s position (%s,%s), color %s, type %s" % [str(garden_index), str(lesson_index), str(flower_position.x), str(flower_position.y), str(flower_color), str(flower_type)]) - flowers.append(GardenLayout.Flower.new(flower_color, flower_type, flower_position)) - garden_layout.flowers = flowers Log.info("Gardens: Finished generating garden layout for garden %s" % str(garden_index)) return garden_layout @@ -735,11 +651,9 @@ func _open_minigames_layout(button: LessonButton, lesson_number: int) -> void: return # Sets the variables for the current garden and lesson current_lesson_number = lesson_number - var flower_info: Dictionary = _get_flower_info(current_lesson_number) - if flower_info and flower_info.has("garden"): - current_garden = flower_info.garden - else: - Log.warn("Gardens: Flower info corrupted for lesson %d" % lesson_number) + var garden_index_for_lesson: int = _get_garden_index_for_lesson(lesson_number) + if garden_index_for_lesson >= 0 and garden_index_for_lesson < garden_parent.get_child_count(): + current_garden = garden_parent.get_child(garden_index_for_lesson) if button: current_button = button current_button.show_placeholder(true) @@ -837,17 +751,6 @@ func _count_completed_minigames(lesson_number: int) -> int: return completed -func _get_flower_size_for_completion(completed_minigames: int) -> Garden.FlowerSizes: - match completed_minigames: - 1: - return Garden.FlowerSizes.SMALL - 2: - return Garden.FlowerSizes.MEDIUM - 3: - return Garden.FlowerSizes.LARGE - _: - return Garden.FlowerSizes.NOT_STARTED - func _close_minigames_layout() -> void: if not in_minigame_selection: From 0a8a72562536a614715ba2f30426baf01584617b Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Thu, 2 Apr 2026 10:08:17 +0200 Subject: [PATCH 015/111] Tint garden plants with dark teal (#0a555b) matching mockup Co-Authored-By: Claude Opus 4.6 (1M context) --- resources/gardens/garden.gd | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/resources/gardens/garden.gd b/resources/gardens/garden.gd index 3f4470de..f67e1ac7 100644 --- a/resources/gardens/garden.gd +++ b/resources/gardens/garden.gd @@ -4,6 +4,7 @@ extends Control const BACKGROUND_PATH_MODEL: String = "res://assets/gardens/gardens/Garden_%02d.png" const PLANT_PATH_MODEL: String = "res://assets/gardens/plants/garden_plant_%02d.png" +const PLANT_COLOR: Color = Color("0a555b") const PLANT_COUNT: int = 8 const MAX_LESSONS: int = 5 @@ -16,7 +17,7 @@ const SLOT_SELECTION: Dictionary = { 5: [0, 1, 2, 3, 4], } -# Plant positions and sizes (x, y, w, h) — matching the Explanation.png layout. +# Plant positions and sizes (x, y, w, h) # Positions are relative to the garden control (2400x1800). const PLANT_LAYOUTS: Array[Dictionary] = [ {x = 280, y = 300, w = 120, h = 950}, # 01: tall seaweed, far left @@ -99,6 +100,7 @@ func _create_plants() -> void: var layout: Dictionary = PLANT_LAYOUTS[i] plant.position = Vector2(layout.x, layout.y) plant.size = Vector2(layout.w, layout.h) + plant.modulate = PLANT_COLOR plant.visible = false plants_container.add_child(plant) plant_controls.append(plant) From 884b481d3012af4ddd758d92a00f18b910dd436a Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Thu, 2 Apr 2026 10:49:48 +0200 Subject: [PATCH 016/111] Place plants and buttons directly in garden scene All 8 plants are now TextureRect nodes in garden.tscn instead of being instantiated at runtime. Positions, sizes and colors are editable directly in the Godot editor. Buttons were already scene nodes. Removed _create_plants(), PLANT_LAYOUTS, PLANT_PATH_MODEL and all runtime instantiation code from garden.gd. Plants container is now placed between Background and Buttons for correct z-ordering. Co-Authored-By: Claude Opus 4.6 (1M context) --- resources/gardens/garden.gd | 53 ++++---------- resources/gardens/garden.tscn | 126 +++++++++++++++++++++++++++++++--- 2 files changed, 127 insertions(+), 52 deletions(-) diff --git a/resources/gardens/garden.gd b/resources/gardens/garden.gd index f67e1ac7..ec5fd1eb 100644 --- a/resources/gardens/garden.gd +++ b/resources/gardens/garden.gd @@ -3,10 +3,8 @@ class_name Garden extends Control const BACKGROUND_PATH_MODEL: String = "res://assets/gardens/gardens/Garden_%02d.png" -const PLANT_PATH_MODEL: String = "res://assets/gardens/plants/garden_plant_%02d.png" -const PLANT_COLOR: Color = Color("0a555b") -const PLANT_COUNT: int = 8 const MAX_LESSONS: int = 5 +const PLANT_COUNT: int = 8 # Maps lesson count → which slot indices to use const SLOT_SELECTION: Dictionary = { @@ -17,19 +15,6 @@ const SLOT_SELECTION: Dictionary = { 5: [0, 1, 2, 3, 4], } -# Plant positions and sizes (x, y, w, h) -# Positions are relative to the garden control (2400x1800). -const PLANT_LAYOUTS: Array[Dictionary] = [ - {x = 280, y = 300, w = 120, h = 950}, # 01: tall seaweed, far left - {x = 530, y = 1320, w = 210, h = 350}, # 02: short bush, bottom-left - {x = 1150, y = 1200, w = 440, h = 330}, # 03: fish school, bottom-right - {x = 820, y = 530, w = 300, h = 420}, # 04: plant cluster, center-left - {x = 650, y = 820, w = 145, h = 310}, # 05: small plant, left of center - {x = 1560, y = 720, w = 185, h = 315}, # 06: small seaweed, right side - {x = 720, y = 1250, w = 130, h = 520}, # 07: medium seaweed, bottom-center - {x = 1050, y = 480, w = 400, h = 400}, # 08: fish school, upper-center -] - @export var garden_layout: GardenLayout: set = set_garden_layout @export var garden_colors: Array[Color] = [] @@ -39,19 +24,17 @@ var current_progression: float = 0.0 var max_progression: float = 0.0 var garden_index: int = -1 var active_buttons: Array[LessonButton] = [] -var plant_controls: Array[TextureRect] = [] @onready var all_slots: Array[LessonButton] = [ $Buttons/Slot1, $Buttons/Slot2, $Buttons/Slot3, $Buttons/Slot4, $Buttons/Slot5 ] -@onready var plants_container: Control = $Plants +@onready var all_plants: Array[TextureRect] = [ + $Plants/Plant1, $Plants/Plant2, $Plants/Plant3, $Plants/Plant4, + $Plants/Plant5, $Plants/Plant6, $Plants/Plant7, $Plants/Plant8 +] @onready var background: TextureRect = %Background -func _ready() -> void: - _create_plants() - - func set_garden_layout(p_garden_layout: GardenLayout) -> void: if not p_garden_layout: Log.error("Garden: Cannot set garden layout because it is null") @@ -59,6 +42,7 @@ func set_garden_layout(p_garden_layout: GardenLayout) -> void: garden_layout = p_garden_layout set_background(garden_layout.color) _configure_slots(garden_layout.lesson_buttons.size()) + _hide_all_plants() func _configure_slots(lesson_count: int) -> void: @@ -88,37 +72,24 @@ func set_background(p_color: int) -> void: color = garden_colors[p_color] -func _create_plants() -> void: - if not plants_container: +func _hide_all_plants() -> void: + if not all_plants: return - for i: int in range(PLANT_COUNT): - var plant: TextureRect = TextureRect.new() - plant.texture = load(PLANT_PATH_MODEL % [i + 1]) - plant.expand_mode = 1 - plant.stretch_mode = 5 - plant.mouse_filter = Control.MOUSE_FILTER_IGNORE - var layout: Dictionary = PLANT_LAYOUTS[i] - plant.position = Vector2(layout.x, layout.y) - plant.size = Vector2(layout.w, layout.h) - plant.modulate = PLANT_COLOR + for plant: TextureRect in all_plants: plant.visible = false - plants_container.add_child(plant) - plant_controls.append(plant) func update_plants_visibility(completed_minigames: int, total_minigames: int) -> void: - if total_minigames <= 0: + if not all_plants or total_minigames <= 0: return - # Distribute 8 plants across the total minigame count. - # 0 completed → 0 visible, all completed → all 8 visible. var visible_count: int = 0 if completed_minigames >= total_minigames: visible_count = PLANT_COUNT elif completed_minigames > 0: visible_count = int(float(completed_minigames) * float(PLANT_COUNT) / float(total_minigames)) visible_count = clampi(visible_count, 1, PLANT_COUNT - 1) - for i: int in range(plant_controls.size()): - plant_controls[i].visible = i < visible_count + for i: int in range(all_plants.size()): + all_plants[i].visible = i < visible_count func get_button_size() -> Vector2: diff --git a/resources/gardens/garden.tscn b/resources/gardens/garden.tscn index 9ca1feb5..47b8a5ee 100644 --- a/resources/gardens/garden.tscn +++ b/resources/gardens/garden.tscn @@ -4,6 +4,14 @@ [ext_resource type="Texture2D" uid="uid://d26hapg1hf8a6" path="res://assets/gardens/gardens/Garden_01.png" id="3_p7iv3"] [ext_resource type="PackedScene" uid="uid://delcgui3v0eek" path="res://sources/lesson_screen/lesson_button.tscn" id="4_epm30"] [ext_resource type="Texture2D" uid="uid://bfqwlmmliem8f" path="res://assets/gardens/jellyfish.png" id="jellyfish_tex"] +[ext_resource type="Texture2D" uid="uid://dcekseb1b3ruw" path="res://assets/gardens/plants/garden_plant_01.png" id="plant_01"] +[ext_resource type="Texture2D" uid="uid://clkr31osbqs7u" path="res://assets/gardens/plants/garden_plant_02.png" id="plant_02"] +[ext_resource type="Texture2D" uid="uid://dgssb0oonuqku" path="res://assets/gardens/plants/garden_plant_03.png" id="plant_03"] +[ext_resource type="Texture2D" uid="uid://bqp1nkk53y1is" path="res://assets/gardens/plants/garden_plant_04.png" id="plant_04"] +[ext_resource type="Texture2D" uid="uid://dvxnktx1wiyxp" path="res://assets/gardens/plants/garden_plant_05.png" id="plant_05"] +[ext_resource type="Texture2D" uid="uid://f2arml2f4b8p" path="res://assets/gardens/plants/garden_plant_06.png" id="plant_06"] +[ext_resource type="Texture2D" uid="uid://dufnm3bkfe5yv" path="res://assets/gardens/plants/garden_plant_07.png" id="plant_07"] +[ext_resource type="Texture2D" uid="uid://dt2a0dea0hv0c" path="res://assets/gardens/plants/garden_plant_08.png" id="plant_08"] [node name="Garden" type="Control" unique_id=1950346826] custom_minimum_size = Vector2(2400, 2.08165e-12) @@ -28,7 +36,112 @@ mouse_filter = 2 texture = ExtResource("3_p7iv3") expand_mode = 1 -[node name="Buttons" type="Control" parent="." unique_id=1943933146] +[node name="Plants" type="Control" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 + +[node name="Plant1" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 280.0 +offset_top = 300.0 +offset_right = 400.0 +offset_bottom = 1250.0 +mouse_filter = 2 +texture = ExtResource("plant_01") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant2" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 530.0 +offset_top = 1320.0 +offset_right = 740.0 +offset_bottom = 1670.0 +mouse_filter = 2 +texture = ExtResource("plant_02") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant3" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 1150.0 +offset_top = 1200.0 +offset_right = 1590.0 +offset_bottom = 1530.0 +mouse_filter = 2 +texture = ExtResource("plant_03") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant4" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 820.0 +offset_top = 530.0 +offset_right = 1120.0 +offset_bottom = 950.0 +mouse_filter = 2 +texture = ExtResource("plant_04") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant5" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 650.0 +offset_top = 820.0 +offset_right = 795.0 +offset_bottom = 1130.0 +mouse_filter = 2 +texture = ExtResource("plant_05") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant6" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 1560.0 +offset_top = 720.0 +offset_right = 1745.0 +offset_bottom = 1035.0 +mouse_filter = 2 +texture = ExtResource("plant_06") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant7" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 720.0 +offset_top = 1250.0 +offset_right = 850.0 +offset_bottom = 1770.0 +mouse_filter = 2 +texture = ExtResource("plant_07") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant8" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 1050.0 +offset_top = 480.0 +offset_right = 1450.0 +offset_bottom = 880.0 +mouse_filter = 2 +texture = ExtResource("plant_08") +expand_mode = 1 +stretch_mode = 5 + +[node name="Buttons" type="Control" parent="."] layout_mode = 1 anchors_preset = 15 anchor_right = 1.0 @@ -77,7 +190,7 @@ offset_right = 1860.0 offset_bottom = 642.0 pivot_offset = Vector2(150, 150) -[node name="Jellyfish" type="TextureRect" parent="." unique_id=1070527896] +[node name="Jellyfish" type="TextureRect" parent="."] layout_mode = 0 offset_left = 1269.0 offset_top = 50.0 @@ -87,12 +200,3 @@ mouse_filter = 2 texture = ExtResource("jellyfish_tex") expand_mode = 1 stretch_mode = 5 - -[node name="Plants" type="Control" parent="."] -layout_mode = 1 -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -grow_horizontal = 2 -grow_vertical = 2 -mouse_filter = 2 From aa161cf21ea1844f0efb699e0cd33b7cbbde1597 Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Thu, 2 Apr 2026 10:55:21 +0200 Subject: [PATCH 017/111] =?UTF-8?q?Reduce=20lesson=20button=20size=20by=20?= =?UTF-8?q?20%=20(300=E2=86=92240px)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Buttons, pivot offsets and font size scaled down proportionally. Same center positions preserved. Co-Authored-By: Claude Opus 4.6 (1M context) --- resources/gardens/garden.tscn | 86 ++++++++++++------------ sources/gardens/gardens.gd | 2 +- sources/lesson_screen/lesson_button.tscn | 2 +- 3 files changed, 45 insertions(+), 45 deletions(-) diff --git a/resources/gardens/garden.tscn b/resources/gardens/garden.tscn index 47b8a5ee..461b3a25 100644 --- a/resources/gardens/garden.tscn +++ b/resources/gardens/garden.tscn @@ -36,7 +36,7 @@ mouse_filter = 2 texture = ExtResource("3_p7iv3") expand_mode = 1 -[node name="Plants" type="Control" parent="."] +[node name="Plants" type="Control" parent="." unique_id=1973214026] layout_mode = 1 anchors_preset = 15 anchor_right = 1.0 @@ -45,19 +45,19 @@ grow_horizontal = 2 grow_vertical = 2 mouse_filter = 2 -[node name="Plant1" type="TextureRect" parent="Plants"] +[node name="Plant1" type="TextureRect" parent="Plants" unique_id=1277212351] modulate = Color(0.0392157, 0.333333, 0.356863, 1) layout_mode = 0 -offset_left = 280.0 +offset_left = 335.0 offset_top = 300.0 -offset_right = 400.0 +offset_right = 455.0 offset_bottom = 1250.0 mouse_filter = 2 texture = ExtResource("plant_01") expand_mode = 1 stretch_mode = 5 -[node name="Plant2" type="TextureRect" parent="Plants"] +[node name="Plant2" type="TextureRect" parent="Plants" unique_id=220467057] modulate = Color(0.0392157, 0.333333, 0.356863, 1) layout_mode = 0 offset_left = 530.0 @@ -69,7 +69,7 @@ texture = ExtResource("plant_02") expand_mode = 1 stretch_mode = 5 -[node name="Plant3" type="TextureRect" parent="Plants"] +[node name="Plant3" type="TextureRect" parent="Plants" unique_id=1210572743] modulate = Color(0.0392157, 0.333333, 0.356863, 1) layout_mode = 0 offset_left = 1150.0 @@ -81,7 +81,7 @@ texture = ExtResource("plant_03") expand_mode = 1 stretch_mode = 5 -[node name="Plant4" type="TextureRect" parent="Plants"] +[node name="Plant4" type="TextureRect" parent="Plants" unique_id=436876835] modulate = Color(0.0392157, 0.333333, 0.356863, 1) layout_mode = 0 offset_left = 820.0 @@ -93,7 +93,7 @@ texture = ExtResource("plant_04") expand_mode = 1 stretch_mode = 5 -[node name="Plant5" type="TextureRect" parent="Plants"] +[node name="Plant5" type="TextureRect" parent="Plants" unique_id=619277760] modulate = Color(0.0392157, 0.333333, 0.356863, 1) layout_mode = 0 offset_left = 650.0 @@ -105,7 +105,7 @@ texture = ExtResource("plant_05") expand_mode = 1 stretch_mode = 5 -[node name="Plant6" type="TextureRect" parent="Plants"] +[node name="Plant6" type="TextureRect" parent="Plants" unique_id=1456263299] modulate = Color(0.0392157, 0.333333, 0.356863, 1) layout_mode = 0 offset_left = 1560.0 @@ -117,7 +117,7 @@ texture = ExtResource("plant_06") expand_mode = 1 stretch_mode = 5 -[node name="Plant7" type="TextureRect" parent="Plants"] +[node name="Plant7" type="TextureRect" parent="Plants" unique_id=1690129702] modulate = Color(0.0392157, 0.333333, 0.356863, 1) layout_mode = 0 offset_left = 720.0 @@ -129,7 +129,7 @@ texture = ExtResource("plant_07") expand_mode = 1 stretch_mode = 5 -[node name="Plant8" type="TextureRect" parent="Plants"] +[node name="Plant8" type="TextureRect" parent="Plants" unique_id=237080615] modulate = Color(0.0392157, 0.333333, 0.356863, 1) layout_mode = 0 offset_left = 1050.0 @@ -141,7 +141,7 @@ texture = ExtResource("plant_08") expand_mode = 1 stretch_mode = 5 -[node name="Buttons" type="Control" parent="."] +[node name="Buttons" type="Control" parent="." unique_id=1790824507] layout_mode = 1 anchors_preset = 15 anchor_right = 1.0 @@ -150,47 +150,47 @@ grow_horizontal = 2 grow_vertical = 2 mouse_filter = 2 -[node name="Slot1" parent="Buttons" instance=ExtResource("4_epm30")] +[node name="Slot1" parent="Buttons" unique_id=1645508767 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 540.0 -offset_top = 1158.0 -offset_right = 840.0 -offset_bottom = 1458.0 -pivot_offset = Vector2(150, 150) +offset_left = 570.0 +offset_top = 1188.0 +offset_right = 810.0 +offset_bottom = 1428.0 +pivot_offset = Vector2(120, 120) -[node name="Slot2" parent="Buttons" instance=ExtResource("4_epm30")] +[node name="Slot2" parent="Buttons" unique_id=325907674 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 843.0 -offset_top = 954.0 -offset_right = 1143.0 -offset_bottom = 1254.0 -pivot_offset = Vector2(150, 150) +offset_left = 873.0 +offset_top = 984.0 +offset_right = 1113.0 +offset_bottom = 1224.0 +pivot_offset = Vector2(120, 120) -[node name="Slot3" parent="Buttons" instance=ExtResource("4_epm30")] +[node name="Slot3" parent="Buttons" unique_id=1387716236 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 1118.0 -offset_top = 750.0 -offset_right = 1418.0 -offset_bottom = 1050.0 -pivot_offset = Vector2(150, 150) +offset_left = 1148.0 +offset_top = 780.0 +offset_right = 1388.0 +offset_bottom = 1020.0 +pivot_offset = Vector2(120, 120) -[node name="Slot4" parent="Buttons" instance=ExtResource("4_epm30")] +[node name="Slot4" parent="Buttons" unique_id=981344232 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 1353.0 -offset_top = 546.0 -offset_right = 1653.0 -offset_bottom = 846.0 -pivot_offset = Vector2(150, 150) +offset_left = 1383.0 +offset_top = 576.0 +offset_right = 1623.0 +offset_bottom = 816.0 +pivot_offset = Vector2(120, 120) -[node name="Slot5" parent="Buttons" instance=ExtResource("4_epm30")] +[node name="Slot5" parent="Buttons" unique_id=1687113148 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 1560.0 -offset_top = 342.0 -offset_right = 1860.0 -offset_bottom = 642.0 -pivot_offset = Vector2(150, 150) +offset_left = 1590.0 +offset_top = 372.0 +offset_right = 1830.0 +offset_bottom = 612.0 +pivot_offset = Vector2(120, 120) -[node name="Jellyfish" type="TextureRect" parent="."] +[node name="Jellyfish" type="TextureRect" parent="." unique_id=1838244431] layout_mode = 0 offset_left = 1269.0 offset_top = 50.0 diff --git a/sources/gardens/gardens.gd b/sources/gardens/gardens.gd index 041b338e..79bc2fb3 100644 --- a/sources/gardens/gardens.gd +++ b/sources/gardens/gardens.gd @@ -374,7 +374,7 @@ func _play_brain_tutorial() -> void: static func _get_lesson_button_half_size() -> Vector2: - return Vector2(150, 150) + return Vector2(120, 120) static func _get_layout_cache_base_dir() -> String: diff --git a/sources/lesson_screen/lesson_button.tscn b/sources/lesson_screen/lesson_button.tscn index 4dfa1c6b..135aec59 100644 --- a/sources/lesson_screen/lesson_button.tscn +++ b/sources/lesson_screen/lesson_button.tscn @@ -73,7 +73,7 @@ offset_top = 8.0 grow_horizontal = 2 grow_vertical = 2 mouse_filter = 1 -theme_override_font_sizes/font_size = 110 +theme_override_font_sizes/font_size = 88 horizontal_alignment = 1 vertical_alignment = 1 uppercase = true From 2b5f5f2e284fc404e1b1c98656a164dab714754b Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Thu, 2 Apr 2026 11:03:50 +0200 Subject: [PATCH 018/111] Make gardens assets hard-placed instead of generated --- resources/gardens/garden.tscn | 112 +++++++++++++++++----------------- 1 file changed, 56 insertions(+), 56 deletions(-) diff --git a/resources/gardens/garden.tscn b/resources/gardens/garden.tscn index 461b3a25..80d8106f 100644 --- a/resources/gardens/garden.tscn +++ b/resources/gardens/garden.tscn @@ -48,10 +48,10 @@ mouse_filter = 2 [node name="Plant1" type="TextureRect" parent="Plants" unique_id=1277212351] modulate = Color(0.0392157, 0.333333, 0.356863, 1) layout_mode = 0 -offset_left = 335.0 -offset_top = 300.0 -offset_right = 455.0 -offset_bottom = 1250.0 +offset_left = 395.0 +offset_top = 475.0 +offset_right = 515.0 +offset_bottom = 1425.0 mouse_filter = 2 texture = ExtResource("plant_01") expand_mode = 1 @@ -60,10 +60,10 @@ stretch_mode = 5 [node name="Plant2" type="TextureRect" parent="Plants" unique_id=220467057] modulate = Color(0.0392157, 0.333333, 0.356863, 1) layout_mode = 0 -offset_left = 530.0 -offset_top = 1320.0 -offset_right = 740.0 -offset_bottom = 1670.0 +offset_left = 574.0 +offset_top = 1322.0 +offset_right = 744.0 +offset_bottom = 1592.0 mouse_filter = 2 texture = ExtResource("plant_02") expand_mode = 1 @@ -72,10 +72,10 @@ stretch_mode = 5 [node name="Plant3" type="TextureRect" parent="Plants" unique_id=1210572743] modulate = Color(0.0392157, 0.333333, 0.356863, 1) layout_mode = 0 -offset_left = 1150.0 -offset_top = 1200.0 -offset_right = 1590.0 -offset_bottom = 1530.0 +offset_left = 1178.0 +offset_top = 1058.0 +offset_right = 1618.0 +offset_bottom = 1388.0 mouse_filter = 2 texture = ExtResource("plant_03") expand_mode = 1 @@ -84,10 +84,10 @@ stretch_mode = 5 [node name="Plant4" type="TextureRect" parent="Plants" unique_id=436876835] modulate = Color(0.0392157, 0.333333, 0.356863, 1) layout_mode = 0 -offset_left = 820.0 -offset_top = 530.0 -offset_right = 1120.0 -offset_bottom = 950.0 +offset_left = 864.0 +offset_top = 308.0 +offset_right = 1084.0 +offset_bottom = 628.0 mouse_filter = 2 texture = ExtResource("plant_04") expand_mode = 1 @@ -96,10 +96,10 @@ stretch_mode = 5 [node name="Plant5" type="TextureRect" parent="Plants" unique_id=619277760] modulate = Color(0.0392157, 0.333333, 0.356863, 1) layout_mode = 0 -offset_left = 650.0 -offset_top = 820.0 -offset_right = 795.0 -offset_bottom = 1130.0 +offset_left = 744.0 +offset_top = 688.0 +offset_right = 889.0 +offset_bottom = 998.0 mouse_filter = 2 texture = ExtResource("plant_05") expand_mode = 1 @@ -108,10 +108,10 @@ stretch_mode = 5 [node name="Plant6" type="TextureRect" parent="Plants" unique_id=1456263299] modulate = Color(0.0392157, 0.333333, 0.356863, 1) layout_mode = 0 -offset_left = 1560.0 -offset_top = 720.0 -offset_right = 1745.0 -offset_bottom = 1035.0 +offset_left = 1742.0 +offset_top = 762.0 +offset_right = 1927.0 +offset_bottom = 1077.0 mouse_filter = 2 texture = ExtResource("plant_06") expand_mode = 1 @@ -120,10 +120,10 @@ stretch_mode = 5 [node name="Plant7" type="TextureRect" parent="Plants" unique_id=1690129702] modulate = Color(0.0392157, 0.333333, 0.356863, 1) layout_mode = 0 -offset_left = 720.0 -offset_top = 1250.0 -offset_right = 850.0 -offset_bottom = 1770.0 +offset_left = 880.0 +offset_top = 1172.0 +offset_right = 1010.0 +offset_bottom = 1592.0 mouse_filter = 2 texture = ExtResource("plant_07") expand_mode = 1 @@ -132,10 +132,10 @@ stretch_mode = 5 [node name="Plant8" type="TextureRect" parent="Plants" unique_id=237080615] modulate = Color(0.0392157, 0.333333, 0.356863, 1) layout_mode = 0 -offset_left = 1050.0 -offset_top = 480.0 -offset_right = 1450.0 -offset_bottom = 880.0 +offset_left = 1122.0 +offset_top = 288.0 +offset_right = 1472.0 +offset_bottom = 638.0 mouse_filter = 2 texture = ExtResource("plant_08") expand_mode = 1 @@ -152,50 +152,50 @@ mouse_filter = 2 [node name="Slot1" parent="Buttons" unique_id=1645508767 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 570.0 -offset_top = 1188.0 -offset_right = 810.0 -offset_bottom = 1428.0 +offset_left = 584.0 +offset_top = 1066.0 +offset_right = 824.0 +offset_bottom = 1306.0 pivot_offset = Vector2(120, 120) [node name="Slot2" parent="Buttons" unique_id=325907674 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 873.0 -offset_top = 984.0 -offset_right = 1113.0 -offset_bottom = 1224.0 +offset_left = 867.0 +offset_top = 880.0 +offset_right = 1107.0 +offset_bottom = 1120.0 pivot_offset = Vector2(120, 120) [node name="Slot3" parent="Buttons" unique_id=1387716236 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 1148.0 -offset_top = 780.0 -offset_right = 1388.0 -offset_bottom = 1020.0 +offset_left = 1170.0 +offset_top = 800.0 +offset_right = 1410.0 +offset_bottom = 1040.0 pivot_offset = Vector2(120, 120) [node name="Slot4" parent="Buttons" unique_id=981344232 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 1383.0 -offset_top = 576.0 -offset_right = 1623.0 -offset_bottom = 816.0 +offset_left = 1445.0 +offset_top = 628.0 +offset_right = 1685.0 +offset_bottom = 868.0 pivot_offset = Vector2(120, 120) [node name="Slot5" parent="Buttons" unique_id=1687113148 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 1590.0 -offset_top = 372.0 -offset_right = 1830.0 -offset_bottom = 612.0 +offset_left = 1744.0 +offset_top = 478.0 +offset_right = 1984.0 +offset_bottom = 718.0 pivot_offset = Vector2(120, 120) [node name="Jellyfish" type="TextureRect" parent="." unique_id=1838244431] layout_mode = 0 -offset_left = 1269.0 -offset_top = 50.0 -offset_right = 1549.0 -offset_bottom = 530.0 +offset_left = 1511.0 +offset_top = 32.0 +offset_right = 1791.0 +offset_bottom = 512.0 mouse_filter = 2 texture = ExtResource("jellyfish_tex") expand_mode = 1 From 9b90ba6d00fdb94b9be0c2ef3d9bf6b0bc800351 Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Thu, 2 Apr 2026 11:30:31 +0200 Subject: [PATCH 019/111] Small fixes --- sources/gardens/gardens.gd | 4 ++-- sources/menus/settings/developer_settings.gd | 4 ++-- sources/minigames/base/base_minigame.gd | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/sources/gardens/gardens.gd b/sources/gardens/gardens.gd index 79bc2fb3..d76a3c5d 100644 --- a/sources/gardens/gardens.gd +++ b/sources/gardens/gardens.gd @@ -17,8 +17,8 @@ const BACK_BUTTON_HOLD_DURATION_SECONDS: float = 1.0 const LAYOUT_VERSION: int = 13 # Centers of the 5 fixed button slots (must match garden.tscn positions) const SLOT_CENTERS: Array[Vector2i] = [ - Vector2i(690, 1308), Vector2i(993, 1104), Vector2i(1268, 900), - Vector2i(1503, 696), Vector2i(1710, 492) + Vector2i(704, 1186), Vector2i(987, 1000), Vector2i(1290, 920), + Vector2i(1565, 748), Vector2i(1864, 598) ] static var transition_data: Dictionary = {} static var cached_gardens_layout: GardensLayout diff --git a/sources/menus/settings/developer_settings.gd b/sources/menus/settings/developer_settings.gd index 80e1d673..18c1f7d2 100644 --- a/sources/menus/settings/developer_settings.gd +++ b/sources/menus/settings/developer_settings.gd @@ -135,12 +135,12 @@ func _on_filters_changed(checked: bool, index: int) -> void: func _input(event: InputEvent) -> void: # Pinch to zoom on mobile if event is InputEventMagnifyGesture: - var new_zoom := clampf(zoom_level * event.factor, ZOOM_MIN, ZOOM_MAX) + var new_zoom: float = clampf(zoom_level * event.factor, ZOOM_MIN, ZOOM_MAX) _apply_zoom(new_zoom, event.position) get_viewport().set_input_as_handled() # Mouse wheel zoom on desktop elif event is InputEventMouseButton and event.pressed: - var new_zoom := zoom_level + var new_zoom: float = zoom_level if event.button_index == MOUSE_BUTTON_WHEEL_UP: new_zoom = clampf(zoom_level + ZOOM_STEP_WHEEL, ZOOM_MIN, ZOOM_MAX) elif event.button_index == MOUSE_BUTTON_WHEEL_DOWN: diff --git a/sources/minigames/base/base_minigame.gd b/sources/minigames/base/base_minigame.gd index 2ba2cd56..6bb7c711 100644 --- a/sources/minigames/base/base_minigame.gd +++ b/sources/minigames/base/base_minigame.gd @@ -412,9 +412,9 @@ func _play_stimulus() -> void: func _set_root_timers_paused(paused: bool) -> void: - for child in get_children(): + for child: Node in get_children(): if child is Timer: - child.paused = paused + (child as Timer).paused = paused func _highlight() -> void: From cf49765d67fbc2b8838a84db823cc816cad78920 Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Thu, 2 Apr 2026 15:03:42 +0200 Subject: [PATCH 020/111] Fix path lines to read button positions from scene nodes Path now reads actual button positions and sizes from the visible LessonButton nodes instead of SLOT_CENTERS constants. This means editing button positions in the Godot editor automatically updates the path line. Co-Authored-By: Claude Opus 4.6 (1M context) --- sources/gardens/gardens.gd | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/sources/gardens/gardens.gd b/sources/gardens/gardens.gd index d76a3c5d..21f68dcc 100644 --- a/sources/gardens/gardens.gd +++ b/sources/gardens/gardens.gd @@ -836,19 +836,26 @@ func set_up_path() -> void: return points = [] var curve: Curve2D = Curve2D.new() - for index: int in range(gardens_layout.gardens.size()): - if index >= garden_parent.get_child_count(): - break - var garden_layout: GardenLayout = gardens_layout.gardens[index] + for index: int in range(garden_parent.get_child_count()): var garden_control: Garden = garden_parent.get_child(index) - for button: GardenLayout.GardenLayoutLessonButton in garden_layout.lesson_buttons: - var point_position: Vector2 = garden_parent.position + garden_control.position + Vector2(button.position) - var point_in_position: Vector2 = Vector2.ZERO + var lesson_buttons: Array[LessonButton] = garden_control.get_lesson_buttons() + for button_index: int in range(lesson_buttons.size()): + var button: LessonButton = lesson_buttons[button_index] + var button_center: Vector2 = button.position + button.size / 2.0 + var point_position: Vector2 = garden_parent.position + garden_control.position + button_center + var path_out: Vector2 = Vector2.ZERO + if button_index + 1 < lesson_buttons.size(): + var next_button: LessonButton = lesson_buttons[button_index + 1] + var next_center: Vector2 = next_button.position + next_button.size / 2.0 + path_out = (next_center - button_center) * 0.5 + else: + path_out = Vector2(GARDEN_SIZE * 0.15, (-1.0 if (index % 2) == 0 else 1.0) * 60) + var point_in: Vector2 = Vector2.ZERO if curve.point_count > 0: - point_in_position = curve.get_point_position(curve.point_count - 1) + curve.get_point_out(curve.point_count - 1) - point_position - curve.add_point(point_position, point_in_position, button.path_out_position) - points.append([point_position, point_in_position, button.path_out_position]) - locked_line.points = curve.get_baked_points() + point_in = curve.get_point_position(curve.point_count - 1) + curve.get_point_out(curve.point_count - 1) - point_position + curve.add_point(point_position, point_in, path_out) + points.append([point_position, point_in, path_out]) + locked_line.points = curve.get_baked_points() func _set_unlocked_path(max_unlocked_lesson_index: int, include_boss_segment: bool = true) -> void: From 8d0a07f55ca6eff19161ea40037fe26db9d7ab3c Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Thu, 16 Apr 2026 14:01:31 +0200 Subject: [PATCH 021/111] cleaning variables --- sources/gardens/gardens.gd | 7 ++---- sources/menus/settings/developer_settings.gd | 25 +++++++++++--------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/sources/gardens/gardens.gd b/sources/gardens/gardens.gd index 21f68dcc..a900423c 100644 --- a/sources/gardens/gardens.gd +++ b/sources/gardens/gardens.gd @@ -539,16 +539,13 @@ static func generate_gardens_layout(total_lessons: int) -> GardensLayout: return layout Log.info("Gardens: Generating dynamic gardens layout") Log.trace("Gardens: Total lessons to layout: %s" % str(total_lessons)) - var rng: RandomNumberGenerator = RandomNumberGenerator.new() - rng.seed = 13985 - Log.trace("Gardens: RNG seeded with %s" % str(rng.seed)) var lessons_left: int = total_lessons var garden_index: int = 0 while lessons_left > 0 and garden_index < GARDEN_TEXTURES_NB: var gardens_left: int = GARDEN_TEXTURES_NB - garden_index var lessons_for_garden: int = int(ceili(float(lessons_left) / float(gardens_left))) Log.trace("Gardens: Generating layout for garden %s with %s lessons left" % [str(garden_index), str(lessons_left)]) - layout.gardens.append(_generate_single_garden_layout(garden_index, lessons_for_garden, rng)) + layout.gardens.append(_generate_single_garden_layout(garden_index, lessons_for_garden)) lessons_left -= lessons_for_garden Log.trace("Gardens: Lessons left after garden %s generation: %s" % [str(garden_index), str(lessons_left)]) garden_index += 1 @@ -556,7 +553,7 @@ static func generate_gardens_layout(total_lessons: int) -> GardensLayout: return layout -static func _generate_single_garden_layout(garden_index: int, lessons_for_garden: int, rng: RandomNumberGenerator) -> GardenLayout: +static func _generate_single_garden_layout(garden_index: int, lessons_for_garden: int) -> GardenLayout: Log.info("Gardens: Generating single garden layout for garden %s" % str(garden_index)) Log.trace("Gardens: Garden %s will include %s lessons" % [str(garden_index), str(lessons_for_garden)]) var garden_layout: GardenLayout = GardenLayout.new() diff --git a/sources/menus/settings/developer_settings.gd b/sources/menus/settings/developer_settings.gd index 18c1f7d2..138adead 100644 --- a/sources/menus/settings/developer_settings.gd +++ b/sources/menus/settings/developer_settings.gd @@ -135,19 +135,22 @@ func _on_filters_changed(checked: bool, index: int) -> void: func _input(event: InputEvent) -> void: # Pinch to zoom on mobile if event is InputEventMagnifyGesture: - var new_zoom: float = clampf(zoom_level * event.factor, ZOOM_MIN, ZOOM_MAX) - _apply_zoom(new_zoom, event.position) + var magnify_event: InputEventMagnifyGesture = event as InputEventMagnifyGesture + var new_zoom: float = clampf(zoom_level * magnify_event.factor, ZOOM_MIN, ZOOM_MAX) + _apply_zoom(new_zoom, magnify_event.position) get_viewport().set_input_as_handled() # Mouse wheel zoom on desktop - elif event is InputEventMouseButton and event.pressed: - var new_zoom: float = zoom_level - if event.button_index == MOUSE_BUTTON_WHEEL_UP: - new_zoom = clampf(zoom_level + ZOOM_STEP_WHEEL, ZOOM_MIN, ZOOM_MAX) - elif event.button_index == MOUSE_BUTTON_WHEEL_DOWN: - new_zoom = clampf(zoom_level - ZOOM_STEP_WHEEL, ZOOM_MIN, ZOOM_MAX) - if new_zoom != zoom_level: - _apply_zoom(new_zoom, event.position) - get_viewport().set_input_as_handled() + elif event is InputEventMouseButton: + var mouse_event: InputEventMouseButton = event as InputEventMouseButton + if mouse_event.pressed: + var new_zoom: float = zoom_level + if mouse_event.button_index == MOUSE_BUTTON_WHEEL_UP: + new_zoom = clampf(zoom_level + ZOOM_STEP_WHEEL, ZOOM_MIN, ZOOM_MAX) + elif mouse_event.button_index == MOUSE_BUTTON_WHEEL_DOWN: + new_zoom = clampf(zoom_level - ZOOM_STEP_WHEEL, ZOOM_MIN, ZOOM_MAX) + if new_zoom != zoom_level: + _apply_zoom(new_zoom, mouse_event.position) + get_viewport().set_input_as_handled() func _apply_zoom(new_zoom: float, screen_pos: Vector2) -> void: From 24d77e19e03b99952f1b3cad761f6a5c87890edc Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Thu, 16 Apr 2026 15:35:45 +0200 Subject: [PATCH 022/111] Replace single garden scene with 12 fixed garden scenes with per-garden colors Each garden (garden_01.tscn through garden_12.tscn) now has its own color palette for lesson buttons (unlocked/completed fill and text colors). Lesson count is validated to be between 12 and 60. The old dynamic duplication of a single garden.tscn is replaced by instantiating the correct scene per garden index. Co-Authored-By: Claude Opus 4.6 (1M context) --- resources/gardens/garden.gd | 17 +- resources/gardens/garden_01.tscn | 206 ++++++++++++++++++ .../gardens/{garden.tscn => garden_02.tscn} | 44 ++-- resources/gardens/garden_03.tscn | 206 ++++++++++++++++++ resources/gardens/garden_04.tscn | 206 ++++++++++++++++++ resources/gardens/garden_05.tscn | 206 ++++++++++++++++++ resources/gardens/garden_06.tscn | 206 ++++++++++++++++++ resources/gardens/garden_07.tscn | 206 ++++++++++++++++++ resources/gardens/garden_08.tscn | 206 ++++++++++++++++++ resources/gardens/garden_09.tscn | 206 ++++++++++++++++++ resources/gardens/garden_10.tscn | 206 ++++++++++++++++++ resources/gardens/garden_11.tscn | 206 ++++++++++++++++++ resources/gardens/garden_12.tscn | 206 ++++++++++++++++++ sources/gardens/gardens.gd | 38 +++- sources/lesson_screen/lesson_button.gd | 29 ++- 15 files changed, 2354 insertions(+), 40 deletions(-) create mode 100644 resources/gardens/garden_01.tscn rename resources/gardens/{garden.tscn => garden_02.tscn} (78%) create mode 100644 resources/gardens/garden_03.tscn create mode 100644 resources/gardens/garden_04.tscn create mode 100644 resources/gardens/garden_05.tscn create mode 100644 resources/gardens/garden_06.tscn create mode 100644 resources/gardens/garden_07.tscn create mode 100644 resources/gardens/garden_08.tscn create mode 100644 resources/gardens/garden_09.tscn create mode 100644 resources/gardens/garden_10.tscn create mode 100644 resources/gardens/garden_11.tscn create mode 100644 resources/gardens/garden_12.tscn diff --git a/resources/gardens/garden.gd b/resources/gardens/garden.gd index ec5fd1eb..325e586c 100644 --- a/resources/gardens/garden.gd +++ b/resources/gardens/garden.gd @@ -17,7 +17,12 @@ const SLOT_SELECTION: Dictionary = { @export var garden_layout: GardenLayout: set = set_garden_layout -@export var garden_colors: Array[Color] = [] +## Title is for developer reference only — not used in-game. +@export var title: String = "" +@export var unlocked_lesson: Color = Color("176d78") +@export var unlocked_lesson_text: Color = Color("9be3ea") +@export var completed_lesson: Color = Color("9be3ea") +@export var completed_lesson_text: Color = Color("0a555b") var color: Color var current_progression: float = 0.0 @@ -42,6 +47,7 @@ func set_garden_layout(p_garden_layout: GardenLayout) -> void: garden_layout = p_garden_layout set_background(garden_layout.color) _configure_slots(garden_layout.lesson_buttons.size()) + _apply_colors_to_buttons() _hide_all_plants() @@ -68,8 +74,13 @@ func set_background(p_color: int) -> void: var path: String = BACKGROUND_PATH_MODEL % [p_color + 1] var texture: Texture2D = load(path) if ResourceLoader.exists(path) else load(BACKGROUND_PATH_MODEL % [1]) background.texture = texture - background.modulate = LessonButton.UNLOCKED_FILL_COLOR - color = garden_colors[p_color] + background.modulate = unlocked_lesson + color = unlocked_lesson + + +func _apply_colors_to_buttons() -> void: + for button: LessonButton in active_buttons: + button.set_garden_colors(unlocked_lesson, unlocked_lesson_text, completed_lesson, completed_lesson_text) func _hide_all_plants() -> void: diff --git a/resources/gardens/garden_01.tscn b/resources/gardens/garden_01.tscn new file mode 100644 index 00000000..f6a0b2a1 --- /dev/null +++ b/resources/gardens/garden_01.tscn @@ -0,0 +1,206 @@ +[gd_scene format=3] + +[ext_resource type="Script" uid="uid://ch5h4p1o54whq" path="res://resources/gardens/garden.gd" id="1_5owem"] +[ext_resource type="Texture2D" uid="uid://d26hapg1hf8a6" path="res://assets/gardens/gardens/Garden_01.png" id="3_p7iv3"] +[ext_resource type="PackedScene" uid="uid://delcgui3v0eek" path="res://sources/lesson_screen/lesson_button.tscn" id="4_epm30"] +[ext_resource type="Texture2D" uid="uid://bfqwlmmliem8f" path="res://assets/gardens/jellyfish.png" id="jellyfish_tex"] +[ext_resource type="Texture2D" uid="uid://dcekseb1b3ruw" path="res://assets/gardens/plants/garden_plant_01.png" id="plant_01"] +[ext_resource type="Texture2D" uid="uid://clkr31osbqs7u" path="res://assets/gardens/plants/garden_plant_02.png" id="plant_02"] +[ext_resource type="Texture2D" uid="uid://dgssb0oonuqku" path="res://assets/gardens/plants/garden_plant_03.png" id="plant_03"] +[ext_resource type="Texture2D" uid="uid://bqp1nkk53y1is" path="res://assets/gardens/plants/garden_plant_04.png" id="plant_04"] +[ext_resource type="Texture2D" uid="uid://dvxnktx1wiyxp" path="res://assets/gardens/plants/garden_plant_05.png" id="plant_05"] +[ext_resource type="Texture2D" uid="uid://f2arml2f4b8p" path="res://assets/gardens/plants/garden_plant_06.png" id="plant_06"] +[ext_resource type="Texture2D" uid="uid://dufnm3bkfe5yv" path="res://assets/gardens/plants/garden_plant_07.png" id="plant_07"] +[ext_resource type="Texture2D" uid="uid://dt2a0dea0hv0c" path="res://assets/gardens/plants/garden_plant_08.png" id="plant_08"] + +[node name="Garden" type="Control"] +custom_minimum_size = Vector2(2400, 2.08165e-12) +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 +script = ExtResource("1_5owem") +title = "Garden 01" +unlocked_lesson = Color(0.091, 0.427, 0.471, 1) +unlocked_lesson_text = Color(0.608, 0.89, 0.918, 1) +completed_lesson = Color(0.608, 0.89, 0.918, 1) +completed_lesson_text = Color(0.039, 0.333, 0.357, 1) + +[node name="Background" type="TextureRect" parent="."] +unique_name_in_owner = true +layout_mode = 0 +offset_left = 350.0 +offset_top = 50.0 +offset_right = 2050.0 +offset_bottom = 1750.0 +mouse_filter = 2 +texture = ExtResource("3_p7iv3") +expand_mode = 1 + +[node name="Plants" type="Control" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 + +[node name="Plant1" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 395.0 +offset_top = 475.0 +offset_right = 515.0 +offset_bottom = 1425.0 +mouse_filter = 2 +texture = ExtResource("plant_01") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant2" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 574.0 +offset_top = 1322.0 +offset_right = 744.0 +offset_bottom = 1592.0 +mouse_filter = 2 +texture = ExtResource("plant_02") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant3" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 1178.0 +offset_top = 1058.0 +offset_right = 1618.0 +offset_bottom = 1388.0 +mouse_filter = 2 +texture = ExtResource("plant_03") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant4" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 864.0 +offset_top = 308.0 +offset_right = 1084.0 +offset_bottom = 628.0 +mouse_filter = 2 +texture = ExtResource("plant_04") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant5" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 744.0 +offset_top = 688.0 +offset_right = 889.0 +offset_bottom = 998.0 +mouse_filter = 2 +texture = ExtResource("plant_05") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant6" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 1742.0 +offset_top = 762.0 +offset_right = 1927.0 +offset_bottom = 1077.0 +mouse_filter = 2 +texture = ExtResource("plant_06") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant7" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 880.0 +offset_top = 1172.0 +offset_right = 1010.0 +offset_bottom = 1592.0 +mouse_filter = 2 +texture = ExtResource("plant_07") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant8" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 1122.0 +offset_top = 288.0 +offset_right = 1472.0 +offset_bottom = 638.0 +mouse_filter = 2 +texture = ExtResource("plant_08") +expand_mode = 1 +stretch_mode = 5 + +[node name="Buttons" type="Control" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 + +[node name="Slot1" parent="Buttons" instance=ExtResource("4_epm30")] +layout_mode = 0 +offset_left = 584.0 +offset_top = 1066.0 +offset_right = 824.0 +offset_bottom = 1306.0 +pivot_offset = Vector2(120, 120) + +[node name="Slot2" parent="Buttons" instance=ExtResource("4_epm30")] +layout_mode = 0 +offset_left = 867.0 +offset_top = 880.0 +offset_right = 1107.0 +offset_bottom = 1120.0 +pivot_offset = Vector2(120, 120) + +[node name="Slot3" parent="Buttons" instance=ExtResource("4_epm30")] +layout_mode = 0 +offset_left = 1170.0 +offset_top = 800.0 +offset_right = 1410.0 +offset_bottom = 1040.0 +pivot_offset = Vector2(120, 120) + +[node name="Slot4" parent="Buttons" instance=ExtResource("4_epm30")] +layout_mode = 0 +offset_left = 1445.0 +offset_top = 628.0 +offset_right = 1685.0 +offset_bottom = 868.0 +pivot_offset = Vector2(120, 120) + +[node name="Slot5" parent="Buttons" instance=ExtResource("4_epm30")] +layout_mode = 0 +offset_left = 1744.0 +offset_top = 478.0 +offset_right = 1984.0 +offset_bottom = 718.0 +pivot_offset = Vector2(120, 120) + +[node name="Jellyfish" type="TextureRect" parent="."] +layout_mode = 0 +offset_left = 1511.0 +offset_top = 32.0 +offset_right = 1791.0 +offset_bottom = 512.0 +mouse_filter = 2 +texture = ExtResource("jellyfish_tex") +expand_mode = 1 +stretch_mode = 5 diff --git a/resources/gardens/garden.tscn b/resources/gardens/garden_02.tscn similarity index 78% rename from resources/gardens/garden.tscn rename to resources/gardens/garden_02.tscn index 80d8106f..59812f0a 100644 --- a/resources/gardens/garden.tscn +++ b/resources/gardens/garden_02.tscn @@ -1,4 +1,4 @@ -[gd_scene format=3 uid="uid://btg3qd8eld1mm"] +[gd_scene format=3 uid="uid://btfvuniqgiddp"] [ext_resource type="Script" uid="uid://ch5h4p1o54whq" path="res://resources/gardens/garden.gd" id="1_5owem"] [ext_resource type="Texture2D" uid="uid://d26hapg1hf8a6" path="res://assets/gardens/gardens/Garden_01.png" id="3_p7iv3"] @@ -13,7 +13,7 @@ [ext_resource type="Texture2D" uid="uid://dufnm3bkfe5yv" path="res://assets/gardens/plants/garden_plant_07.png" id="plant_07"] [ext_resource type="Texture2D" uid="uid://dt2a0dea0hv0c" path="res://assets/gardens/plants/garden_plant_08.png" id="plant_08"] -[node name="Garden" type="Control" unique_id=1950346826] +[node name="Garden" type="Control" unique_id=167073905] custom_minimum_size = Vector2(2400, 2.08165e-12) layout_mode = 3 anchors_preset = 15 @@ -23,9 +23,13 @@ grow_horizontal = 2 grow_vertical = 2 mouse_filter = 2 script = ExtResource("1_5owem") -garden_colors = Array[Color]([Color(0.588235, 0.439216, 0.878431, 1), Color(1, 0.909804, 0.137255, 1), Color(0.929412, 0.603922, 0.709804, 1), Color(0.658824, 0.262745, 0.286275, 1), Color(0.247059, 0.196078, 0.647059, 1), Color(0.619608, 0.976471, 0.670588, 1), Color(0.764706, 0.760784, 0.768627, 1), Color(1, 0.686275, 0.341176, 1), Color(0.305882, 0.996078, 0.894118, 1), Color(0.478431, 0.819608, 1, 1), Color(0.764706, 0.760784, 0.768627, 1), Color(1, 0.909804, 0.137255, 1), Color(0.658824, 0.262745, 0.286275, 1), Color(0.929412, 0.603922, 0.709804, 1), Color(0.619608, 0.976471, 0.670588, 1), Color(0.247059, 0.196078, 0.647059, 1), Color(0.305882, 0.996078, 0.894118, 1), Color(0.478431, 0.819608, 1, 1), Color(1, 0.686275, 0.341176, 1), Color(0.588235, 0.439216, 0.878431, 1)]) +title = "Garden 02" +unlocked_lesson = Color(0.357, 0.176, 0.557, 1) +unlocked_lesson_text = Color(0.831, 0.71, 0.941, 1) +completed_lesson = Color(0.831, 0.71, 0.941, 1) +completed_lesson_text = Color(0.227, 0.102, 0.369, 1) -[node name="Background" type="TextureRect" parent="." unique_id=667507132] +[node name="Background" type="TextureRect" parent="." unique_id=1058030897] unique_name_in_owner = true layout_mode = 0 offset_left = 350.0 @@ -36,7 +40,7 @@ mouse_filter = 2 texture = ExtResource("3_p7iv3") expand_mode = 1 -[node name="Plants" type="Control" parent="." unique_id=1973214026] +[node name="Plants" type="Control" parent="." unique_id=787934313] layout_mode = 1 anchors_preset = 15 anchor_right = 1.0 @@ -45,7 +49,7 @@ grow_horizontal = 2 grow_vertical = 2 mouse_filter = 2 -[node name="Plant1" type="TextureRect" parent="Plants" unique_id=1277212351] +[node name="Plant1" type="TextureRect" parent="Plants" unique_id=1278004645] modulate = Color(0.0392157, 0.333333, 0.356863, 1) layout_mode = 0 offset_left = 395.0 @@ -57,7 +61,7 @@ texture = ExtResource("plant_01") expand_mode = 1 stretch_mode = 5 -[node name="Plant2" type="TextureRect" parent="Plants" unique_id=220467057] +[node name="Plant2" type="TextureRect" parent="Plants" unique_id=1333561566] modulate = Color(0.0392157, 0.333333, 0.356863, 1) layout_mode = 0 offset_left = 574.0 @@ -69,7 +73,7 @@ texture = ExtResource("plant_02") expand_mode = 1 stretch_mode = 5 -[node name="Plant3" type="TextureRect" parent="Plants" unique_id=1210572743] +[node name="Plant3" type="TextureRect" parent="Plants" unique_id=628479663] modulate = Color(0.0392157, 0.333333, 0.356863, 1) layout_mode = 0 offset_left = 1178.0 @@ -81,7 +85,7 @@ texture = ExtResource("plant_03") expand_mode = 1 stretch_mode = 5 -[node name="Plant4" type="TextureRect" parent="Plants" unique_id=436876835] +[node name="Plant4" type="TextureRect" parent="Plants" unique_id=1131468365] modulate = Color(0.0392157, 0.333333, 0.356863, 1) layout_mode = 0 offset_left = 864.0 @@ -93,7 +97,7 @@ texture = ExtResource("plant_04") expand_mode = 1 stretch_mode = 5 -[node name="Plant5" type="TextureRect" parent="Plants" unique_id=619277760] +[node name="Plant5" type="TextureRect" parent="Plants" unique_id=1227508897] modulate = Color(0.0392157, 0.333333, 0.356863, 1) layout_mode = 0 offset_left = 744.0 @@ -105,7 +109,7 @@ texture = ExtResource("plant_05") expand_mode = 1 stretch_mode = 5 -[node name="Plant6" type="TextureRect" parent="Plants" unique_id=1456263299] +[node name="Plant6" type="TextureRect" parent="Plants" unique_id=2098937064] modulate = Color(0.0392157, 0.333333, 0.356863, 1) layout_mode = 0 offset_left = 1742.0 @@ -117,7 +121,7 @@ texture = ExtResource("plant_06") expand_mode = 1 stretch_mode = 5 -[node name="Plant7" type="TextureRect" parent="Plants" unique_id=1690129702] +[node name="Plant7" type="TextureRect" parent="Plants" unique_id=445560075] modulate = Color(0.0392157, 0.333333, 0.356863, 1) layout_mode = 0 offset_left = 880.0 @@ -129,7 +133,7 @@ texture = ExtResource("plant_07") expand_mode = 1 stretch_mode = 5 -[node name="Plant8" type="TextureRect" parent="Plants" unique_id=237080615] +[node name="Plant8" type="TextureRect" parent="Plants" unique_id=1417791778] modulate = Color(0.0392157, 0.333333, 0.356863, 1) layout_mode = 0 offset_left = 1122.0 @@ -141,7 +145,7 @@ texture = ExtResource("plant_08") expand_mode = 1 stretch_mode = 5 -[node name="Buttons" type="Control" parent="." unique_id=1790824507] +[node name="Buttons" type="Control" parent="." unique_id=1964597] layout_mode = 1 anchors_preset = 15 anchor_right = 1.0 @@ -150,7 +154,7 @@ grow_horizontal = 2 grow_vertical = 2 mouse_filter = 2 -[node name="Slot1" parent="Buttons" unique_id=1645508767 instance=ExtResource("4_epm30")] +[node name="Slot1" parent="Buttons" unique_id=1361620593 instance=ExtResource("4_epm30")] layout_mode = 0 offset_left = 584.0 offset_top = 1066.0 @@ -158,7 +162,7 @@ offset_right = 824.0 offset_bottom = 1306.0 pivot_offset = Vector2(120, 120) -[node name="Slot2" parent="Buttons" unique_id=325907674 instance=ExtResource("4_epm30")] +[node name="Slot2" parent="Buttons" unique_id=1025579258 instance=ExtResource("4_epm30")] layout_mode = 0 offset_left = 867.0 offset_top = 880.0 @@ -166,7 +170,7 @@ offset_right = 1107.0 offset_bottom = 1120.0 pivot_offset = Vector2(120, 120) -[node name="Slot3" parent="Buttons" unique_id=1387716236 instance=ExtResource("4_epm30")] +[node name="Slot3" parent="Buttons" unique_id=353688519 instance=ExtResource("4_epm30")] layout_mode = 0 offset_left = 1170.0 offset_top = 800.0 @@ -174,7 +178,7 @@ offset_right = 1410.0 offset_bottom = 1040.0 pivot_offset = Vector2(120, 120) -[node name="Slot4" parent="Buttons" unique_id=981344232 instance=ExtResource("4_epm30")] +[node name="Slot4" parent="Buttons" unique_id=1536126098 instance=ExtResource("4_epm30")] layout_mode = 0 offset_left = 1445.0 offset_top = 628.0 @@ -182,7 +186,7 @@ offset_right = 1685.0 offset_bottom = 868.0 pivot_offset = Vector2(120, 120) -[node name="Slot5" parent="Buttons" unique_id=1687113148 instance=ExtResource("4_epm30")] +[node name="Slot5" parent="Buttons" unique_id=960033946 instance=ExtResource("4_epm30")] layout_mode = 0 offset_left = 1744.0 offset_top = 478.0 @@ -190,7 +194,7 @@ offset_right = 1984.0 offset_bottom = 718.0 pivot_offset = Vector2(120, 120) -[node name="Jellyfish" type="TextureRect" parent="." unique_id=1838244431] +[node name="Jellyfish" type="TextureRect" parent="." unique_id=518902024] layout_mode = 0 offset_left = 1511.0 offset_top = 32.0 diff --git a/resources/gardens/garden_03.tscn b/resources/gardens/garden_03.tscn new file mode 100644 index 00000000..2339bc2d --- /dev/null +++ b/resources/gardens/garden_03.tscn @@ -0,0 +1,206 @@ +[gd_scene format=3] + +[ext_resource type="Script" uid="uid://ch5h4p1o54whq" path="res://resources/gardens/garden.gd" id="1_5owem"] +[ext_resource type="Texture2D" uid="uid://d26hapg1hf8a6" path="res://assets/gardens/gardens/Garden_01.png" id="3_p7iv3"] +[ext_resource type="PackedScene" uid="uid://delcgui3v0eek" path="res://sources/lesson_screen/lesson_button.tscn" id="4_epm30"] +[ext_resource type="Texture2D" uid="uid://bfqwlmmliem8f" path="res://assets/gardens/jellyfish.png" id="jellyfish_tex"] +[ext_resource type="Texture2D" uid="uid://dcekseb1b3ruw" path="res://assets/gardens/plants/garden_plant_01.png" id="plant_01"] +[ext_resource type="Texture2D" uid="uid://clkr31osbqs7u" path="res://assets/gardens/plants/garden_plant_02.png" id="plant_02"] +[ext_resource type="Texture2D" uid="uid://dgssb0oonuqku" path="res://assets/gardens/plants/garden_plant_03.png" id="plant_03"] +[ext_resource type="Texture2D" uid="uid://bqp1nkk53y1is" path="res://assets/gardens/plants/garden_plant_04.png" id="plant_04"] +[ext_resource type="Texture2D" uid="uid://dvxnktx1wiyxp" path="res://assets/gardens/plants/garden_plant_05.png" id="plant_05"] +[ext_resource type="Texture2D" uid="uid://f2arml2f4b8p" path="res://assets/gardens/plants/garden_plant_06.png" id="plant_06"] +[ext_resource type="Texture2D" uid="uid://dufnm3bkfe5yv" path="res://assets/gardens/plants/garden_plant_07.png" id="plant_07"] +[ext_resource type="Texture2D" uid="uid://dt2a0dea0hv0c" path="res://assets/gardens/plants/garden_plant_08.png" id="plant_08"] + +[node name="Garden" type="Control"] +custom_minimum_size = Vector2(2400, 2.08165e-12) +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 +script = ExtResource("1_5owem") +title = "Garden 03" +unlocked_lesson = Color(0.176, 0.431, 0.247, 1) +unlocked_lesson_text = Color(0.659, 0.902, 0.722, 1) +completed_lesson = Color(0.659, 0.902, 0.722, 1) +completed_lesson_text = Color(0.102, 0.29, 0.157, 1) + +[node name="Background" type="TextureRect" parent="."] +unique_name_in_owner = true +layout_mode = 0 +offset_left = 350.0 +offset_top = 50.0 +offset_right = 2050.0 +offset_bottom = 1750.0 +mouse_filter = 2 +texture = ExtResource("3_p7iv3") +expand_mode = 1 + +[node name="Plants" type="Control" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 + +[node name="Plant1" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 395.0 +offset_top = 475.0 +offset_right = 515.0 +offset_bottom = 1425.0 +mouse_filter = 2 +texture = ExtResource("plant_01") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant2" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 574.0 +offset_top = 1322.0 +offset_right = 744.0 +offset_bottom = 1592.0 +mouse_filter = 2 +texture = ExtResource("plant_02") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant3" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 1178.0 +offset_top = 1058.0 +offset_right = 1618.0 +offset_bottom = 1388.0 +mouse_filter = 2 +texture = ExtResource("plant_03") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant4" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 864.0 +offset_top = 308.0 +offset_right = 1084.0 +offset_bottom = 628.0 +mouse_filter = 2 +texture = ExtResource("plant_04") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant5" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 744.0 +offset_top = 688.0 +offset_right = 889.0 +offset_bottom = 998.0 +mouse_filter = 2 +texture = ExtResource("plant_05") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant6" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 1742.0 +offset_top = 762.0 +offset_right = 1927.0 +offset_bottom = 1077.0 +mouse_filter = 2 +texture = ExtResource("plant_06") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant7" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 880.0 +offset_top = 1172.0 +offset_right = 1010.0 +offset_bottom = 1592.0 +mouse_filter = 2 +texture = ExtResource("plant_07") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant8" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 1122.0 +offset_top = 288.0 +offset_right = 1472.0 +offset_bottom = 638.0 +mouse_filter = 2 +texture = ExtResource("plant_08") +expand_mode = 1 +stretch_mode = 5 + +[node name="Buttons" type="Control" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 + +[node name="Slot1" parent="Buttons" instance=ExtResource("4_epm30")] +layout_mode = 0 +offset_left = 584.0 +offset_top = 1066.0 +offset_right = 824.0 +offset_bottom = 1306.0 +pivot_offset = Vector2(120, 120) + +[node name="Slot2" parent="Buttons" instance=ExtResource("4_epm30")] +layout_mode = 0 +offset_left = 867.0 +offset_top = 880.0 +offset_right = 1107.0 +offset_bottom = 1120.0 +pivot_offset = Vector2(120, 120) + +[node name="Slot3" parent="Buttons" instance=ExtResource("4_epm30")] +layout_mode = 0 +offset_left = 1170.0 +offset_top = 800.0 +offset_right = 1410.0 +offset_bottom = 1040.0 +pivot_offset = Vector2(120, 120) + +[node name="Slot4" parent="Buttons" instance=ExtResource("4_epm30")] +layout_mode = 0 +offset_left = 1445.0 +offset_top = 628.0 +offset_right = 1685.0 +offset_bottom = 868.0 +pivot_offset = Vector2(120, 120) + +[node name="Slot5" parent="Buttons" instance=ExtResource("4_epm30")] +layout_mode = 0 +offset_left = 1744.0 +offset_top = 478.0 +offset_right = 1984.0 +offset_bottom = 718.0 +pivot_offset = Vector2(120, 120) + +[node name="Jellyfish" type="TextureRect" parent="."] +layout_mode = 0 +offset_left = 1511.0 +offset_top = 32.0 +offset_right = 1791.0 +offset_bottom = 512.0 +mouse_filter = 2 +texture = ExtResource("jellyfish_tex") +expand_mode = 1 +stretch_mode = 5 diff --git a/resources/gardens/garden_04.tscn b/resources/gardens/garden_04.tscn new file mode 100644 index 00000000..9b75de24 --- /dev/null +++ b/resources/gardens/garden_04.tscn @@ -0,0 +1,206 @@ +[gd_scene format=3] + +[ext_resource type="Script" uid="uid://ch5h4p1o54whq" path="res://resources/gardens/garden.gd" id="1_5owem"] +[ext_resource type="Texture2D" uid="uid://d26hapg1hf8a6" path="res://assets/gardens/gardens/Garden_01.png" id="3_p7iv3"] +[ext_resource type="PackedScene" uid="uid://delcgui3v0eek" path="res://sources/lesson_screen/lesson_button.tscn" id="4_epm30"] +[ext_resource type="Texture2D" uid="uid://bfqwlmmliem8f" path="res://assets/gardens/jellyfish.png" id="jellyfish_tex"] +[ext_resource type="Texture2D" uid="uid://dcekseb1b3ruw" path="res://assets/gardens/plants/garden_plant_01.png" id="plant_01"] +[ext_resource type="Texture2D" uid="uid://clkr31osbqs7u" path="res://assets/gardens/plants/garden_plant_02.png" id="plant_02"] +[ext_resource type="Texture2D" uid="uid://dgssb0oonuqku" path="res://assets/gardens/plants/garden_plant_03.png" id="plant_03"] +[ext_resource type="Texture2D" uid="uid://bqp1nkk53y1is" path="res://assets/gardens/plants/garden_plant_04.png" id="plant_04"] +[ext_resource type="Texture2D" uid="uid://dvxnktx1wiyxp" path="res://assets/gardens/plants/garden_plant_05.png" id="plant_05"] +[ext_resource type="Texture2D" uid="uid://f2arml2f4b8p" path="res://assets/gardens/plants/garden_plant_06.png" id="plant_06"] +[ext_resource type="Texture2D" uid="uid://dufnm3bkfe5yv" path="res://assets/gardens/plants/garden_plant_07.png" id="plant_07"] +[ext_resource type="Texture2D" uid="uid://dt2a0dea0hv0c" path="res://assets/gardens/plants/garden_plant_08.png" id="plant_08"] + +[node name="Garden" type="Control"] +custom_minimum_size = Vector2(2400, 2.08165e-12) +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 +script = ExtResource("1_5owem") +title = "Garden 04" +unlocked_lesson = Color(0.769, 0.353, 0.173, 1) +unlocked_lesson_text = Color(1, 0.788, 0.659, 1) +completed_lesson = Color(1, 0.788, 0.659, 1) +completed_lesson_text = Color(0.541, 0.208, 0.063, 1) + +[node name="Background" type="TextureRect" parent="."] +unique_name_in_owner = true +layout_mode = 0 +offset_left = 350.0 +offset_top = 50.0 +offset_right = 2050.0 +offset_bottom = 1750.0 +mouse_filter = 2 +texture = ExtResource("3_p7iv3") +expand_mode = 1 + +[node name="Plants" type="Control" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 + +[node name="Plant1" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 395.0 +offset_top = 475.0 +offset_right = 515.0 +offset_bottom = 1425.0 +mouse_filter = 2 +texture = ExtResource("plant_01") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant2" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 574.0 +offset_top = 1322.0 +offset_right = 744.0 +offset_bottom = 1592.0 +mouse_filter = 2 +texture = ExtResource("plant_02") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant3" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 1178.0 +offset_top = 1058.0 +offset_right = 1618.0 +offset_bottom = 1388.0 +mouse_filter = 2 +texture = ExtResource("plant_03") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant4" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 864.0 +offset_top = 308.0 +offset_right = 1084.0 +offset_bottom = 628.0 +mouse_filter = 2 +texture = ExtResource("plant_04") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant5" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 744.0 +offset_top = 688.0 +offset_right = 889.0 +offset_bottom = 998.0 +mouse_filter = 2 +texture = ExtResource("plant_05") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant6" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 1742.0 +offset_top = 762.0 +offset_right = 1927.0 +offset_bottom = 1077.0 +mouse_filter = 2 +texture = ExtResource("plant_06") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant7" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 880.0 +offset_top = 1172.0 +offset_right = 1010.0 +offset_bottom = 1592.0 +mouse_filter = 2 +texture = ExtResource("plant_07") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant8" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 1122.0 +offset_top = 288.0 +offset_right = 1472.0 +offset_bottom = 638.0 +mouse_filter = 2 +texture = ExtResource("plant_08") +expand_mode = 1 +stretch_mode = 5 + +[node name="Buttons" type="Control" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 + +[node name="Slot1" parent="Buttons" instance=ExtResource("4_epm30")] +layout_mode = 0 +offset_left = 584.0 +offset_top = 1066.0 +offset_right = 824.0 +offset_bottom = 1306.0 +pivot_offset = Vector2(120, 120) + +[node name="Slot2" parent="Buttons" instance=ExtResource("4_epm30")] +layout_mode = 0 +offset_left = 867.0 +offset_top = 880.0 +offset_right = 1107.0 +offset_bottom = 1120.0 +pivot_offset = Vector2(120, 120) + +[node name="Slot3" parent="Buttons" instance=ExtResource("4_epm30")] +layout_mode = 0 +offset_left = 1170.0 +offset_top = 800.0 +offset_right = 1410.0 +offset_bottom = 1040.0 +pivot_offset = Vector2(120, 120) + +[node name="Slot4" parent="Buttons" instance=ExtResource("4_epm30")] +layout_mode = 0 +offset_left = 1445.0 +offset_top = 628.0 +offset_right = 1685.0 +offset_bottom = 868.0 +pivot_offset = Vector2(120, 120) + +[node name="Slot5" parent="Buttons" instance=ExtResource("4_epm30")] +layout_mode = 0 +offset_left = 1744.0 +offset_top = 478.0 +offset_right = 1984.0 +offset_bottom = 718.0 +pivot_offset = Vector2(120, 120) + +[node name="Jellyfish" type="TextureRect" parent="."] +layout_mode = 0 +offset_left = 1511.0 +offset_top = 32.0 +offset_right = 1791.0 +offset_bottom = 512.0 +mouse_filter = 2 +texture = ExtResource("jellyfish_tex") +expand_mode = 1 +stretch_mode = 5 diff --git a/resources/gardens/garden_05.tscn b/resources/gardens/garden_05.tscn new file mode 100644 index 00000000..8a7122c7 --- /dev/null +++ b/resources/gardens/garden_05.tscn @@ -0,0 +1,206 @@ +[gd_scene format=3] + +[ext_resource type="Script" uid="uid://ch5h4p1o54whq" path="res://resources/gardens/garden.gd" id="1_5owem"] +[ext_resource type="Texture2D" uid="uid://d26hapg1hf8a6" path="res://assets/gardens/gardens/Garden_01.png" id="3_p7iv3"] +[ext_resource type="PackedScene" uid="uid://delcgui3v0eek" path="res://sources/lesson_screen/lesson_button.tscn" id="4_epm30"] +[ext_resource type="Texture2D" uid="uid://bfqwlmmliem8f" path="res://assets/gardens/jellyfish.png" id="jellyfish_tex"] +[ext_resource type="Texture2D" uid="uid://dcekseb1b3ruw" path="res://assets/gardens/plants/garden_plant_01.png" id="plant_01"] +[ext_resource type="Texture2D" uid="uid://clkr31osbqs7u" path="res://assets/gardens/plants/garden_plant_02.png" id="plant_02"] +[ext_resource type="Texture2D" uid="uid://dgssb0oonuqku" path="res://assets/gardens/plants/garden_plant_03.png" id="plant_03"] +[ext_resource type="Texture2D" uid="uid://bqp1nkk53y1is" path="res://assets/gardens/plants/garden_plant_04.png" id="plant_04"] +[ext_resource type="Texture2D" uid="uid://dvxnktx1wiyxp" path="res://assets/gardens/plants/garden_plant_05.png" id="plant_05"] +[ext_resource type="Texture2D" uid="uid://f2arml2f4b8p" path="res://assets/gardens/plants/garden_plant_06.png" id="plant_06"] +[ext_resource type="Texture2D" uid="uid://dufnm3bkfe5yv" path="res://assets/gardens/plants/garden_plant_07.png" id="plant_07"] +[ext_resource type="Texture2D" uid="uid://dt2a0dea0hv0c" path="res://assets/gardens/plants/garden_plant_08.png" id="plant_08"] + +[node name="Garden" type="Control"] +custom_minimum_size = Vector2(2400, 2.08165e-12) +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 +script = ExtResource("1_5owem") +title = "Garden 05" +unlocked_lesson = Color(0.545, 0.133, 0.322, 1) +unlocked_lesson_text = Color(0.941, 0.659, 0.769, 1) +completed_lesson = Color(0.941, 0.659, 0.769, 1) +completed_lesson_text = Color(0.361, 0.063, 0.212, 1) + +[node name="Background" type="TextureRect" parent="."] +unique_name_in_owner = true +layout_mode = 0 +offset_left = 350.0 +offset_top = 50.0 +offset_right = 2050.0 +offset_bottom = 1750.0 +mouse_filter = 2 +texture = ExtResource("3_p7iv3") +expand_mode = 1 + +[node name="Plants" type="Control" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 + +[node name="Plant1" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 395.0 +offset_top = 475.0 +offset_right = 515.0 +offset_bottom = 1425.0 +mouse_filter = 2 +texture = ExtResource("plant_01") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant2" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 574.0 +offset_top = 1322.0 +offset_right = 744.0 +offset_bottom = 1592.0 +mouse_filter = 2 +texture = ExtResource("plant_02") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant3" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 1178.0 +offset_top = 1058.0 +offset_right = 1618.0 +offset_bottom = 1388.0 +mouse_filter = 2 +texture = ExtResource("plant_03") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant4" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 864.0 +offset_top = 308.0 +offset_right = 1084.0 +offset_bottom = 628.0 +mouse_filter = 2 +texture = ExtResource("plant_04") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant5" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 744.0 +offset_top = 688.0 +offset_right = 889.0 +offset_bottom = 998.0 +mouse_filter = 2 +texture = ExtResource("plant_05") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant6" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 1742.0 +offset_top = 762.0 +offset_right = 1927.0 +offset_bottom = 1077.0 +mouse_filter = 2 +texture = ExtResource("plant_06") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant7" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 880.0 +offset_top = 1172.0 +offset_right = 1010.0 +offset_bottom = 1592.0 +mouse_filter = 2 +texture = ExtResource("plant_07") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant8" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 1122.0 +offset_top = 288.0 +offset_right = 1472.0 +offset_bottom = 638.0 +mouse_filter = 2 +texture = ExtResource("plant_08") +expand_mode = 1 +stretch_mode = 5 + +[node name="Buttons" type="Control" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 + +[node name="Slot1" parent="Buttons" instance=ExtResource("4_epm30")] +layout_mode = 0 +offset_left = 584.0 +offset_top = 1066.0 +offset_right = 824.0 +offset_bottom = 1306.0 +pivot_offset = Vector2(120, 120) + +[node name="Slot2" parent="Buttons" instance=ExtResource("4_epm30")] +layout_mode = 0 +offset_left = 867.0 +offset_top = 880.0 +offset_right = 1107.0 +offset_bottom = 1120.0 +pivot_offset = Vector2(120, 120) + +[node name="Slot3" parent="Buttons" instance=ExtResource("4_epm30")] +layout_mode = 0 +offset_left = 1170.0 +offset_top = 800.0 +offset_right = 1410.0 +offset_bottom = 1040.0 +pivot_offset = Vector2(120, 120) + +[node name="Slot4" parent="Buttons" instance=ExtResource("4_epm30")] +layout_mode = 0 +offset_left = 1445.0 +offset_top = 628.0 +offset_right = 1685.0 +offset_bottom = 868.0 +pivot_offset = Vector2(120, 120) + +[node name="Slot5" parent="Buttons" instance=ExtResource("4_epm30")] +layout_mode = 0 +offset_left = 1744.0 +offset_top = 478.0 +offset_right = 1984.0 +offset_bottom = 718.0 +pivot_offset = Vector2(120, 120) + +[node name="Jellyfish" type="TextureRect" parent="."] +layout_mode = 0 +offset_left = 1511.0 +offset_top = 32.0 +offset_right = 1791.0 +offset_bottom = 512.0 +mouse_filter = 2 +texture = ExtResource("jellyfish_tex") +expand_mode = 1 +stretch_mode = 5 diff --git a/resources/gardens/garden_06.tscn b/resources/gardens/garden_06.tscn new file mode 100644 index 00000000..d015cd6c --- /dev/null +++ b/resources/gardens/garden_06.tscn @@ -0,0 +1,206 @@ +[gd_scene format=3] + +[ext_resource type="Script" uid="uid://ch5h4p1o54whq" path="res://resources/gardens/garden.gd" id="1_5owem"] +[ext_resource type="Texture2D" uid="uid://d26hapg1hf8a6" path="res://assets/gardens/gardens/Garden_01.png" id="3_p7iv3"] +[ext_resource type="PackedScene" uid="uid://delcgui3v0eek" path="res://sources/lesson_screen/lesson_button.tscn" id="4_epm30"] +[ext_resource type="Texture2D" uid="uid://bfqwlmmliem8f" path="res://assets/gardens/jellyfish.png" id="jellyfish_tex"] +[ext_resource type="Texture2D" uid="uid://dcekseb1b3ruw" path="res://assets/gardens/plants/garden_plant_01.png" id="plant_01"] +[ext_resource type="Texture2D" uid="uid://clkr31osbqs7u" path="res://assets/gardens/plants/garden_plant_02.png" id="plant_02"] +[ext_resource type="Texture2D" uid="uid://dgssb0oonuqku" path="res://assets/gardens/plants/garden_plant_03.png" id="plant_03"] +[ext_resource type="Texture2D" uid="uid://bqp1nkk53y1is" path="res://assets/gardens/plants/garden_plant_04.png" id="plant_04"] +[ext_resource type="Texture2D" uid="uid://dvxnktx1wiyxp" path="res://assets/gardens/plants/garden_plant_05.png" id="plant_05"] +[ext_resource type="Texture2D" uid="uid://f2arml2f4b8p" path="res://assets/gardens/plants/garden_plant_06.png" id="plant_06"] +[ext_resource type="Texture2D" uid="uid://dufnm3bkfe5yv" path="res://assets/gardens/plants/garden_plant_07.png" id="plant_07"] +[ext_resource type="Texture2D" uid="uid://dt2a0dea0hv0c" path="res://assets/gardens/plants/garden_plant_08.png" id="plant_08"] + +[node name="Garden" type="Control"] +custom_minimum_size = Vector2(2400, 2.08165e-12) +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 +script = ExtResource("1_5owem") +title = "Garden 06" +unlocked_lesson = Color(0.541, 0.478, 0.102, 1) +unlocked_lesson_text = Color(0.941, 0.902, 0.549, 1) +completed_lesson = Color(0.941, 0.902, 0.549, 1) +completed_lesson_text = Color(0.353, 0.314, 0.063, 1) + +[node name="Background" type="TextureRect" parent="."] +unique_name_in_owner = true +layout_mode = 0 +offset_left = 350.0 +offset_top = 50.0 +offset_right = 2050.0 +offset_bottom = 1750.0 +mouse_filter = 2 +texture = ExtResource("3_p7iv3") +expand_mode = 1 + +[node name="Plants" type="Control" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 + +[node name="Plant1" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 395.0 +offset_top = 475.0 +offset_right = 515.0 +offset_bottom = 1425.0 +mouse_filter = 2 +texture = ExtResource("plant_01") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant2" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 574.0 +offset_top = 1322.0 +offset_right = 744.0 +offset_bottom = 1592.0 +mouse_filter = 2 +texture = ExtResource("plant_02") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant3" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 1178.0 +offset_top = 1058.0 +offset_right = 1618.0 +offset_bottom = 1388.0 +mouse_filter = 2 +texture = ExtResource("plant_03") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant4" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 864.0 +offset_top = 308.0 +offset_right = 1084.0 +offset_bottom = 628.0 +mouse_filter = 2 +texture = ExtResource("plant_04") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant5" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 744.0 +offset_top = 688.0 +offset_right = 889.0 +offset_bottom = 998.0 +mouse_filter = 2 +texture = ExtResource("plant_05") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant6" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 1742.0 +offset_top = 762.0 +offset_right = 1927.0 +offset_bottom = 1077.0 +mouse_filter = 2 +texture = ExtResource("plant_06") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant7" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 880.0 +offset_top = 1172.0 +offset_right = 1010.0 +offset_bottom = 1592.0 +mouse_filter = 2 +texture = ExtResource("plant_07") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant8" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 1122.0 +offset_top = 288.0 +offset_right = 1472.0 +offset_bottom = 638.0 +mouse_filter = 2 +texture = ExtResource("plant_08") +expand_mode = 1 +stretch_mode = 5 + +[node name="Buttons" type="Control" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 + +[node name="Slot1" parent="Buttons" instance=ExtResource("4_epm30")] +layout_mode = 0 +offset_left = 584.0 +offset_top = 1066.0 +offset_right = 824.0 +offset_bottom = 1306.0 +pivot_offset = Vector2(120, 120) + +[node name="Slot2" parent="Buttons" instance=ExtResource("4_epm30")] +layout_mode = 0 +offset_left = 867.0 +offset_top = 880.0 +offset_right = 1107.0 +offset_bottom = 1120.0 +pivot_offset = Vector2(120, 120) + +[node name="Slot3" parent="Buttons" instance=ExtResource("4_epm30")] +layout_mode = 0 +offset_left = 1170.0 +offset_top = 800.0 +offset_right = 1410.0 +offset_bottom = 1040.0 +pivot_offset = Vector2(120, 120) + +[node name="Slot4" parent="Buttons" instance=ExtResource("4_epm30")] +layout_mode = 0 +offset_left = 1445.0 +offset_top = 628.0 +offset_right = 1685.0 +offset_bottom = 868.0 +pivot_offset = Vector2(120, 120) + +[node name="Slot5" parent="Buttons" instance=ExtResource("4_epm30")] +layout_mode = 0 +offset_left = 1744.0 +offset_top = 478.0 +offset_right = 1984.0 +offset_bottom = 718.0 +pivot_offset = Vector2(120, 120) + +[node name="Jellyfish" type="TextureRect" parent="."] +layout_mode = 0 +offset_left = 1511.0 +offset_top = 32.0 +offset_right = 1791.0 +offset_bottom = 512.0 +mouse_filter = 2 +texture = ExtResource("jellyfish_tex") +expand_mode = 1 +stretch_mode = 5 diff --git a/resources/gardens/garden_07.tscn b/resources/gardens/garden_07.tscn new file mode 100644 index 00000000..37c511e6 --- /dev/null +++ b/resources/gardens/garden_07.tscn @@ -0,0 +1,206 @@ +[gd_scene format=3] + +[ext_resource type="Script" uid="uid://ch5h4p1o54whq" path="res://resources/gardens/garden.gd" id="1_5owem"] +[ext_resource type="Texture2D" uid="uid://d26hapg1hf8a6" path="res://assets/gardens/gardens/Garden_01.png" id="3_p7iv3"] +[ext_resource type="PackedScene" uid="uid://delcgui3v0eek" path="res://sources/lesson_screen/lesson_button.tscn" id="4_epm30"] +[ext_resource type="Texture2D" uid="uid://bfqwlmmliem8f" path="res://assets/gardens/jellyfish.png" id="jellyfish_tex"] +[ext_resource type="Texture2D" uid="uid://dcekseb1b3ruw" path="res://assets/gardens/plants/garden_plant_01.png" id="plant_01"] +[ext_resource type="Texture2D" uid="uid://clkr31osbqs7u" path="res://assets/gardens/plants/garden_plant_02.png" id="plant_02"] +[ext_resource type="Texture2D" uid="uid://dgssb0oonuqku" path="res://assets/gardens/plants/garden_plant_03.png" id="plant_03"] +[ext_resource type="Texture2D" uid="uid://bqp1nkk53y1is" path="res://assets/gardens/plants/garden_plant_04.png" id="plant_04"] +[ext_resource type="Texture2D" uid="uid://dvxnktx1wiyxp" path="res://assets/gardens/plants/garden_plant_05.png" id="plant_05"] +[ext_resource type="Texture2D" uid="uid://f2arml2f4b8p" path="res://assets/gardens/plants/garden_plant_06.png" id="plant_06"] +[ext_resource type="Texture2D" uid="uid://dufnm3bkfe5yv" path="res://assets/gardens/plants/garden_plant_07.png" id="plant_07"] +[ext_resource type="Texture2D" uid="uid://dt2a0dea0hv0c" path="res://assets/gardens/plants/garden_plant_08.png" id="plant_08"] + +[node name="Garden" type="Control"] +custom_minimum_size = Vector2(2400, 2.08165e-12) +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 +script = ExtResource("1_5owem") +title = "Garden 07" +unlocked_lesson = Color(0.102, 0.353, 0.541, 1) +unlocked_lesson_text = Color(0.659, 0.847, 0.941, 1) +completed_lesson = Color(0.659, 0.847, 0.941, 1) +completed_lesson_text = Color(0.055, 0.227, 0.361, 1) + +[node name="Background" type="TextureRect" parent="."] +unique_name_in_owner = true +layout_mode = 0 +offset_left = 350.0 +offset_top = 50.0 +offset_right = 2050.0 +offset_bottom = 1750.0 +mouse_filter = 2 +texture = ExtResource("3_p7iv3") +expand_mode = 1 + +[node name="Plants" type="Control" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 + +[node name="Plant1" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 395.0 +offset_top = 475.0 +offset_right = 515.0 +offset_bottom = 1425.0 +mouse_filter = 2 +texture = ExtResource("plant_01") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant2" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 574.0 +offset_top = 1322.0 +offset_right = 744.0 +offset_bottom = 1592.0 +mouse_filter = 2 +texture = ExtResource("plant_02") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant3" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 1178.0 +offset_top = 1058.0 +offset_right = 1618.0 +offset_bottom = 1388.0 +mouse_filter = 2 +texture = ExtResource("plant_03") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant4" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 864.0 +offset_top = 308.0 +offset_right = 1084.0 +offset_bottom = 628.0 +mouse_filter = 2 +texture = ExtResource("plant_04") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant5" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 744.0 +offset_top = 688.0 +offset_right = 889.0 +offset_bottom = 998.0 +mouse_filter = 2 +texture = ExtResource("plant_05") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant6" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 1742.0 +offset_top = 762.0 +offset_right = 1927.0 +offset_bottom = 1077.0 +mouse_filter = 2 +texture = ExtResource("plant_06") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant7" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 880.0 +offset_top = 1172.0 +offset_right = 1010.0 +offset_bottom = 1592.0 +mouse_filter = 2 +texture = ExtResource("plant_07") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant8" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 1122.0 +offset_top = 288.0 +offset_right = 1472.0 +offset_bottom = 638.0 +mouse_filter = 2 +texture = ExtResource("plant_08") +expand_mode = 1 +stretch_mode = 5 + +[node name="Buttons" type="Control" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 + +[node name="Slot1" parent="Buttons" instance=ExtResource("4_epm30")] +layout_mode = 0 +offset_left = 584.0 +offset_top = 1066.0 +offset_right = 824.0 +offset_bottom = 1306.0 +pivot_offset = Vector2(120, 120) + +[node name="Slot2" parent="Buttons" instance=ExtResource("4_epm30")] +layout_mode = 0 +offset_left = 867.0 +offset_top = 880.0 +offset_right = 1107.0 +offset_bottom = 1120.0 +pivot_offset = Vector2(120, 120) + +[node name="Slot3" parent="Buttons" instance=ExtResource("4_epm30")] +layout_mode = 0 +offset_left = 1170.0 +offset_top = 800.0 +offset_right = 1410.0 +offset_bottom = 1040.0 +pivot_offset = Vector2(120, 120) + +[node name="Slot4" parent="Buttons" instance=ExtResource("4_epm30")] +layout_mode = 0 +offset_left = 1445.0 +offset_top = 628.0 +offset_right = 1685.0 +offset_bottom = 868.0 +pivot_offset = Vector2(120, 120) + +[node name="Slot5" parent="Buttons" instance=ExtResource("4_epm30")] +layout_mode = 0 +offset_left = 1744.0 +offset_top = 478.0 +offset_right = 1984.0 +offset_bottom = 718.0 +pivot_offset = Vector2(120, 120) + +[node name="Jellyfish" type="TextureRect" parent="."] +layout_mode = 0 +offset_left = 1511.0 +offset_top = 32.0 +offset_right = 1791.0 +offset_bottom = 512.0 +mouse_filter = 2 +texture = ExtResource("jellyfish_tex") +expand_mode = 1 +stretch_mode = 5 diff --git a/resources/gardens/garden_08.tscn b/resources/gardens/garden_08.tscn new file mode 100644 index 00000000..a0b791f3 --- /dev/null +++ b/resources/gardens/garden_08.tscn @@ -0,0 +1,206 @@ +[gd_scene format=3] + +[ext_resource type="Script" uid="uid://ch5h4p1o54whq" path="res://resources/gardens/garden.gd" id="1_5owem"] +[ext_resource type="Texture2D" uid="uid://d26hapg1hf8a6" path="res://assets/gardens/gardens/Garden_01.png" id="3_p7iv3"] +[ext_resource type="PackedScene" uid="uid://delcgui3v0eek" path="res://sources/lesson_screen/lesson_button.tscn" id="4_epm30"] +[ext_resource type="Texture2D" uid="uid://bfqwlmmliem8f" path="res://assets/gardens/jellyfish.png" id="jellyfish_tex"] +[ext_resource type="Texture2D" uid="uid://dcekseb1b3ruw" path="res://assets/gardens/plants/garden_plant_01.png" id="plant_01"] +[ext_resource type="Texture2D" uid="uid://clkr31osbqs7u" path="res://assets/gardens/plants/garden_plant_02.png" id="plant_02"] +[ext_resource type="Texture2D" uid="uid://dgssb0oonuqku" path="res://assets/gardens/plants/garden_plant_03.png" id="plant_03"] +[ext_resource type="Texture2D" uid="uid://bqp1nkk53y1is" path="res://assets/gardens/plants/garden_plant_04.png" id="plant_04"] +[ext_resource type="Texture2D" uid="uid://dvxnktx1wiyxp" path="res://assets/gardens/plants/garden_plant_05.png" id="plant_05"] +[ext_resource type="Texture2D" uid="uid://f2arml2f4b8p" path="res://assets/gardens/plants/garden_plant_06.png" id="plant_06"] +[ext_resource type="Texture2D" uid="uid://dufnm3bkfe5yv" path="res://assets/gardens/plants/garden_plant_07.png" id="plant_07"] +[ext_resource type="Texture2D" uid="uid://dt2a0dea0hv0c" path="res://assets/gardens/plants/garden_plant_08.png" id="plant_08"] + +[node name="Garden" type="Control"] +custom_minimum_size = Vector2(2400, 2.08165e-12) +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 +script = ExtResource("1_5owem") +title = "Garden 08" +unlocked_lesson = Color(0.769, 0.322, 0.416, 1) +unlocked_lesson_text = Color(1, 0.753, 0.796, 1) +completed_lesson = Color(1, 0.753, 0.796, 1) +completed_lesson_text = Color(0.541, 0.165, 0.259, 1) + +[node name="Background" type="TextureRect" parent="."] +unique_name_in_owner = true +layout_mode = 0 +offset_left = 350.0 +offset_top = 50.0 +offset_right = 2050.0 +offset_bottom = 1750.0 +mouse_filter = 2 +texture = ExtResource("3_p7iv3") +expand_mode = 1 + +[node name="Plants" type="Control" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 + +[node name="Plant1" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 395.0 +offset_top = 475.0 +offset_right = 515.0 +offset_bottom = 1425.0 +mouse_filter = 2 +texture = ExtResource("plant_01") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant2" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 574.0 +offset_top = 1322.0 +offset_right = 744.0 +offset_bottom = 1592.0 +mouse_filter = 2 +texture = ExtResource("plant_02") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant3" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 1178.0 +offset_top = 1058.0 +offset_right = 1618.0 +offset_bottom = 1388.0 +mouse_filter = 2 +texture = ExtResource("plant_03") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant4" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 864.0 +offset_top = 308.0 +offset_right = 1084.0 +offset_bottom = 628.0 +mouse_filter = 2 +texture = ExtResource("plant_04") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant5" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 744.0 +offset_top = 688.0 +offset_right = 889.0 +offset_bottom = 998.0 +mouse_filter = 2 +texture = ExtResource("plant_05") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant6" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 1742.0 +offset_top = 762.0 +offset_right = 1927.0 +offset_bottom = 1077.0 +mouse_filter = 2 +texture = ExtResource("plant_06") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant7" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 880.0 +offset_top = 1172.0 +offset_right = 1010.0 +offset_bottom = 1592.0 +mouse_filter = 2 +texture = ExtResource("plant_07") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant8" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 1122.0 +offset_top = 288.0 +offset_right = 1472.0 +offset_bottom = 638.0 +mouse_filter = 2 +texture = ExtResource("plant_08") +expand_mode = 1 +stretch_mode = 5 + +[node name="Buttons" type="Control" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 + +[node name="Slot1" parent="Buttons" instance=ExtResource("4_epm30")] +layout_mode = 0 +offset_left = 584.0 +offset_top = 1066.0 +offset_right = 824.0 +offset_bottom = 1306.0 +pivot_offset = Vector2(120, 120) + +[node name="Slot2" parent="Buttons" instance=ExtResource("4_epm30")] +layout_mode = 0 +offset_left = 867.0 +offset_top = 880.0 +offset_right = 1107.0 +offset_bottom = 1120.0 +pivot_offset = Vector2(120, 120) + +[node name="Slot3" parent="Buttons" instance=ExtResource("4_epm30")] +layout_mode = 0 +offset_left = 1170.0 +offset_top = 800.0 +offset_right = 1410.0 +offset_bottom = 1040.0 +pivot_offset = Vector2(120, 120) + +[node name="Slot4" parent="Buttons" instance=ExtResource("4_epm30")] +layout_mode = 0 +offset_left = 1445.0 +offset_top = 628.0 +offset_right = 1685.0 +offset_bottom = 868.0 +pivot_offset = Vector2(120, 120) + +[node name="Slot5" parent="Buttons" instance=ExtResource("4_epm30")] +layout_mode = 0 +offset_left = 1744.0 +offset_top = 478.0 +offset_right = 1984.0 +offset_bottom = 718.0 +pivot_offset = Vector2(120, 120) + +[node name="Jellyfish" type="TextureRect" parent="."] +layout_mode = 0 +offset_left = 1511.0 +offset_top = 32.0 +offset_right = 1791.0 +offset_bottom = 512.0 +mouse_filter = 2 +texture = ExtResource("jellyfish_tex") +expand_mode = 1 +stretch_mode = 5 diff --git a/resources/gardens/garden_09.tscn b/resources/gardens/garden_09.tscn new file mode 100644 index 00000000..59d622b8 --- /dev/null +++ b/resources/gardens/garden_09.tscn @@ -0,0 +1,206 @@ +[gd_scene format=3] + +[ext_resource type="Script" uid="uid://ch5h4p1o54whq" path="res://resources/gardens/garden.gd" id="1_5owem"] +[ext_resource type="Texture2D" uid="uid://d26hapg1hf8a6" path="res://assets/gardens/gardens/Garden_01.png" id="3_p7iv3"] +[ext_resource type="PackedScene" uid="uid://delcgui3v0eek" path="res://sources/lesson_screen/lesson_button.tscn" id="4_epm30"] +[ext_resource type="Texture2D" uid="uid://bfqwlmmliem8f" path="res://assets/gardens/jellyfish.png" id="jellyfish_tex"] +[ext_resource type="Texture2D" uid="uid://dcekseb1b3ruw" path="res://assets/gardens/plants/garden_plant_01.png" id="plant_01"] +[ext_resource type="Texture2D" uid="uid://clkr31osbqs7u" path="res://assets/gardens/plants/garden_plant_02.png" id="plant_02"] +[ext_resource type="Texture2D" uid="uid://dgssb0oonuqku" path="res://assets/gardens/plants/garden_plant_03.png" id="plant_03"] +[ext_resource type="Texture2D" uid="uid://bqp1nkk53y1is" path="res://assets/gardens/plants/garden_plant_04.png" id="plant_04"] +[ext_resource type="Texture2D" uid="uid://dvxnktx1wiyxp" path="res://assets/gardens/plants/garden_plant_05.png" id="plant_05"] +[ext_resource type="Texture2D" uid="uid://f2arml2f4b8p" path="res://assets/gardens/plants/garden_plant_06.png" id="plant_06"] +[ext_resource type="Texture2D" uid="uid://dufnm3bkfe5yv" path="res://assets/gardens/plants/garden_plant_07.png" id="plant_07"] +[ext_resource type="Texture2D" uid="uid://dt2a0dea0hv0c" path="res://assets/gardens/plants/garden_plant_08.png" id="plant_08"] + +[node name="Garden" type="Control"] +custom_minimum_size = Vector2(2400, 2.08165e-12) +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 +script = ExtResource("1_5owem") +title = "Garden 09" +unlocked_lesson = Color(0.42, 0.431, 0.173, 1) +unlocked_lesson_text = Color(0.831, 0.847, 0.659, 1) +completed_lesson = Color(0.831, 0.847, 0.659, 1) +completed_lesson_text = Color(0.271, 0.282, 0.094, 1) + +[node name="Background" type="TextureRect" parent="."] +unique_name_in_owner = true +layout_mode = 0 +offset_left = 350.0 +offset_top = 50.0 +offset_right = 2050.0 +offset_bottom = 1750.0 +mouse_filter = 2 +texture = ExtResource("3_p7iv3") +expand_mode = 1 + +[node name="Plants" type="Control" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 + +[node name="Plant1" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 395.0 +offset_top = 475.0 +offset_right = 515.0 +offset_bottom = 1425.0 +mouse_filter = 2 +texture = ExtResource("plant_01") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant2" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 574.0 +offset_top = 1322.0 +offset_right = 744.0 +offset_bottom = 1592.0 +mouse_filter = 2 +texture = ExtResource("plant_02") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant3" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 1178.0 +offset_top = 1058.0 +offset_right = 1618.0 +offset_bottom = 1388.0 +mouse_filter = 2 +texture = ExtResource("plant_03") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant4" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 864.0 +offset_top = 308.0 +offset_right = 1084.0 +offset_bottom = 628.0 +mouse_filter = 2 +texture = ExtResource("plant_04") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant5" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 744.0 +offset_top = 688.0 +offset_right = 889.0 +offset_bottom = 998.0 +mouse_filter = 2 +texture = ExtResource("plant_05") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant6" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 1742.0 +offset_top = 762.0 +offset_right = 1927.0 +offset_bottom = 1077.0 +mouse_filter = 2 +texture = ExtResource("plant_06") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant7" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 880.0 +offset_top = 1172.0 +offset_right = 1010.0 +offset_bottom = 1592.0 +mouse_filter = 2 +texture = ExtResource("plant_07") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant8" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 1122.0 +offset_top = 288.0 +offset_right = 1472.0 +offset_bottom = 638.0 +mouse_filter = 2 +texture = ExtResource("plant_08") +expand_mode = 1 +stretch_mode = 5 + +[node name="Buttons" type="Control" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 + +[node name="Slot1" parent="Buttons" instance=ExtResource("4_epm30")] +layout_mode = 0 +offset_left = 584.0 +offset_top = 1066.0 +offset_right = 824.0 +offset_bottom = 1306.0 +pivot_offset = Vector2(120, 120) + +[node name="Slot2" parent="Buttons" instance=ExtResource("4_epm30")] +layout_mode = 0 +offset_left = 867.0 +offset_top = 880.0 +offset_right = 1107.0 +offset_bottom = 1120.0 +pivot_offset = Vector2(120, 120) + +[node name="Slot3" parent="Buttons" instance=ExtResource("4_epm30")] +layout_mode = 0 +offset_left = 1170.0 +offset_top = 800.0 +offset_right = 1410.0 +offset_bottom = 1040.0 +pivot_offset = Vector2(120, 120) + +[node name="Slot4" parent="Buttons" instance=ExtResource("4_epm30")] +layout_mode = 0 +offset_left = 1445.0 +offset_top = 628.0 +offset_right = 1685.0 +offset_bottom = 868.0 +pivot_offset = Vector2(120, 120) + +[node name="Slot5" parent="Buttons" instance=ExtResource("4_epm30")] +layout_mode = 0 +offset_left = 1744.0 +offset_top = 478.0 +offset_right = 1984.0 +offset_bottom = 718.0 +pivot_offset = Vector2(120, 120) + +[node name="Jellyfish" type="TextureRect" parent="."] +layout_mode = 0 +offset_left = 1511.0 +offset_top = 32.0 +offset_right = 1791.0 +offset_bottom = 512.0 +mouse_filter = 2 +texture = ExtResource("jellyfish_tex") +expand_mode = 1 +stretch_mode = 5 diff --git a/resources/gardens/garden_10.tscn b/resources/gardens/garden_10.tscn new file mode 100644 index 00000000..4a1bfaea --- /dev/null +++ b/resources/gardens/garden_10.tscn @@ -0,0 +1,206 @@ +[gd_scene format=3] + +[ext_resource type="Script" uid="uid://ch5h4p1o54whq" path="res://resources/gardens/garden.gd" id="1_5owem"] +[ext_resource type="Texture2D" uid="uid://d26hapg1hf8a6" path="res://assets/gardens/gardens/Garden_01.png" id="3_p7iv3"] +[ext_resource type="PackedScene" uid="uid://delcgui3v0eek" path="res://sources/lesson_screen/lesson_button.tscn" id="4_epm30"] +[ext_resource type="Texture2D" uid="uid://bfqwlmmliem8f" path="res://assets/gardens/jellyfish.png" id="jellyfish_tex"] +[ext_resource type="Texture2D" uid="uid://dcekseb1b3ruw" path="res://assets/gardens/plants/garden_plant_01.png" id="plant_01"] +[ext_resource type="Texture2D" uid="uid://clkr31osbqs7u" path="res://assets/gardens/plants/garden_plant_02.png" id="plant_02"] +[ext_resource type="Texture2D" uid="uid://dgssb0oonuqku" path="res://assets/gardens/plants/garden_plant_03.png" id="plant_03"] +[ext_resource type="Texture2D" uid="uid://bqp1nkk53y1is" path="res://assets/gardens/plants/garden_plant_04.png" id="plant_04"] +[ext_resource type="Texture2D" uid="uid://dvxnktx1wiyxp" path="res://assets/gardens/plants/garden_plant_05.png" id="plant_05"] +[ext_resource type="Texture2D" uid="uid://f2arml2f4b8p" path="res://assets/gardens/plants/garden_plant_06.png" id="plant_06"] +[ext_resource type="Texture2D" uid="uid://dufnm3bkfe5yv" path="res://assets/gardens/plants/garden_plant_07.png" id="plant_07"] +[ext_resource type="Texture2D" uid="uid://dt2a0dea0hv0c" path="res://assets/gardens/plants/garden_plant_08.png" id="plant_08"] + +[node name="Garden" type="Control"] +custom_minimum_size = Vector2(2400, 2.08165e-12) +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 +script = ExtResource("1_5owem") +title = "Garden 10" +unlocked_lesson = Color(0.227, 0.227, 0.557, 1) +unlocked_lesson_text = Color(0.722, 0.722, 0.941, 1) +completed_lesson = Color(0.722, 0.722, 0.941, 1) +completed_lesson_text = Color(0.133, 0.133, 0.369, 1) + +[node name="Background" type="TextureRect" parent="."] +unique_name_in_owner = true +layout_mode = 0 +offset_left = 350.0 +offset_top = 50.0 +offset_right = 2050.0 +offset_bottom = 1750.0 +mouse_filter = 2 +texture = ExtResource("3_p7iv3") +expand_mode = 1 + +[node name="Plants" type="Control" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 + +[node name="Plant1" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 395.0 +offset_top = 475.0 +offset_right = 515.0 +offset_bottom = 1425.0 +mouse_filter = 2 +texture = ExtResource("plant_01") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant2" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 574.0 +offset_top = 1322.0 +offset_right = 744.0 +offset_bottom = 1592.0 +mouse_filter = 2 +texture = ExtResource("plant_02") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant3" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 1178.0 +offset_top = 1058.0 +offset_right = 1618.0 +offset_bottom = 1388.0 +mouse_filter = 2 +texture = ExtResource("plant_03") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant4" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 864.0 +offset_top = 308.0 +offset_right = 1084.0 +offset_bottom = 628.0 +mouse_filter = 2 +texture = ExtResource("plant_04") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant5" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 744.0 +offset_top = 688.0 +offset_right = 889.0 +offset_bottom = 998.0 +mouse_filter = 2 +texture = ExtResource("plant_05") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant6" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 1742.0 +offset_top = 762.0 +offset_right = 1927.0 +offset_bottom = 1077.0 +mouse_filter = 2 +texture = ExtResource("plant_06") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant7" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 880.0 +offset_top = 1172.0 +offset_right = 1010.0 +offset_bottom = 1592.0 +mouse_filter = 2 +texture = ExtResource("plant_07") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant8" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 1122.0 +offset_top = 288.0 +offset_right = 1472.0 +offset_bottom = 638.0 +mouse_filter = 2 +texture = ExtResource("plant_08") +expand_mode = 1 +stretch_mode = 5 + +[node name="Buttons" type="Control" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 + +[node name="Slot1" parent="Buttons" instance=ExtResource("4_epm30")] +layout_mode = 0 +offset_left = 584.0 +offset_top = 1066.0 +offset_right = 824.0 +offset_bottom = 1306.0 +pivot_offset = Vector2(120, 120) + +[node name="Slot2" parent="Buttons" instance=ExtResource("4_epm30")] +layout_mode = 0 +offset_left = 867.0 +offset_top = 880.0 +offset_right = 1107.0 +offset_bottom = 1120.0 +pivot_offset = Vector2(120, 120) + +[node name="Slot3" parent="Buttons" instance=ExtResource("4_epm30")] +layout_mode = 0 +offset_left = 1170.0 +offset_top = 800.0 +offset_right = 1410.0 +offset_bottom = 1040.0 +pivot_offset = Vector2(120, 120) + +[node name="Slot4" parent="Buttons" instance=ExtResource("4_epm30")] +layout_mode = 0 +offset_left = 1445.0 +offset_top = 628.0 +offset_right = 1685.0 +offset_bottom = 868.0 +pivot_offset = Vector2(120, 120) + +[node name="Slot5" parent="Buttons" instance=ExtResource("4_epm30")] +layout_mode = 0 +offset_left = 1744.0 +offset_top = 478.0 +offset_right = 1984.0 +offset_bottom = 718.0 +pivot_offset = Vector2(120, 120) + +[node name="Jellyfish" type="TextureRect" parent="."] +layout_mode = 0 +offset_left = 1511.0 +offset_top = 32.0 +offset_right = 1791.0 +offset_bottom = 512.0 +mouse_filter = 2 +texture = ExtResource("jellyfish_tex") +expand_mode = 1 +stretch_mode = 5 diff --git a/resources/gardens/garden_11.tscn b/resources/gardens/garden_11.tscn new file mode 100644 index 00000000..7364f67c --- /dev/null +++ b/resources/gardens/garden_11.tscn @@ -0,0 +1,206 @@ +[gd_scene format=3] + +[ext_resource type="Script" uid="uid://ch5h4p1o54whq" path="res://resources/gardens/garden.gd" id="1_5owem"] +[ext_resource type="Texture2D" uid="uid://d26hapg1hf8a6" path="res://assets/gardens/gardens/Garden_01.png" id="3_p7iv3"] +[ext_resource type="PackedScene" uid="uid://delcgui3v0eek" path="res://sources/lesson_screen/lesson_button.tscn" id="4_epm30"] +[ext_resource type="Texture2D" uid="uid://bfqwlmmliem8f" path="res://assets/gardens/jellyfish.png" id="jellyfish_tex"] +[ext_resource type="Texture2D" uid="uid://dcekseb1b3ruw" path="res://assets/gardens/plants/garden_plant_01.png" id="plant_01"] +[ext_resource type="Texture2D" uid="uid://clkr31osbqs7u" path="res://assets/gardens/plants/garden_plant_02.png" id="plant_02"] +[ext_resource type="Texture2D" uid="uid://dgssb0oonuqku" path="res://assets/gardens/plants/garden_plant_03.png" id="plant_03"] +[ext_resource type="Texture2D" uid="uid://bqp1nkk53y1is" path="res://assets/gardens/plants/garden_plant_04.png" id="plant_04"] +[ext_resource type="Texture2D" uid="uid://dvxnktx1wiyxp" path="res://assets/gardens/plants/garden_plant_05.png" id="plant_05"] +[ext_resource type="Texture2D" uid="uid://f2arml2f4b8p" path="res://assets/gardens/plants/garden_plant_06.png" id="plant_06"] +[ext_resource type="Texture2D" uid="uid://dufnm3bkfe5yv" path="res://assets/gardens/plants/garden_plant_07.png" id="plant_07"] +[ext_resource type="Texture2D" uid="uid://dt2a0dea0hv0c" path="res://assets/gardens/plants/garden_plant_08.png" id="plant_08"] + +[node name="Garden" type="Control"] +custom_minimum_size = Vector2(2400, 2.08165e-12) +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 +script = ExtResource("1_5owem") +title = "Garden 11" +unlocked_lesson = Color(0.102, 0.478, 0.416, 1) +unlocked_lesson_text = Color(0.659, 0.941, 0.878, 1) +completed_lesson = Color(0.659, 0.941, 0.878, 1) +completed_lesson_text = Color(0.055, 0.322, 0.282, 1) + +[node name="Background" type="TextureRect" parent="."] +unique_name_in_owner = true +layout_mode = 0 +offset_left = 350.0 +offset_top = 50.0 +offset_right = 2050.0 +offset_bottom = 1750.0 +mouse_filter = 2 +texture = ExtResource("3_p7iv3") +expand_mode = 1 + +[node name="Plants" type="Control" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 + +[node name="Plant1" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 395.0 +offset_top = 475.0 +offset_right = 515.0 +offset_bottom = 1425.0 +mouse_filter = 2 +texture = ExtResource("plant_01") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant2" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 574.0 +offset_top = 1322.0 +offset_right = 744.0 +offset_bottom = 1592.0 +mouse_filter = 2 +texture = ExtResource("plant_02") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant3" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 1178.0 +offset_top = 1058.0 +offset_right = 1618.0 +offset_bottom = 1388.0 +mouse_filter = 2 +texture = ExtResource("plant_03") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant4" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 864.0 +offset_top = 308.0 +offset_right = 1084.0 +offset_bottom = 628.0 +mouse_filter = 2 +texture = ExtResource("plant_04") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant5" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 744.0 +offset_top = 688.0 +offset_right = 889.0 +offset_bottom = 998.0 +mouse_filter = 2 +texture = ExtResource("plant_05") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant6" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 1742.0 +offset_top = 762.0 +offset_right = 1927.0 +offset_bottom = 1077.0 +mouse_filter = 2 +texture = ExtResource("plant_06") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant7" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 880.0 +offset_top = 1172.0 +offset_right = 1010.0 +offset_bottom = 1592.0 +mouse_filter = 2 +texture = ExtResource("plant_07") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant8" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 1122.0 +offset_top = 288.0 +offset_right = 1472.0 +offset_bottom = 638.0 +mouse_filter = 2 +texture = ExtResource("plant_08") +expand_mode = 1 +stretch_mode = 5 + +[node name="Buttons" type="Control" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 + +[node name="Slot1" parent="Buttons" instance=ExtResource("4_epm30")] +layout_mode = 0 +offset_left = 584.0 +offset_top = 1066.0 +offset_right = 824.0 +offset_bottom = 1306.0 +pivot_offset = Vector2(120, 120) + +[node name="Slot2" parent="Buttons" instance=ExtResource("4_epm30")] +layout_mode = 0 +offset_left = 867.0 +offset_top = 880.0 +offset_right = 1107.0 +offset_bottom = 1120.0 +pivot_offset = Vector2(120, 120) + +[node name="Slot3" parent="Buttons" instance=ExtResource("4_epm30")] +layout_mode = 0 +offset_left = 1170.0 +offset_top = 800.0 +offset_right = 1410.0 +offset_bottom = 1040.0 +pivot_offset = Vector2(120, 120) + +[node name="Slot4" parent="Buttons" instance=ExtResource("4_epm30")] +layout_mode = 0 +offset_left = 1445.0 +offset_top = 628.0 +offset_right = 1685.0 +offset_bottom = 868.0 +pivot_offset = Vector2(120, 120) + +[node name="Slot5" parent="Buttons" instance=ExtResource("4_epm30")] +layout_mode = 0 +offset_left = 1744.0 +offset_top = 478.0 +offset_right = 1984.0 +offset_bottom = 718.0 +pivot_offset = Vector2(120, 120) + +[node name="Jellyfish" type="TextureRect" parent="."] +layout_mode = 0 +offset_left = 1511.0 +offset_top = 32.0 +offset_right = 1791.0 +offset_bottom = 512.0 +mouse_filter = 2 +texture = ExtResource("jellyfish_tex") +expand_mode = 1 +stretch_mode = 5 diff --git a/resources/gardens/garden_12.tscn b/resources/gardens/garden_12.tscn new file mode 100644 index 00000000..37cc6f42 --- /dev/null +++ b/resources/gardens/garden_12.tscn @@ -0,0 +1,206 @@ +[gd_scene format=3] + +[ext_resource type="Script" uid="uid://ch5h4p1o54whq" path="res://resources/gardens/garden.gd" id="1_5owem"] +[ext_resource type="Texture2D" uid="uid://d26hapg1hf8a6" path="res://assets/gardens/gardens/Garden_01.png" id="3_p7iv3"] +[ext_resource type="PackedScene" uid="uid://delcgui3v0eek" path="res://sources/lesson_screen/lesson_button.tscn" id="4_epm30"] +[ext_resource type="Texture2D" uid="uid://bfqwlmmliem8f" path="res://assets/gardens/jellyfish.png" id="jellyfish_tex"] +[ext_resource type="Texture2D" uid="uid://dcekseb1b3ruw" path="res://assets/gardens/plants/garden_plant_01.png" id="plant_01"] +[ext_resource type="Texture2D" uid="uid://clkr31osbqs7u" path="res://assets/gardens/plants/garden_plant_02.png" id="plant_02"] +[ext_resource type="Texture2D" uid="uid://dgssb0oonuqku" path="res://assets/gardens/plants/garden_plant_03.png" id="plant_03"] +[ext_resource type="Texture2D" uid="uid://bqp1nkk53y1is" path="res://assets/gardens/plants/garden_plant_04.png" id="plant_04"] +[ext_resource type="Texture2D" uid="uid://dvxnktx1wiyxp" path="res://assets/gardens/plants/garden_plant_05.png" id="plant_05"] +[ext_resource type="Texture2D" uid="uid://f2arml2f4b8p" path="res://assets/gardens/plants/garden_plant_06.png" id="plant_06"] +[ext_resource type="Texture2D" uid="uid://dufnm3bkfe5yv" path="res://assets/gardens/plants/garden_plant_07.png" id="plant_07"] +[ext_resource type="Texture2D" uid="uid://dt2a0dea0hv0c" path="res://assets/gardens/plants/garden_plant_08.png" id="plant_08"] + +[node name="Garden" type="Control"] +custom_minimum_size = Vector2(2400, 2.08165e-12) +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 +script = ExtResource("1_5owem") +title = "Garden 12" +unlocked_lesson = Color(0.478, 0.165, 0.431, 1) +unlocked_lesson_text = Color(0.878, 0.659, 0.847, 1) +completed_lesson = Color(0.878, 0.659, 0.847, 1) +completed_lesson_text = Color(0.314, 0.102, 0.282, 1) + +[node name="Background" type="TextureRect" parent="."] +unique_name_in_owner = true +layout_mode = 0 +offset_left = 350.0 +offset_top = 50.0 +offset_right = 2050.0 +offset_bottom = 1750.0 +mouse_filter = 2 +texture = ExtResource("3_p7iv3") +expand_mode = 1 + +[node name="Plants" type="Control" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 + +[node name="Plant1" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 395.0 +offset_top = 475.0 +offset_right = 515.0 +offset_bottom = 1425.0 +mouse_filter = 2 +texture = ExtResource("plant_01") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant2" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 574.0 +offset_top = 1322.0 +offset_right = 744.0 +offset_bottom = 1592.0 +mouse_filter = 2 +texture = ExtResource("plant_02") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant3" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 1178.0 +offset_top = 1058.0 +offset_right = 1618.0 +offset_bottom = 1388.0 +mouse_filter = 2 +texture = ExtResource("plant_03") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant4" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 864.0 +offset_top = 308.0 +offset_right = 1084.0 +offset_bottom = 628.0 +mouse_filter = 2 +texture = ExtResource("plant_04") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant5" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 744.0 +offset_top = 688.0 +offset_right = 889.0 +offset_bottom = 998.0 +mouse_filter = 2 +texture = ExtResource("plant_05") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant6" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 1742.0 +offset_top = 762.0 +offset_right = 1927.0 +offset_bottom = 1077.0 +mouse_filter = 2 +texture = ExtResource("plant_06") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant7" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 880.0 +offset_top = 1172.0 +offset_right = 1010.0 +offset_bottom = 1592.0 +mouse_filter = 2 +texture = ExtResource("plant_07") +expand_mode = 1 +stretch_mode = 5 + +[node name="Plant8" type="TextureRect" parent="Plants"] +modulate = Color(0.0392157, 0.333333, 0.356863, 1) +layout_mode = 0 +offset_left = 1122.0 +offset_top = 288.0 +offset_right = 1472.0 +offset_bottom = 638.0 +mouse_filter = 2 +texture = ExtResource("plant_08") +expand_mode = 1 +stretch_mode = 5 + +[node name="Buttons" type="Control" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 + +[node name="Slot1" parent="Buttons" instance=ExtResource("4_epm30")] +layout_mode = 0 +offset_left = 584.0 +offset_top = 1066.0 +offset_right = 824.0 +offset_bottom = 1306.0 +pivot_offset = Vector2(120, 120) + +[node name="Slot2" parent="Buttons" instance=ExtResource("4_epm30")] +layout_mode = 0 +offset_left = 867.0 +offset_top = 880.0 +offset_right = 1107.0 +offset_bottom = 1120.0 +pivot_offset = Vector2(120, 120) + +[node name="Slot3" parent="Buttons" instance=ExtResource("4_epm30")] +layout_mode = 0 +offset_left = 1170.0 +offset_top = 800.0 +offset_right = 1410.0 +offset_bottom = 1040.0 +pivot_offset = Vector2(120, 120) + +[node name="Slot4" parent="Buttons" instance=ExtResource("4_epm30")] +layout_mode = 0 +offset_left = 1445.0 +offset_top = 628.0 +offset_right = 1685.0 +offset_bottom = 868.0 +pivot_offset = Vector2(120, 120) + +[node name="Slot5" parent="Buttons" instance=ExtResource("4_epm30")] +layout_mode = 0 +offset_left = 1744.0 +offset_top = 478.0 +offset_right = 1984.0 +offset_bottom = 718.0 +pivot_offset = Vector2(120, 120) + +[node name="Jellyfish" type="TextureRect" parent="."] +layout_mode = 0 +offset_left = 1511.0 +offset_top = 32.0 +offset_right = 1791.0 +offset_bottom = 512.0 +mouse_filter = 2 +texture = ExtResource("jellyfish_tex") +expand_mode = 1 +stretch_mode = 5 diff --git a/sources/gardens/gardens.gd b/sources/gardens/gardens.gd index a900423c..3f3d88f8 100644 --- a/sources/gardens/gardens.gd +++ b/sources/gardens/gardens.gd @@ -4,18 +4,33 @@ extends Control signal minigame_layout_opened() const KALULU: GDScript = preload("res://sources/minigames/base/kalulu_ingame.gd") -const GARDEN_SCENE: PackedScene = preload("res://resources/gardens/garden.tscn") +const GARDEN_SCENES: Array[PackedScene] = [ + preload("res://resources/gardens/garden_01.tscn"), + preload("res://resources/gardens/garden_02.tscn"), + preload("res://resources/gardens/garden_03.tscn"), + preload("res://resources/gardens/garden_04.tscn"), + preload("res://resources/gardens/garden_05.tscn"), + preload("res://resources/gardens/garden_06.tscn"), + preload("res://resources/gardens/garden_07.tscn"), + preload("res://resources/gardens/garden_08.tscn"), + preload("res://resources/gardens/garden_09.tscn"), + preload("res://resources/gardens/garden_10.tscn"), + preload("res://resources/gardens/garden_11.tscn"), + preload("res://resources/gardens/garden_12.tscn"), +] const LOOK_AND_LEARN_SCENE: PackedScene = preload("res://sources/look_and_learn/look_and_learn.tscn") const BOSS_BUTTON_SCENE: PackedScene = preload("res://sources/gardens/boss_button.tscn") const BOSS_MINIGAME_SCENE_PATH: String = "res://sources/minigames/boss/boss_minigame.tscn" const GARDEN_SIZE: int = 2400 -const GARDEN_TEXTURES_NB: int = 20 +const GARDENS_COUNT: int = 12 +const MIN_LESSONS: int = 12 +const MAX_LESSONS: int = 60 const GARDEN_CENTER_Y: float = 900.0 const GARDEN_CIRCLE_RADIUS: float = 850.0 const FINAL_BOSS_PADDING: float = 120.0 const BACK_BUTTON_HOLD_DURATION_SECONDS: float = 1.0 -const LAYOUT_VERSION: int = 13 -# Centers of the 5 fixed button slots (must match garden.tscn positions) +const LAYOUT_VERSION: int = 14 +# Centers of the 5 fixed button slots (must match garden_XX.tscn positions) const SLOT_CENTERS: Array[Vector2i] = [ Vector2i(704, 1186), Vector2i(987, 1000), Vector2i(1290, 920), Vector2i(1565, 748), Vector2i(1864, 598) @@ -313,9 +328,14 @@ func _play_new_lesson_unlock_sequence() -> void: func _ready() -> void: UserDataManager.start_synchronization_timer() _load_lessons_from_database() + var lesson_count: int = lessons.size() + if lesson_count < MIN_LESSONS or lesson_count > MAX_LESSONS: + Log.error("Gardens: Lesson count must be between %d and %d, got %d" % [MIN_LESSONS, MAX_LESSONS, lesson_count]) + assert(false, "Lesson count must be between %d and %d, got %d" % [MIN_LESSONS, MAX_LESSONS, lesson_count]) + return if scroll_end_spacer: scroll_end_base_width = scroll_end_spacer.custom_minimum_size.x - gardens_layout = get_session_layout(lessons.size()) + gardens_layout = get_session_layout(lesson_count) _set_up_lessons() # If there is no data, skips the rest @@ -541,8 +561,8 @@ static func generate_gardens_layout(total_lessons: int) -> GardensLayout: Log.trace("Gardens: Total lessons to layout: %s" % str(total_lessons)) var lessons_left: int = total_lessons var garden_index: int = 0 - while lessons_left > 0 and garden_index < GARDEN_TEXTURES_NB: - var gardens_left: int = GARDEN_TEXTURES_NB - garden_index + while lessons_left > 0 and garden_index < GARDENS_COUNT: + var gardens_left: int = GARDENS_COUNT - garden_index var lessons_for_garden: int = int(ceili(float(lessons_left) / float(gardens_left))) Log.trace("Gardens: Generating layout for garden %s with %s lessons left" % [str(garden_index), str(lessons_left)]) layout.gardens.append(_generate_single_garden_layout(garden_index, lessons_for_garden)) @@ -557,7 +577,7 @@ static func _generate_single_garden_layout(garden_index: int, lessons_for_garden Log.info("Gardens: Generating single garden layout for garden %s" % str(garden_index)) Log.trace("Gardens: Garden %s will include %s lessons" % [str(garden_index), str(lessons_for_garden)]) var garden_layout: GardenLayout = GardenLayout.new() - garden_layout.color = garden_index % GARDEN_TEXTURES_NB + garden_layout.color = garden_index % GARDENS_COUNT Log.trace("Gardens: Garden %s color index set to %s" % [str(garden_index), str(garden_layout.color)]) var garden_dimensions: Vector2 = Vector2(GARDEN_SIZE, GARDEN_CENTER_Y * 2.0) var half_size: Vector2 = _get_lesson_button_half_size() @@ -816,7 +836,7 @@ func add_gardens() -> void: for layout_index: int in range(gardens_layout.gardens.size()): Log.trace("Gardens: Preparing garden %s with layout index %s" % [str(garden_index), str(layout_index)]) var garden_layout: GardenLayout = gardens_layout.gardens[layout_index] - var garden: Garden = GARDEN_SCENE.instantiate() + var garden: Garden = GARDEN_SCENES[layout_index].instantiate() garden_parent.add_child(garden) garden.garden_index = garden_index garden_index += 1 diff --git a/sources/lesson_screen/lesson_button.gd b/sources/lesson_screen/lesson_button.gd index e6be2d2e..b7babf6c 100644 --- a/sources/lesson_screen/lesson_button.gd +++ b/sources/lesson_screen/lesson_button.gd @@ -3,11 +3,16 @@ extends TextureButton const LOCKED_COLOR: Color = Color("cccccc") const LOCKED_LABEL_COLOR: Color = Color("999999") -const UNLOCKED_FILL_COLOR: Color = Color("176d78") -const UNLOCKED_LABEL_COLOR: Color = Color("9be3ea") +const DEFAULT_UNLOCKED_FILL_COLOR: Color = Color("176d78") +const DEFAULT_UNLOCKED_LABEL_COLOR: Color = Color("9be3ea") const UNLOCKED_BORDER_COLOR: Color = Color("fbb03b") -const COMPLETED_FILL_COLOR: Color = Color("9be3ea") -const COMPLETED_LABEL_COLOR: Color = Color("0a555b") +const DEFAULT_COMPLETED_FILL_COLOR: Color = Color("9be3ea") +const DEFAULT_COMPLETED_LABEL_COLOR: Color = Color("0a555b") + +var unlocked_fill_color: Color = DEFAULT_UNLOCKED_FILL_COLOR +var unlocked_label_color: Color = DEFAULT_UNLOCKED_LABEL_COLOR +var completed_fill_color: Color = DEFAULT_COMPLETED_FILL_COLOR +var completed_label_color: Color = DEFAULT_COMPLETED_LABEL_COLOR @export var text: String: set = _set_text @@ -41,6 +46,14 @@ func set_button_disabled(value: bool) -> void: _update_visual_state() +func set_garden_colors(p_unlocked: Color, p_unlocked_text: Color, p_completed: Color, p_completed_text: Color) -> void: + unlocked_fill_color = p_unlocked + unlocked_label_color = p_unlocked_text + completed_fill_color = p_completed + completed_label_color = p_completed_text + _update_visual_state() + + func _update_visual_state() -> void: if not center or not border or not label: return @@ -49,14 +62,14 @@ func _update_visual_state() -> void: border.visible = false label.add_theme_color_override("font_color", LOCKED_LABEL_COLOR) elif completed: - center.modulate = COMPLETED_FILL_COLOR + center.modulate = completed_fill_color border.visible = false - label.add_theme_color_override("font_color", COMPLETED_LABEL_COLOR) + label.add_theme_color_override("font_color", completed_label_color) else: - center.modulate = UNLOCKED_FILL_COLOR + center.modulate = unlocked_fill_color border.visible = true border.modulate = UNLOCKED_BORDER_COLOR - label.add_theme_color_override("font_color", UNLOCKED_LABEL_COLOR) + label.add_theme_color_override("font_color", unlocked_label_color) func _set_text(value: String) -> void: From e3dda5e8b01ed18af9eb19dcd8001d9a873b620e Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Thu, 16 Apr 2026 15:38:10 +0200 Subject: [PATCH 023/111] Set correct colors and titles for gardens 01-05 from design specs Blue Jellyfish, Purple Turtle, Ant, Crab, Yellow Parakeet gardens now use the final color values from the design spreadsheet. Co-Authored-By: Claude Opus 4.6 (1M context) --- resources/gardens/garden.gd | 2 +- resources/gardens/garden_01.tscn | 10 +++++----- resources/gardens/garden_02.tscn | 10 +++++----- resources/gardens/garden_03.tscn | 10 +++++----- resources/gardens/garden_04.tscn | 10 +++++----- resources/gardens/garden_05.tscn | 10 +++++----- 6 files changed, 26 insertions(+), 26 deletions(-) diff --git a/resources/gardens/garden.gd b/resources/gardens/garden.gd index 325e586c..4975f767 100644 --- a/resources/gardens/garden.gd +++ b/resources/gardens/garden.gd @@ -19,7 +19,7 @@ const SLOT_SELECTION: Dictionary = { set = set_garden_layout ## Title is for developer reference only — not used in-game. @export var title: String = "" -@export var unlocked_lesson: Color = Color("176d78") +@export var unlocked_lesson: Color = Color("0a555b") @export var unlocked_lesson_text: Color = Color("9be3ea") @export var completed_lesson: Color = Color("9be3ea") @export var completed_lesson_text: Color = Color("0a555b") diff --git a/resources/gardens/garden_01.tscn b/resources/gardens/garden_01.tscn index f6a0b2a1..6120d0ab 100644 --- a/resources/gardens/garden_01.tscn +++ b/resources/gardens/garden_01.tscn @@ -23,11 +23,11 @@ grow_horizontal = 2 grow_vertical = 2 mouse_filter = 2 script = ExtResource("1_5owem") -title = "Garden 01" -unlocked_lesson = Color(0.091, 0.427, 0.471, 1) -unlocked_lesson_text = Color(0.608, 0.89, 0.918, 1) -completed_lesson = Color(0.608, 0.89, 0.918, 1) -completed_lesson_text = Color(0.039, 0.333, 0.357, 1) +title = "Blue Jellyfish Garden" +unlocked_lesson = Color(0.0392157, 0.333333, 0.356863, 1) +unlocked_lesson_text = Color(0.607843, 0.890196, 0.917647, 1) +completed_lesson = Color(0.607843, 0.890196, 0.917647, 1) +completed_lesson_text = Color(0.0392157, 0.333333, 0.356863, 1) [node name="Background" type="TextureRect" parent="."] unique_name_in_owner = true diff --git a/resources/gardens/garden_02.tscn b/resources/gardens/garden_02.tscn index 59812f0a..3662a3ec 100644 --- a/resources/gardens/garden_02.tscn +++ b/resources/gardens/garden_02.tscn @@ -23,11 +23,11 @@ grow_horizontal = 2 grow_vertical = 2 mouse_filter = 2 script = ExtResource("1_5owem") -title = "Garden 02" -unlocked_lesson = Color(0.357, 0.176, 0.557, 1) -unlocked_lesson_text = Color(0.831, 0.71, 0.941, 1) -completed_lesson = Color(0.831, 0.71, 0.941, 1) -completed_lesson_text = Color(0.227, 0.102, 0.369, 1) +title = "Purple Turtle Garden" +unlocked_lesson = Color(0.345098, 0.266667, 0.490196, 1) +unlocked_lesson_text = Color(0.894118, 0.827451, 0.937255, 1) +completed_lesson = Color(0.894118, 0.827451, 0.937255, 1) +completed_lesson_text = Color(0.345098, 0.266667, 0.490196, 1) [node name="Background" type="TextureRect" parent="." unique_id=1058030897] unique_name_in_owner = true diff --git a/resources/gardens/garden_03.tscn b/resources/gardens/garden_03.tscn index 2339bc2d..79de44ff 100644 --- a/resources/gardens/garden_03.tscn +++ b/resources/gardens/garden_03.tscn @@ -23,11 +23,11 @@ grow_horizontal = 2 grow_vertical = 2 mouse_filter = 2 script = ExtResource("1_5owem") -title = "Garden 03" -unlocked_lesson = Color(0.176, 0.431, 0.247, 1) -unlocked_lesson_text = Color(0.659, 0.902, 0.722, 1) -completed_lesson = Color(0.659, 0.902, 0.722, 1) -completed_lesson_text = Color(0.102, 0.29, 0.157, 1) +title = "Ant Garden" +unlocked_lesson = Color(0.521569, 0.0313725, 0.403922, 1) +unlocked_lesson_text = Color(0.921569, 0.752941, 0.870588, 1) +completed_lesson = Color(0.921569, 0.752941, 0.870588, 1) +completed_lesson_text = Color(0.521569, 0.0313725, 0.403922, 1) [node name="Background" type="TextureRect" parent="."] unique_name_in_owner = true diff --git a/resources/gardens/garden_04.tscn b/resources/gardens/garden_04.tscn index 9b75de24..646b055b 100644 --- a/resources/gardens/garden_04.tscn +++ b/resources/gardens/garden_04.tscn @@ -23,11 +23,11 @@ grow_horizontal = 2 grow_vertical = 2 mouse_filter = 2 script = ExtResource("1_5owem") -title = "Garden 04" -unlocked_lesson = Color(0.769, 0.353, 0.173, 1) -unlocked_lesson_text = Color(1, 0.788, 0.659, 1) -completed_lesson = Color(1, 0.788, 0.659, 1) -completed_lesson_text = Color(0.541, 0.208, 0.063, 1) +title = "Crab Garden" +unlocked_lesson = Color(0.74902, 0.278431, 0, 1) +unlocked_lesson_text = Color(1, 0.792157, 0.690196, 1) +completed_lesson = Color(1, 0.792157, 0.690196, 1) +completed_lesson_text = Color(0.74902, 0.278431, 0, 1) [node name="Background" type="TextureRect" parent="."] unique_name_in_owner = true diff --git a/resources/gardens/garden_05.tscn b/resources/gardens/garden_05.tscn index 8a7122c7..1469dc1b 100644 --- a/resources/gardens/garden_05.tscn +++ b/resources/gardens/garden_05.tscn @@ -23,11 +23,11 @@ grow_horizontal = 2 grow_vertical = 2 mouse_filter = 2 script = ExtResource("1_5owem") -title = "Garden 05" -unlocked_lesson = Color(0.545, 0.133, 0.322, 1) -unlocked_lesson_text = Color(0.941, 0.659, 0.769, 1) -completed_lesson = Color(0.941, 0.659, 0.769, 1) -completed_lesson_text = Color(0.361, 0.063, 0.212, 1) +title = "Yellow Parakeet" +unlocked_lesson = Color(0.701961, 0.443137, 0, 1) +unlocked_lesson_text = Color(1, 0.941176, 0.780392, 1) +completed_lesson = Color(1, 0.941176, 0.780392, 1) +completed_lesson_text = Color(0.701961, 0.443137, 0, 1) [node name="Background" type="TextureRect" parent="."] unique_name_in_owner = true From 803e163de83e2c3e6757251ea924bf78ba240f6b Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Thu, 16 Apr 2026 15:42:40 +0200 Subject: [PATCH 024/111] Set background color directly on Background node in garden scenes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Removed code-side background.modulate override from set_background() — background tint is now baked into each scene's Background node. Gardens 06-12 use placeholder colors pending final design specs. Co-Authored-By: Claude Opus 4.6 (1M context) --- resources/gardens/garden.gd | 1 - resources/gardens/garden_01.tscn | 1 + resources/gardens/garden_02.tscn | 1 + resources/gardens/garden_03.tscn | 1 + resources/gardens/garden_04.tscn | 1 + resources/gardens/garden_05.tscn | 1 + resources/gardens/garden_06.tscn | 1 + resources/gardens/garden_07.tscn | 1 + resources/gardens/garden_08.tscn | 1 + resources/gardens/garden_09.tscn | 1 + resources/gardens/garden_10.tscn | 1 + resources/gardens/garden_11.tscn | 1 + resources/gardens/garden_12.tscn | 1 + 13 files changed, 12 insertions(+), 1 deletion(-) diff --git a/resources/gardens/garden.gd b/resources/gardens/garden.gd index 4975f767..83a8a7d4 100644 --- a/resources/gardens/garden.gd +++ b/resources/gardens/garden.gd @@ -74,7 +74,6 @@ func set_background(p_color: int) -> void: var path: String = BACKGROUND_PATH_MODEL % [p_color + 1] var texture: Texture2D = load(path) if ResourceLoader.exists(path) else load(BACKGROUND_PATH_MODEL % [1]) background.texture = texture - background.modulate = unlocked_lesson color = unlocked_lesson diff --git a/resources/gardens/garden_01.tscn b/resources/gardens/garden_01.tscn index 6120d0ab..07121e28 100644 --- a/resources/gardens/garden_01.tscn +++ b/resources/gardens/garden_01.tscn @@ -31,6 +31,7 @@ completed_lesson_text = Color(0.0392157, 0.333333, 0.356863, 1) [node name="Background" type="TextureRect" parent="."] unique_name_in_owner = true +modulate = Color(0.0901961, 0.427451, 0.470588, 1) layout_mode = 0 offset_left = 350.0 offset_top = 50.0 diff --git a/resources/gardens/garden_02.tscn b/resources/gardens/garden_02.tscn index 3662a3ec..299f7e9f 100644 --- a/resources/gardens/garden_02.tscn +++ b/resources/gardens/garden_02.tscn @@ -31,6 +31,7 @@ completed_lesson_text = Color(0.345098, 0.266667, 0.490196, 1) [node name="Background" type="TextureRect" parent="." unique_id=1058030897] unique_name_in_owner = true +modulate = Color(0.454902, 0.352941, 0.647059, 1) layout_mode = 0 offset_left = 350.0 offset_top = 50.0 diff --git a/resources/gardens/garden_03.tscn b/resources/gardens/garden_03.tscn index 79de44ff..ed1dc7df 100644 --- a/resources/gardens/garden_03.tscn +++ b/resources/gardens/garden_03.tscn @@ -31,6 +31,7 @@ completed_lesson_text = Color(0.521569, 0.0313725, 0.403922, 1) [node name="Background" type="TextureRect" parent="."] unique_name_in_owner = true +modulate = Color(0.831373, 0.290196, 0.701961, 1) layout_mode = 0 offset_left = 350.0 offset_top = 50.0 diff --git a/resources/gardens/garden_04.tscn b/resources/gardens/garden_04.tscn index 646b055b..02d0886a 100644 --- a/resources/gardens/garden_04.tscn +++ b/resources/gardens/garden_04.tscn @@ -31,6 +31,7 @@ completed_lesson_text = Color(0.74902, 0.278431, 0, 1) [node name="Background" type="TextureRect" parent="."] unique_name_in_owner = true +modulate = Color(1, 0.498039, 0.2, 1) layout_mode = 0 offset_left = 350.0 offset_top = 50.0 diff --git a/resources/gardens/garden_05.tscn b/resources/gardens/garden_05.tscn index 1469dc1b..ee31a292 100644 --- a/resources/gardens/garden_05.tscn +++ b/resources/gardens/garden_05.tscn @@ -31,6 +31,7 @@ completed_lesson_text = Color(0.701961, 0.443137, 0, 1) [node name="Background" type="TextureRect" parent="."] unique_name_in_owner = true +modulate = Color(0.921569, 0.643137, 0, 1) layout_mode = 0 offset_left = 350.0 offset_top = 50.0 diff --git a/resources/gardens/garden_06.tscn b/resources/gardens/garden_06.tscn index d015cd6c..833cf3ec 100644 --- a/resources/gardens/garden_06.tscn +++ b/resources/gardens/garden_06.tscn @@ -31,6 +31,7 @@ completed_lesson_text = Color(0.353, 0.314, 0.063, 1) [node name="Background" type="TextureRect" parent="."] unique_name_in_owner = true +modulate = Color(0.541, 0.478, 0.102, 1) layout_mode = 0 offset_left = 350.0 offset_top = 50.0 diff --git a/resources/gardens/garden_07.tscn b/resources/gardens/garden_07.tscn index 37c511e6..55597969 100644 --- a/resources/gardens/garden_07.tscn +++ b/resources/gardens/garden_07.tscn @@ -31,6 +31,7 @@ completed_lesson_text = Color(0.055, 0.227, 0.361, 1) [node name="Background" type="TextureRect" parent="."] unique_name_in_owner = true +modulate = Color(0.102, 0.353, 0.541, 1) layout_mode = 0 offset_left = 350.0 offset_top = 50.0 diff --git a/resources/gardens/garden_08.tscn b/resources/gardens/garden_08.tscn index a0b791f3..f1ccf6fc 100644 --- a/resources/gardens/garden_08.tscn +++ b/resources/gardens/garden_08.tscn @@ -31,6 +31,7 @@ completed_lesson_text = Color(0.541, 0.165, 0.259, 1) [node name="Background" type="TextureRect" parent="."] unique_name_in_owner = true +modulate = Color(0.769, 0.322, 0.416, 1) layout_mode = 0 offset_left = 350.0 offset_top = 50.0 diff --git a/resources/gardens/garden_09.tscn b/resources/gardens/garden_09.tscn index 59d622b8..146d9310 100644 --- a/resources/gardens/garden_09.tscn +++ b/resources/gardens/garden_09.tscn @@ -31,6 +31,7 @@ completed_lesson_text = Color(0.271, 0.282, 0.094, 1) [node name="Background" type="TextureRect" parent="."] unique_name_in_owner = true +modulate = Color(0.42, 0.431, 0.173, 1) layout_mode = 0 offset_left = 350.0 offset_top = 50.0 diff --git a/resources/gardens/garden_10.tscn b/resources/gardens/garden_10.tscn index 4a1bfaea..ed00e23a 100644 --- a/resources/gardens/garden_10.tscn +++ b/resources/gardens/garden_10.tscn @@ -31,6 +31,7 @@ completed_lesson_text = Color(0.133, 0.133, 0.369, 1) [node name="Background" type="TextureRect" parent="."] unique_name_in_owner = true +modulate = Color(0.227, 0.227, 0.557, 1) layout_mode = 0 offset_left = 350.0 offset_top = 50.0 diff --git a/resources/gardens/garden_11.tscn b/resources/gardens/garden_11.tscn index 7364f67c..a482c67e 100644 --- a/resources/gardens/garden_11.tscn +++ b/resources/gardens/garden_11.tscn @@ -31,6 +31,7 @@ completed_lesson_text = Color(0.055, 0.322, 0.282, 1) [node name="Background" type="TextureRect" parent="."] unique_name_in_owner = true +modulate = Color(0.102, 0.478, 0.416, 1) layout_mode = 0 offset_left = 350.0 offset_top = 50.0 diff --git a/resources/gardens/garden_12.tscn b/resources/gardens/garden_12.tscn index 37cc6f42..22428647 100644 --- a/resources/gardens/garden_12.tscn +++ b/resources/gardens/garden_12.tscn @@ -31,6 +31,7 @@ completed_lesson_text = Color(0.314, 0.102, 0.282, 1) [node name="Background" type="TextureRect" parent="."] unique_name_in_owner = true +modulate = Color(0.478, 0.165, 0.431, 1) layout_mode = 0 offset_left = 350.0 offset_top = 50.0 From b1edce3fa4f03d37756a30c8178689b63a6b5f84 Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Thu, 16 Apr 2026 15:45:31 +0200 Subject: [PATCH 025/111] Remove placeholder background colors from gardens 06-12 Background colors are set manually in the editor, not by code. Co-Authored-By: Claude Opus 4.6 (1M context) --- resources/gardens/garden_06.tscn | 1 - resources/gardens/garden_07.tscn | 1 - resources/gardens/garden_08.tscn | 1 - resources/gardens/garden_09.tscn | 1 - resources/gardens/garden_10.tscn | 1 - resources/gardens/garden_11.tscn | 1 - resources/gardens/garden_12.tscn | 1 - 7 files changed, 7 deletions(-) diff --git a/resources/gardens/garden_06.tscn b/resources/gardens/garden_06.tscn index 833cf3ec..d015cd6c 100644 --- a/resources/gardens/garden_06.tscn +++ b/resources/gardens/garden_06.tscn @@ -31,7 +31,6 @@ completed_lesson_text = Color(0.353, 0.314, 0.063, 1) [node name="Background" type="TextureRect" parent="."] unique_name_in_owner = true -modulate = Color(0.541, 0.478, 0.102, 1) layout_mode = 0 offset_left = 350.0 offset_top = 50.0 diff --git a/resources/gardens/garden_07.tscn b/resources/gardens/garden_07.tscn index 55597969..37c511e6 100644 --- a/resources/gardens/garden_07.tscn +++ b/resources/gardens/garden_07.tscn @@ -31,7 +31,6 @@ completed_lesson_text = Color(0.055, 0.227, 0.361, 1) [node name="Background" type="TextureRect" parent="."] unique_name_in_owner = true -modulate = Color(0.102, 0.353, 0.541, 1) layout_mode = 0 offset_left = 350.0 offset_top = 50.0 diff --git a/resources/gardens/garden_08.tscn b/resources/gardens/garden_08.tscn index f1ccf6fc..a0b791f3 100644 --- a/resources/gardens/garden_08.tscn +++ b/resources/gardens/garden_08.tscn @@ -31,7 +31,6 @@ completed_lesson_text = Color(0.541, 0.165, 0.259, 1) [node name="Background" type="TextureRect" parent="."] unique_name_in_owner = true -modulate = Color(0.769, 0.322, 0.416, 1) layout_mode = 0 offset_left = 350.0 offset_top = 50.0 diff --git a/resources/gardens/garden_09.tscn b/resources/gardens/garden_09.tscn index 146d9310..59d622b8 100644 --- a/resources/gardens/garden_09.tscn +++ b/resources/gardens/garden_09.tscn @@ -31,7 +31,6 @@ completed_lesson_text = Color(0.271, 0.282, 0.094, 1) [node name="Background" type="TextureRect" parent="."] unique_name_in_owner = true -modulate = Color(0.42, 0.431, 0.173, 1) layout_mode = 0 offset_left = 350.0 offset_top = 50.0 diff --git a/resources/gardens/garden_10.tscn b/resources/gardens/garden_10.tscn index ed00e23a..4a1bfaea 100644 --- a/resources/gardens/garden_10.tscn +++ b/resources/gardens/garden_10.tscn @@ -31,7 +31,6 @@ completed_lesson_text = Color(0.133, 0.133, 0.369, 1) [node name="Background" type="TextureRect" parent="."] unique_name_in_owner = true -modulate = Color(0.227, 0.227, 0.557, 1) layout_mode = 0 offset_left = 350.0 offset_top = 50.0 diff --git a/resources/gardens/garden_11.tscn b/resources/gardens/garden_11.tscn index a482c67e..7364f67c 100644 --- a/resources/gardens/garden_11.tscn +++ b/resources/gardens/garden_11.tscn @@ -31,7 +31,6 @@ completed_lesson_text = Color(0.055, 0.322, 0.282, 1) [node name="Background" type="TextureRect" parent="."] unique_name_in_owner = true -modulate = Color(0.102, 0.478, 0.416, 1) layout_mode = 0 offset_left = 350.0 offset_top = 50.0 diff --git a/resources/gardens/garden_12.tscn b/resources/gardens/garden_12.tscn index 22428647..37cc6f42 100644 --- a/resources/gardens/garden_12.tscn +++ b/resources/gardens/garden_12.tscn @@ -31,7 +31,6 @@ completed_lesson_text = Color(0.314, 0.102, 0.282, 1) [node name="Background" type="TextureRect" parent="."] unique_name_in_owner = true -modulate = Color(0.478, 0.165, 0.431, 1) layout_mode = 0 offset_left = 350.0 offset_top = 50.0 From af6ae591206d0773efa43d3a9c6c1cbdae0ecab9 Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Thu, 16 Apr 2026 15:57:40 +0200 Subject: [PATCH 026/111] Clean nomenclature --- .../gardens/{Garden_01.png => garden_01.png} | Bin .../{Garden_01.png.import => garden_01.png.import} | 6 +++--- resources/gardens/garden.gd | 9 ++++----- resources/gardens/garden_01.tscn | 2 +- resources/gardens/garden_02.tscn | 2 +- resources/gardens/garden_03.tscn | 2 +- resources/gardens/garden_04.tscn | 2 +- resources/gardens/garden_05.tscn | 2 +- resources/gardens/garden_06.tscn | 2 +- resources/gardens/garden_07.tscn | 2 +- resources/gardens/garden_08.tscn | 2 +- resources/gardens/garden_09.tscn | 2 +- resources/gardens/garden_10.tscn | 2 +- resources/gardens/garden_11.tscn | 2 +- resources/gardens/garden_12.tscn | 2 +- sources/gardens/gardens.gd | 9 +++------ sources/lesson_screen/lesson_button.tscn | 4 ++-- 17 files changed, 24 insertions(+), 28 deletions(-) rename assets/gardens/gardens/{Garden_01.png => garden_01.png} (100%) rename assets/gardens/gardens/{Garden_01.png.import => garden_01.png.import} (76%) diff --git a/assets/gardens/gardens/Garden_01.png b/assets/gardens/gardens/garden_01.png similarity index 100% rename from assets/gardens/gardens/Garden_01.png rename to assets/gardens/gardens/garden_01.png diff --git a/assets/gardens/gardens/Garden_01.png.import b/assets/gardens/gardens/garden_01.png.import similarity index 76% rename from assets/gardens/gardens/Garden_01.png.import rename to assets/gardens/gardens/garden_01.png.import index 7e32acd6..273c8b6b 100644 --- a/assets/gardens/gardens/Garden_01.png.import +++ b/assets/gardens/gardens/garden_01.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://d26hapg1hf8a6" -path="res://.godot/imported/Garden_01.png-f35fe72494711bd31de67c77f2186d29.ctex" +path="res://.godot/imported/garden_01.png-8cec30484a43f71cd614fe156e78443f.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://assets/gardens/gardens/Garden_01.png" -dest_files=["res://.godot/imported/Garden_01.png-f35fe72494711bd31de67c77f2186d29.ctex"] +source_file="res://assets/gardens/gardens/garden_01.png" +dest_files=["res://.godot/imported/garden_01.png-8cec30484a43f71cd614fe156e78443f.ctex"] [params] diff --git a/resources/gardens/garden.gd b/resources/gardens/garden.gd index 83a8a7d4..36e7b99d 100644 --- a/resources/gardens/garden.gd +++ b/resources/gardens/garden.gd @@ -5,7 +5,6 @@ extends Control const BACKGROUND_PATH_MODEL: String = "res://assets/gardens/gardens/Garden_%02d.png" const MAX_LESSONS: int = 5 const PLANT_COUNT: int = 8 - # Maps lesson count → which slot indices to use const SLOT_SELECTION: Dictionary = { 1: [2], @@ -62,8 +61,8 @@ func _configure_slots(lesson_count: int) -> void: slot.set_button_disabled(true) active_buttons.clear() var indices: Array = SLOT_SELECTION.get(lesson_count, []) - for i: int in range(indices.size()): - var slot: LessonButton = all_slots[indices[i]] + for index: int in range(indices.size()): + var slot: LessonButton = all_slots[indices[index]] slot.show() active_buttons.append(slot) @@ -98,8 +97,8 @@ func update_plants_visibility(completed_minigames: int, total_minigames: int) -> elif completed_minigames > 0: visible_count = int(float(completed_minigames) * float(PLANT_COUNT) / float(total_minigames)) visible_count = clampi(visible_count, 1, PLANT_COUNT - 1) - for i: int in range(all_plants.size()): - all_plants[i].visible = i < visible_count + for index: int in range(all_plants.size()): + all_plants[index].visible = index < visible_count func get_button_size() -> Vector2: diff --git a/resources/gardens/garden_01.tscn b/resources/gardens/garden_01.tscn index 07121e28..432ef532 100644 --- a/resources/gardens/garden_01.tscn +++ b/resources/gardens/garden_01.tscn @@ -1,7 +1,7 @@ [gd_scene format=3] [ext_resource type="Script" uid="uid://ch5h4p1o54whq" path="res://resources/gardens/garden.gd" id="1_5owem"] -[ext_resource type="Texture2D" uid="uid://d26hapg1hf8a6" path="res://assets/gardens/gardens/Garden_01.png" id="3_p7iv3"] +[ext_resource type="Texture2D" uid="uid://d26hapg1hf8a6" path="res://assets/gardens/gardens/garden_01.png" id="3_p7iv3"] [ext_resource type="PackedScene" uid="uid://delcgui3v0eek" path="res://sources/lesson_screen/lesson_button.tscn" id="4_epm30"] [ext_resource type="Texture2D" uid="uid://bfqwlmmliem8f" path="res://assets/gardens/jellyfish.png" id="jellyfish_tex"] [ext_resource type="Texture2D" uid="uid://dcekseb1b3ruw" path="res://assets/gardens/plants/garden_plant_01.png" id="plant_01"] diff --git a/resources/gardens/garden_02.tscn b/resources/gardens/garden_02.tscn index 299f7e9f..bfcd3bff 100644 --- a/resources/gardens/garden_02.tscn +++ b/resources/gardens/garden_02.tscn @@ -1,7 +1,7 @@ [gd_scene format=3 uid="uid://btfvuniqgiddp"] [ext_resource type="Script" uid="uid://ch5h4p1o54whq" path="res://resources/gardens/garden.gd" id="1_5owem"] -[ext_resource type="Texture2D" uid="uid://d26hapg1hf8a6" path="res://assets/gardens/gardens/Garden_01.png" id="3_p7iv3"] +[ext_resource type="Texture2D" uid="uid://d26hapg1hf8a6" path="res://assets/gardens/gardens/garden_01.png" id="3_p7iv3"] [ext_resource type="PackedScene" uid="uid://delcgui3v0eek" path="res://sources/lesson_screen/lesson_button.tscn" id="4_epm30"] [ext_resource type="Texture2D" uid="uid://bfqwlmmliem8f" path="res://assets/gardens/jellyfish.png" id="jellyfish_tex"] [ext_resource type="Texture2D" uid="uid://dcekseb1b3ruw" path="res://assets/gardens/plants/garden_plant_01.png" id="plant_01"] diff --git a/resources/gardens/garden_03.tscn b/resources/gardens/garden_03.tscn index ed1dc7df..26c48c31 100644 --- a/resources/gardens/garden_03.tscn +++ b/resources/gardens/garden_03.tscn @@ -1,7 +1,7 @@ [gd_scene format=3] [ext_resource type="Script" uid="uid://ch5h4p1o54whq" path="res://resources/gardens/garden.gd" id="1_5owem"] -[ext_resource type="Texture2D" uid="uid://d26hapg1hf8a6" path="res://assets/gardens/gardens/Garden_01.png" id="3_p7iv3"] +[ext_resource type="Texture2D" uid="uid://d26hapg1hf8a6" path="res://assets/gardens/gardens/garden_01.png" id="3_p7iv3"] [ext_resource type="PackedScene" uid="uid://delcgui3v0eek" path="res://sources/lesson_screen/lesson_button.tscn" id="4_epm30"] [ext_resource type="Texture2D" uid="uid://bfqwlmmliem8f" path="res://assets/gardens/jellyfish.png" id="jellyfish_tex"] [ext_resource type="Texture2D" uid="uid://dcekseb1b3ruw" path="res://assets/gardens/plants/garden_plant_01.png" id="plant_01"] diff --git a/resources/gardens/garden_04.tscn b/resources/gardens/garden_04.tscn index 02d0886a..6e8b2f68 100644 --- a/resources/gardens/garden_04.tscn +++ b/resources/gardens/garden_04.tscn @@ -1,7 +1,7 @@ [gd_scene format=3] [ext_resource type="Script" uid="uid://ch5h4p1o54whq" path="res://resources/gardens/garden.gd" id="1_5owem"] -[ext_resource type="Texture2D" uid="uid://d26hapg1hf8a6" path="res://assets/gardens/gardens/Garden_01.png" id="3_p7iv3"] +[ext_resource type="Texture2D" uid="uid://d26hapg1hf8a6" path="res://assets/gardens/gardens/garden_01.png" id="3_p7iv3"] [ext_resource type="PackedScene" uid="uid://delcgui3v0eek" path="res://sources/lesson_screen/lesson_button.tscn" id="4_epm30"] [ext_resource type="Texture2D" uid="uid://bfqwlmmliem8f" path="res://assets/gardens/jellyfish.png" id="jellyfish_tex"] [ext_resource type="Texture2D" uid="uid://dcekseb1b3ruw" path="res://assets/gardens/plants/garden_plant_01.png" id="plant_01"] diff --git a/resources/gardens/garden_05.tscn b/resources/gardens/garden_05.tscn index ee31a292..4100c743 100644 --- a/resources/gardens/garden_05.tscn +++ b/resources/gardens/garden_05.tscn @@ -1,7 +1,7 @@ [gd_scene format=3] [ext_resource type="Script" uid="uid://ch5h4p1o54whq" path="res://resources/gardens/garden.gd" id="1_5owem"] -[ext_resource type="Texture2D" uid="uid://d26hapg1hf8a6" path="res://assets/gardens/gardens/Garden_01.png" id="3_p7iv3"] +[ext_resource type="Texture2D" uid="uid://d26hapg1hf8a6" path="res://assets/gardens/gardens/garden_01.png" id="3_p7iv3"] [ext_resource type="PackedScene" uid="uid://delcgui3v0eek" path="res://sources/lesson_screen/lesson_button.tscn" id="4_epm30"] [ext_resource type="Texture2D" uid="uid://bfqwlmmliem8f" path="res://assets/gardens/jellyfish.png" id="jellyfish_tex"] [ext_resource type="Texture2D" uid="uid://dcekseb1b3ruw" path="res://assets/gardens/plants/garden_plant_01.png" id="plant_01"] diff --git a/resources/gardens/garden_06.tscn b/resources/gardens/garden_06.tscn index d015cd6c..6b356d6e 100644 --- a/resources/gardens/garden_06.tscn +++ b/resources/gardens/garden_06.tscn @@ -1,7 +1,7 @@ [gd_scene format=3] [ext_resource type="Script" uid="uid://ch5h4p1o54whq" path="res://resources/gardens/garden.gd" id="1_5owem"] -[ext_resource type="Texture2D" uid="uid://d26hapg1hf8a6" path="res://assets/gardens/gardens/Garden_01.png" id="3_p7iv3"] +[ext_resource type="Texture2D" uid="uid://d26hapg1hf8a6" path="res://assets/gardens/gardens/garden_01.png" id="3_p7iv3"] [ext_resource type="PackedScene" uid="uid://delcgui3v0eek" path="res://sources/lesson_screen/lesson_button.tscn" id="4_epm30"] [ext_resource type="Texture2D" uid="uid://bfqwlmmliem8f" path="res://assets/gardens/jellyfish.png" id="jellyfish_tex"] [ext_resource type="Texture2D" uid="uid://dcekseb1b3ruw" path="res://assets/gardens/plants/garden_plant_01.png" id="plant_01"] diff --git a/resources/gardens/garden_07.tscn b/resources/gardens/garden_07.tscn index 37c511e6..22bf95b0 100644 --- a/resources/gardens/garden_07.tscn +++ b/resources/gardens/garden_07.tscn @@ -1,7 +1,7 @@ [gd_scene format=3] [ext_resource type="Script" uid="uid://ch5h4p1o54whq" path="res://resources/gardens/garden.gd" id="1_5owem"] -[ext_resource type="Texture2D" uid="uid://d26hapg1hf8a6" path="res://assets/gardens/gardens/Garden_01.png" id="3_p7iv3"] +[ext_resource type="Texture2D" uid="uid://d26hapg1hf8a6" path="res://assets/gardens/gardens/garden_01.png" id="3_p7iv3"] [ext_resource type="PackedScene" uid="uid://delcgui3v0eek" path="res://sources/lesson_screen/lesson_button.tscn" id="4_epm30"] [ext_resource type="Texture2D" uid="uid://bfqwlmmliem8f" path="res://assets/gardens/jellyfish.png" id="jellyfish_tex"] [ext_resource type="Texture2D" uid="uid://dcekseb1b3ruw" path="res://assets/gardens/plants/garden_plant_01.png" id="plant_01"] diff --git a/resources/gardens/garden_08.tscn b/resources/gardens/garden_08.tscn index a0b791f3..a5dcfb8a 100644 --- a/resources/gardens/garden_08.tscn +++ b/resources/gardens/garden_08.tscn @@ -1,7 +1,7 @@ [gd_scene format=3] [ext_resource type="Script" uid="uid://ch5h4p1o54whq" path="res://resources/gardens/garden.gd" id="1_5owem"] -[ext_resource type="Texture2D" uid="uid://d26hapg1hf8a6" path="res://assets/gardens/gardens/Garden_01.png" id="3_p7iv3"] +[ext_resource type="Texture2D" uid="uid://d26hapg1hf8a6" path="res://assets/gardens/gardens/garden_01.png" id="3_p7iv3"] [ext_resource type="PackedScene" uid="uid://delcgui3v0eek" path="res://sources/lesson_screen/lesson_button.tscn" id="4_epm30"] [ext_resource type="Texture2D" uid="uid://bfqwlmmliem8f" path="res://assets/gardens/jellyfish.png" id="jellyfish_tex"] [ext_resource type="Texture2D" uid="uid://dcekseb1b3ruw" path="res://assets/gardens/plants/garden_plant_01.png" id="plant_01"] diff --git a/resources/gardens/garden_09.tscn b/resources/gardens/garden_09.tscn index 59d622b8..7363fd4b 100644 --- a/resources/gardens/garden_09.tscn +++ b/resources/gardens/garden_09.tscn @@ -1,7 +1,7 @@ [gd_scene format=3] [ext_resource type="Script" uid="uid://ch5h4p1o54whq" path="res://resources/gardens/garden.gd" id="1_5owem"] -[ext_resource type="Texture2D" uid="uid://d26hapg1hf8a6" path="res://assets/gardens/gardens/Garden_01.png" id="3_p7iv3"] +[ext_resource type="Texture2D" uid="uid://d26hapg1hf8a6" path="res://assets/gardens/gardens/garden_01.png" id="3_p7iv3"] [ext_resource type="PackedScene" uid="uid://delcgui3v0eek" path="res://sources/lesson_screen/lesson_button.tscn" id="4_epm30"] [ext_resource type="Texture2D" uid="uid://bfqwlmmliem8f" path="res://assets/gardens/jellyfish.png" id="jellyfish_tex"] [ext_resource type="Texture2D" uid="uid://dcekseb1b3ruw" path="res://assets/gardens/plants/garden_plant_01.png" id="plant_01"] diff --git a/resources/gardens/garden_10.tscn b/resources/gardens/garden_10.tscn index 4a1bfaea..1c6e7946 100644 --- a/resources/gardens/garden_10.tscn +++ b/resources/gardens/garden_10.tscn @@ -1,7 +1,7 @@ [gd_scene format=3] [ext_resource type="Script" uid="uid://ch5h4p1o54whq" path="res://resources/gardens/garden.gd" id="1_5owem"] -[ext_resource type="Texture2D" uid="uid://d26hapg1hf8a6" path="res://assets/gardens/gardens/Garden_01.png" id="3_p7iv3"] +[ext_resource type="Texture2D" uid="uid://d26hapg1hf8a6" path="res://assets/gardens/gardens/garden_01.png" id="3_p7iv3"] [ext_resource type="PackedScene" uid="uid://delcgui3v0eek" path="res://sources/lesson_screen/lesson_button.tscn" id="4_epm30"] [ext_resource type="Texture2D" uid="uid://bfqwlmmliem8f" path="res://assets/gardens/jellyfish.png" id="jellyfish_tex"] [ext_resource type="Texture2D" uid="uid://dcekseb1b3ruw" path="res://assets/gardens/plants/garden_plant_01.png" id="plant_01"] diff --git a/resources/gardens/garden_11.tscn b/resources/gardens/garden_11.tscn index 7364f67c..34488726 100644 --- a/resources/gardens/garden_11.tscn +++ b/resources/gardens/garden_11.tscn @@ -1,7 +1,7 @@ [gd_scene format=3] [ext_resource type="Script" uid="uid://ch5h4p1o54whq" path="res://resources/gardens/garden.gd" id="1_5owem"] -[ext_resource type="Texture2D" uid="uid://d26hapg1hf8a6" path="res://assets/gardens/gardens/Garden_01.png" id="3_p7iv3"] +[ext_resource type="Texture2D" uid="uid://d26hapg1hf8a6" path="res://assets/gardens/gardens/garden_01.png" id="3_p7iv3"] [ext_resource type="PackedScene" uid="uid://delcgui3v0eek" path="res://sources/lesson_screen/lesson_button.tscn" id="4_epm30"] [ext_resource type="Texture2D" uid="uid://bfqwlmmliem8f" path="res://assets/gardens/jellyfish.png" id="jellyfish_tex"] [ext_resource type="Texture2D" uid="uid://dcekseb1b3ruw" path="res://assets/gardens/plants/garden_plant_01.png" id="plant_01"] diff --git a/resources/gardens/garden_12.tscn b/resources/gardens/garden_12.tscn index 37cc6f42..cbc670cf 100644 --- a/resources/gardens/garden_12.tscn +++ b/resources/gardens/garden_12.tscn @@ -1,7 +1,7 @@ [gd_scene format=3] [ext_resource type="Script" uid="uid://ch5h4p1o54whq" path="res://resources/gardens/garden.gd" id="1_5owem"] -[ext_resource type="Texture2D" uid="uid://d26hapg1hf8a6" path="res://assets/gardens/gardens/Garden_01.png" id="3_p7iv3"] +[ext_resource type="Texture2D" uid="uid://d26hapg1hf8a6" path="res://assets/gardens/gardens/garden_01.png" id="3_p7iv3"] [ext_resource type="PackedScene" uid="uid://delcgui3v0eek" path="res://sources/lesson_screen/lesson_button.tscn" id="4_epm30"] [ext_resource type="Texture2D" uid="uid://bfqwlmmliem8f" path="res://assets/gardens/jellyfish.png" id="jellyfish_tex"] [ext_resource type="Texture2D" uid="uid://dcekseb1b3ruw" path="res://assets/gardens/plants/garden_plant_01.png" id="plant_01"] diff --git a/sources/gardens/gardens.gd b/sources/gardens/gardens.gd index 3f3d88f8..083d8dbe 100644 --- a/sources/gardens/gardens.gd +++ b/sources/gardens/gardens.gd @@ -35,6 +35,7 @@ const SLOT_CENTERS: Array[Vector2i] = [ Vector2i(704, 1186), Vector2i(987, 1000), Vector2i(1290, 920), Vector2i(1565, 748), Vector2i(1864, 598) ] + static var transition_data: Dictionary = {} static var cached_gardens_layout: GardensLayout static var cached_layout_session_id: int = -1 @@ -262,7 +263,6 @@ func _handle_transition_sequences(transition_context: Dictionary) -> void: await _play_boss_unlock_sequence(transition_context.pending_boss_gate_lesson as int) - func _play_new_lesson_unlock_sequence() -> void: var max_lesson: int = UserDataManager.student_progression.get_max_unlocked_lesson_index() await get_tree().create_timer(2).timeout @@ -392,7 +392,6 @@ func _play_brain_tutorial() -> void: #region Garden layout helpers - static func _get_lesson_button_half_size() -> Vector2: return Vector2(120, 120) @@ -434,7 +433,6 @@ static func _save_layout_to_cache(layout: GardensLayout, session_id: int, total_ Log.warn("Gardens: Failed to save layout cache at %s: %s" % [cache_path, error_string(error)]) - static func _find_valid_position_on_garden(_garden_color_index: int, tested_position: Vector2, _garden_dimensions: Vector2, _probe_half_size: Vector2 = Vector2.ZERO) -> Vector2: var center: Vector2 = Vector2(float(GARDEN_SIZE) / 2.0, GARDEN_CENTER_Y) var distance: float = tested_position.distance_to(center) @@ -623,8 +621,8 @@ static func _generate_single_garden_layout(garden_index: int, lessons_for_garden static func _get_slot_positions_for_count(lesson_count: int) -> Array[Vector2i]: var indices: Array = Garden.SLOT_SELECTION.get(lesson_count, []) var positions: Array[Vector2i] = [] - for i: int in indices: - positions.append(SLOT_CENTERS[i]) + for index: int in indices: + positions.append(SLOT_CENTERS[index]) return positions #endregion @@ -768,7 +766,6 @@ func _count_completed_minigames(lesson_number: int) -> int: return completed - func _close_minigames_layout() -> void: if not in_minigame_selection: return diff --git a/sources/lesson_screen/lesson_button.tscn b/sources/lesson_screen/lesson_button.tscn index 135aec59..cfee99f0 100644 --- a/sources/lesson_screen/lesson_button.tscn +++ b/sources/lesson_screen/lesson_button.tscn @@ -1,12 +1,12 @@ [gd_scene format=3 uid="uid://delcgui3v0eek"] -[ext_resource type="Texture2D" uid="uid://cxjy5f7oyl8mq" path="res://assets/gardens/buttons/lesson_circle.png" id="lesson_circle"] [ext_resource type="Script" uid="uid://d1gj4en3e7b8b" path="res://sources/lesson_screen/lesson_button.gd" id="4_mbltp"] [ext_resource type="PackedScene" uid="uid://cn2rw06pltyiu" path="res://sources/utils/fx/right.tscn" id="7_rtwam"] +[ext_resource type="Texture2D" uid="uid://cxjy5f7oyl8mq" path="res://assets/gardens/buttons/lesson_circle.png" id="lesson_circle"] [node name="LessonButton" type="TextureButton" unique_id=530361935] -z_index = 1 self_modulate = Color(1, 1, 1, 0) +z_index = 1 offset_right = 300.0 offset_bottom = 300.0 pivot_offset = Vector2(150, 150) From 5fc11072e51f46af5cf3343fd87f5f54bc9e9642 Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Thu, 16 Apr 2026 16:12:26 +0200 Subject: [PATCH 027/111] Small fixes --- sources/gardens/gardens.gd | 3 +-- sources/lesson_screen/lesson_button.gd | 10 +++++----- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/sources/gardens/gardens.gd b/sources/gardens/gardens.gd index 083d8dbe..ecf30802 100644 --- a/sources/gardens/gardens.gd +++ b/sources/gardens/gardens.gd @@ -330,8 +330,7 @@ func _ready() -> void: _load_lessons_from_database() var lesson_count: int = lessons.size() if lesson_count < MIN_LESSONS or lesson_count > MAX_LESSONS: - Log.error("Gardens: Lesson count must be between %d and %d, got %d" % [MIN_LESSONS, MAX_LESSONS, lesson_count]) - assert(false, "Lesson count must be between %d and %d, got %d" % [MIN_LESSONS, MAX_LESSONS, lesson_count]) + Log.alert("Gardens: Lesson count must be between %d and %d, got %d" % [MIN_LESSONS, MAX_LESSONS, lesson_count]) return if scroll_end_spacer: scroll_end_base_width = scroll_end_spacer.custom_minimum_size.x diff --git a/sources/lesson_screen/lesson_button.gd b/sources/lesson_screen/lesson_button.gd index b7babf6c..9593533b 100644 --- a/sources/lesson_screen/lesson_button.gd +++ b/sources/lesson_screen/lesson_button.gd @@ -9,16 +9,16 @@ const UNLOCKED_BORDER_COLOR: Color = Color("fbb03b") const DEFAULT_COMPLETED_FILL_COLOR: Color = Color("9be3ea") const DEFAULT_COMPLETED_LABEL_COLOR: Color = Color("0a555b") -var unlocked_fill_color: Color = DEFAULT_UNLOCKED_FILL_COLOR -var unlocked_label_color: Color = DEFAULT_UNLOCKED_LABEL_COLOR -var completed_fill_color: Color = DEFAULT_COMPLETED_FILL_COLOR -var completed_label_color: Color = DEFAULT_COMPLETED_LABEL_COLOR - @export var text: String: set = _set_text @export var completed: bool = false: set = _set_completed +var unlocked_fill_color: Color = DEFAULT_UNLOCKED_FILL_COLOR +var unlocked_label_color: Color = DEFAULT_UNLOCKED_LABEL_COLOR +var completed_fill_color: Color = DEFAULT_COMPLETED_FILL_COLOR +var completed_label_color: Color = DEFAULT_COMPLETED_LABEL_COLOR + @onready var center: TextureRect = %Center @onready var border: TextureRect = %Border @onready var label: Label = %Label From d3d5565b2a3a0715e464fce6627f89d0ce5506a0 Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Thu, 16 Apr 2026 16:52:50 +0200 Subject: [PATCH 028/111] Debug unit test account creation language selection --- tests/integration_tests/test_account_lifecycle.gd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/integration_tests/test_account_lifecycle.gd b/tests/integration_tests/test_account_lifecycle.gd index ada7f400..acb4afad 100644 --- a/tests/integration_tests/test_account_lifecycle.gd +++ b/tests/integration_tests/test_account_lifecycle.gd @@ -88,7 +88,7 @@ func test_full_account_creation_login_and_deletion() -> void: register_data.education_method = TeacherSettings.EducationMethod.Complete register_data.email = _test_email register_data.password = TEST_PASSWORD - register_data.language = "fr" + register_data.language = "fr_FR" # Device 1 — two students var student_alice: StudentData = StudentData.new() From 9413c1fd894a37a7c452450b85e9d311d089ce99 Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Thu, 16 Apr 2026 16:57:10 +0200 Subject: [PATCH 029/111] reload base_step scene --- sources/menus/register/steps/base_step.tscn | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/sources/menus/register/steps/base_step.tscn b/sources/menus/register/steps/base_step.tscn index d37bf32e..e95d24a8 100644 --- a/sources/menus/register/steps/base_step.tscn +++ b/sources/menus/register/steps/base_step.tscn @@ -2,7 +2,7 @@ [ext_resource type="Script" uid="uid://ddg138yuagx4i" path="res://sources/menus/register/steps/base_step.gd" id="1_02ocl"] [ext_resource type="Texture2D" uid="uid://d1tsqdom1rra1" path="res://assets/theme/arrow_back.svg" id="2_41tvo"] -[ext_resource type="Script" uid="uid://ddmyah1o42hwp" path="res://addons/godot-form-validator/form_validator.gd" id="2_nw61e"] +[ext_resource type="Script" uid="uid://bu80rel3g62k2" path="res://addons/godot-form-validator/form_validator.gd" id="2_nw61e"] [ext_resource type="Texture2D" uid="uid://doql1x228r1bv" path="res://assets/look_and_learn/arrow.svg" id="3_17uns"] [ext_resource type="Script" uid="uid://b11owjubqe3iw" path="res://sources/utils/binder/form_binder.gd" id="3_mk32l"] [ext_resource type="Texture2D" uid="uid://d3rhl050u0ahl" path="res://assets/menus/login/password_background.png" id="4_h32tf"] @@ -120,7 +120,6 @@ grow_horizontal = 2 grow_vertical = 2 mouse_filter = 2 script = ExtResource("2_nw61e") -validation_method = 0 [node name="FormBinder" type="Control" parent="FormValidator" unique_id=207335793] unique_name_in_owner = true From e169f066ac97bc5480509002f2aa177c78f2aca2 Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Fri, 17 Apr 2026 09:35:06 +0200 Subject: [PATCH 030/111] Clean github checks --- .github/scripts/check_gd_nomenclature.py | 328 +++++++++++++++++------ .github/workflows/gdscript-naming.yml | 2 +- 2 files changed, 244 insertions(+), 86 deletions(-) diff --git a/.github/scripts/check_gd_nomenclature.py b/.github/scripts/check_gd_nomenclature.py index 1f7f7c53..a1c3cb4a 100644 --- a/.github/scripts/check_gd_nomenclature.py +++ b/.github/scripts/check_gd_nomenclature.py @@ -1,6 +1,7 @@ import os import re import sys +from collections import defaultdict, Counter def split_params(param_string: str): @@ -46,7 +47,7 @@ def split_params(param_string: str): current = [] else: current.append(char) - + if stack: raise ValueError("unbalance in delimiter") if in_quote: @@ -56,58 +57,128 @@ def split_params(param_string: str): params = [p for p in params if p] return params + EXCLUDED_DIRS = {"addons", ".git", ".github"} EXCLUDED_FILES = {os.path.normpath("script_templates/Node/default.gd")} -issues = [] +issues: list = [] + +# ─── Messages ──────────────────────────────────────────────────────────────── +# Structural issue messages. Use {key} for context-specific values. +# Naming issues are rendered dynamically (see format_message / SUGGESTION_FN). + MESSAGES = { - 'class': 'is a class name and should be in PascalCase', - 'function': 'is a function name and should be in snake_case', - 'variable': 'is a variable name and should be in snake_case', - 'constant': 'is a constant name and should be in UPPER_SNAKE_CASE', - 'signal': 'is a signal name and should be in snake_case', - 'annotation_order': 'annotations must be on the first line and include only \@tool, \@icon or \@static_unload', - 'class_position': 'class_name must appear after annotations (if any)', - 'extends_position': 'extends must appear after annotation and class_name', - 'extends_missing': 'extends is required and must follow annotation and class_name', - 'func_blank': 'functions must be preceded by exactly two empty lines (or only one if preceded by a #region comment)', - 'signal_position': 'signals must come right after extends', - 'signal_format': 'signals must end with ()', - 'signal_blank': 'signals must not be separated by empty lines', - 'enum_position': 'enums must come after signals and be grouped together', - 'enum_format': "enum declaration should be 'enum Name {'", - 'enum_member_blank': 'enum members must not be separated by empty lines', - 'enum_member_indent': 'enum members must be indented with a single tab', - 'enum_no_close': 'enum declaration is missing a closing }', - 'enum_blank': 'enums must be preceded by one empty line and must not be separated by empty lines', - 'const_position': 'constants must come after enums and be grouped together', - 'const_blank': 'constants must be preceded by one empty line and must not be separated by empty lines', - 'static_position': 'static variables must come after constants and be grouped together', - 'static_blank': 'static variables must be preceded by one empty line and must not be separated by empty lines', - 'export_position': 'export variables must come after static variables and be grouped together', - 'export_blank': 'export variables must be preceded by one empty line and must not be separated by empty lines', - 'var_position': 'variables must come after export variables and be grouped together', - 'var_blank': 'variables must be preceded by one empty line and must not be separated by empty lines', - 'onready_position': '@onready variables must come after other variables and be grouped together', - 'onready_blank': '@onready variables must be preceded by one empty line and must not be separated by empty lines', + # File/header structure + 'annotation_order': "annotation not allowed here: '{found}' — only @tool, @icon or @static_unload are allowed at the top of the file", + 'class_position': "class_name must appear right after annotations (if any)", + 'extends_position': "extends must appear after annotations and class_name", + 'extends_missing': "extends is missing — add 'extends BaseClass' (or 'extends RefCounted' for base classes)", + + # Function spacing + 'func_blank': "expected 2 blank lines before function (found {found})", + + # Signals + 'signal_position': "signal found after {after} — expected order: signal > enum > const > static var > @export > var > @onready", + 'signal_format': "signal must declare parameters with () — found: '{found}'", + 'signal_blank_extra': "remove blank line between signal declarations — signals must be grouped together", + + # Enums + 'enum_position': "enum found after {after} — expected order: signal > enum > const > static var > @export > var > @onready", + 'enum_format': "enum declaration should be 'enum Name {{' — found: '{found}'", + 'enum_member_blank': "remove blank line between enum members", + 'enum_member_indent': "enum member must be indented with a single tab — found: '{found}'", + 'enum_no_close': "enum declaration is missing a closing '}'", + 'enum_blank_missing': "missing blank line before the enum section", + 'enum_blank_extra': "remove blank line between enum declarations — enums must be grouped together", + + # Constants + 'const_position': "const found after {after} — expected order: signal > enum > const > static var > @export > var > @onready", + 'const_blank_missing': "missing blank line before the const section", + 'const_blank_extra': "remove blank line between const declarations — constants must be grouped together", + + # Static variables + 'static_position': "static var found after {after} — expected order: signal > enum > const > static var > @export > var > @onready", + 'static_blank_missing': "missing blank line before the static var section", + 'static_blank_extra': "remove blank line between static var declarations — static variables must be grouped together", + + # Export variables + 'export_position': "@export found after {after} — expected order: signal > enum > const > static var > @export > var > @onready", + 'export_blank_missing': "missing blank line before the @export section", + 'export_blank_extra': "remove blank line between @export declarations — export variables must be grouped together", + + # Regular variables + 'var_position': "var found after {after} — expected order: signal > enum > const > static var > @export > var > @onready", + 'var_blank_missing': "missing blank line before the var section", + 'var_blank_extra': "remove blank line between var declarations — variables must be grouped together", + + # @onready variables + 'onready_position': "@onready var found after {after} — expected order: signal > enum > const > static var > @export > var > @onready", + 'onready_blank_missing': "missing blank line before the @onready section", + 'onready_blank_extra': "remove blank line between @onready declarations — @onready variables must be grouped together", } -# Naming conventions +# ─── Naming conventions ─────────────────────────────────────────────────────── + PASCAL_CASE = re.compile(r"^[A-Z][A-Za-z0-9]*$") SNAKE_CASE = re.compile(r"^_?[a-z][a-z0-9_]*$") UPPER_SNAKE_CASE = re.compile(r"^_?[A-Z][A-Z0-9_]*$") REGION_RE = re.compile(r"#\s*(region|endregion)\b", re.IGNORECASE) + +def _to_snake_case(name: str) -> str: + prefix = '_' if name.startswith('_') else '' + core = name.lstrip('_') + s = re.sub(r'([a-z0-9])([A-Z])', r'\1_\2', core) + s = re.sub(r'([A-Z]+)([A-Z][a-z])', r'\1_\2', s) + return prefix + s.lower() + + +def _to_pascal_case(name: str) -> str: + prefix = '_' if name.startswith('_') else '' + core = name.lstrip('_') + return prefix + ''.join(w.capitalize() for w in re.split(r'[_\s]+', core) if w) + + +def _to_upper_snake_case(name: str) -> str: + prefix = '_' if name.startswith('_') else '' + core = name.lstrip('_') + s = re.sub(r'([a-z0-9])([A-Z])', r'\1_\2', core) + s = re.sub(r'([A-Z]+)([A-Z][a-z])', r'\1_\2', s) + return prefix + s.upper() + + +CONVENTION_NAMES: dict[str, str] = { + 'class': 'PascalCase', + 'function': 'snake_case', + 'variable': 'snake_case', + 'constant': 'UPPER_SNAKE_CASE', + 'signal': 'snake_case', +} + +SUGGESTION_FN: dict = { + 'class': _to_pascal_case, + 'function': _to_snake_case, + 'variable': _to_snake_case, + 'constant': _to_upper_snake_case, + 'signal': _to_snake_case, +} + +NAMING_KINDS = frozenset({'class', 'function', 'variable', 'constant', 'signal'}) + +# ─── Naming check ───────────────────────────────────────────────────────────── + def check_naming(path: str, lines: list[str]): for idx, line in enumerate(lines, 1): stripped = line.strip() if stripped.startswith('#') or stripped.startswith('@warning_ignore(') or not stripped: continue + match_class = re.match(r"class_name\s+([A-Za-z0-9_]+)", stripped) if match_class: name = match_class.group(1) if not PASCAL_CASE.match(name): issues.append((path, idx, 'class', name)) + match_func = re.match(r"(?:static\s+)?func\s+([A-Za-z0-9_]+)\s*(\([^)]*\))?", stripped) if match_func: name = match_func.group(1) @@ -120,51 +191,62 @@ def check_naming(path: str, lines: list[str]): param_name = param.split(':')[0].split('=')[0].strip() if param_name and not SNAKE_CASE.match(param_name): issues.append((path, idx, 'variable', param_name)) - match_export = re.match(r"(?:@export\s+)?var\s+([A-Za-z0-9_]+)", stripped) - if match_export: - name = match_export.group(1) + + # Match variable declarations with any annotation/modifier prefix. + # Handles: var, static var, @export var, @export_range(...) var, + # @export_multiline var, @onready var, etc. + # Does NOT match annotation-only lines like @export_category("Difficulty"). + match_var = re.match(r"(?:(?:static|@\w+(?:\([^)]*\))?)\s+)*var\s+([A-Za-z0-9_]+)", stripped) + if match_var: + name = match_var.group(1) if not SNAKE_CASE.match(name): issues.append((path, idx, 'variable', name)) + match_const = re.match(r"const\s+([A-Za-z0-9_]+)", stripped) if match_const: name = match_const.group(1) if not UPPER_SNAKE_CASE.match(name): issues.append((path, idx, 'constant', name)) + match_signal = re.match(r"signal\s+([A-Za-z0-9_]+)", stripped) if match_signal: name = match_signal.group(1) if not SNAKE_CASE.match(name): issues.append((path, idx, 'signal', name)) + match_for = re.match(r"for\s+([A-Za-z0-9_]+)(?:\s*:\s*[^\s]+)?\s+in\b", stripped) if match_for: name = match_for.group(1) if not SNAKE_CASE.match(name): issues.append((path, idx, 'variable', name)) -# Content order + +# ─── Content order check ────────────────────────────────────────────────────── + ANNOTATION_LINE_RE = re.compile( r"^(?:@(tool|icon|static_unload)(?:\([^\n]*\))?)(?:,\s*@(tool|icon|static_unload)(?:\([^\n]*\))?)*$" ) ALLOWED_ANNOTATION_RE = re.compile(r"@(tool|icon|static_unload)\b") + def check_content_order(path: str, lines: list[str]): content = [ (line.rstrip('\n'), idx) for idx, line in enumerate(lines, 1) - if not line.startswith(' ') # Line is not indented + if not line.startswith(' ') # Line is not indented (tab character) and not line.lstrip().startswith('#') and not line.lstrip().startswith('@warning_ignore(') ] idx = 0 n = len(content) - # 1) annotations + # 1) Annotations (@tool / @icon / @static_unload must be first) if idx < n and ANNOTATION_LINE_RE.fullmatch(content[idx][0].strip()): idx += 1 else: for j in range(idx, n): if ALLOWED_ANNOTATION_RE.search(content[j][0]): - issues.append((path, content[j][1], 'annotation_order', content[j][0].strip())) + issues.append((path, content[j][1], 'annotation_order', {'found': content[j][0].strip()})) break # 2) class_name (optional) @@ -176,24 +258,27 @@ def check_content_order(path: str, lines: list[str]): idx += 1 break - # 3) extends (required) + # 3) extends (recommended; missing is flagged but does not block ordering checks) extends_pos = None for j in range(idx, n): if content[j][0].strip().startswith('extends'): extends_pos = j break + if extends_pos is None: issues.append((path, 0, 'extends_missing', 'extends')) - return - if extends_pos != idx: - issues.append((path, content[extends_pos][1], 'extends_position', 'extends')) - idx = extends_pos + 1 + # Don't return — continue ordering checks from current position + prev_token: str = content[idx - 1][0].strip() if idx > 0 else '' + else: + if extends_pos != idx: + issues.append((path, content[extends_pos][1], 'extends_position', 'extends')) + idx = extends_pos + 1 + prev_token = content[extends_pos][0].strip() order = ['signal', 'enum', 'const', 'static var', '@export', 'var', '@onready var'] order_index = {name: i for i, name in enumerate(order)} seen: set[str] = set() current_order = -1 - prev_token: str | None = content[extends_pos][0].strip() j = idx while j < n: line, line_no = content[j] @@ -208,27 +293,27 @@ def check_content_order(path: str, lines: list[str]): if stripped.startswith('signal'): token = 'signal' if not re.fullmatch(r"signal\s+\w+\([^)]*\)", stripped): - issues.append((path, line_no, 'signal_format', stripped)) + issues.append((path, line_no, 'signal_format', {'found': stripped})) if 'signal' in seen and prev_token == '': - issues.append((path, content[j - 1][1], 'signal_blank', 'signal')) + issues.append((path, content[j - 1][1], 'signal_blank_extra', 'signal')) seen.add('signal') elif stripped.startswith('enum'): token = 'enum' if not re.fullmatch(r"enum\s+\w+\s*{", stripped): - issues.append((path, line_no, 'enum_format', stripped)) + issues.append((path, line_no, 'enum_format', {'found': stripped})) if 'enum' not in seen: if prev_token != '': - issues.append((path, line_no, 'enum_blank', 'enum')) + issues.append((path, line_no, 'enum_blank_missing', 'enum')) else: if prev_token != '}' and prev_token != ']': - issues.append((path, line_no, 'enum_blank', 'enum')) + issues.append((path, line_no, 'enum_blank_extra', 'enum')) k = j + 1 while k < n and content[k][0].strip() != '}': member, m_line_no = content[k] if member.strip() == '': issues.append((path, m_line_no, 'enum_member_blank', 'enum')) if not member.startswith('\t') or member.startswith('\t\t'): - issues.append((path, m_line_no, 'enum_member_indent', member.strip())) + issues.append((path, m_line_no, 'enum_member_indent', {'found': member.strip()})) k += 1 if k >= n: issues.append((path, line_no, 'enum_no_close', 'enum')) @@ -238,7 +323,8 @@ def check_content_order(path: str, lines: list[str]): seen.add('enum') curr_order = order_index['enum'] if curr_order < current_order: - issues.append((path, line_no, 'enum_position', 'enum')) + after_token = order[current_order] + issues.append((path, line_no, 'enum_position', {'after': after_token})) else: current_order = max(current_order, curr_order) j += 1 @@ -247,63 +333,65 @@ def check_content_order(path: str, lines: list[str]): token = 'const' if 'const' not in seen: if prev_token != '': - issues.append((path, line_no, 'const_blank', 'const')) + issues.append((path, line_no, 'const_blank_missing', 'const')) else: if prev_token != 'const' and prev_token != '}' and prev_token != ']': - issues.append((path, line_no, 'const_blank', 'const')) + issues.append((path, line_no, 'const_blank_extra', 'const')) seen.add('const') elif stripped.startswith('static var '): token = 'static var' if 'static var' not in seen: if prev_token != '': - issues.append((path, line_no, 'static_blank', 'static var')) + issues.append((path, line_no, 'static_blank_missing', 'static var')) else: if prev_token != 'static var' and prev_token != '}' and prev_token != ']': - issues.append((path, line_no, 'static_blank', 'static var')) + issues.append((path, line_no, 'static_blank_extra', 'static var')) seen.add('static var') elif stripped.startswith('@export'): token = '@export' if '@export' not in seen: if prev_token != '': - issues.append((path, line_no, 'export_blank', '@export')) + issues.append((path, line_no, 'export_blank_missing', '@export')) else: if prev_token != '@export' and prev_token != '}' and prev_token != ']': - issues.append((path, line_no, 'export_blank', '@export')) + issues.append((path, line_no, 'export_blank_extra', '@export')) seen.add('@export') elif stripped.startswith('var '): token = 'var' if 'var' not in seen: if prev_token != '': - issues.append((path, line_no, 'var_blank', 'var')) + issues.append((path, line_no, 'var_blank_missing', 'var')) else: if prev_token != 'var' and prev_token != '}' and prev_token != ']': - issues.append((path, line_no, 'var_blank', 'var')) + issues.append((path, line_no, 'var_blank_extra', 'var')) seen.add('var') elif stripped.startswith('@onready var '): token = '@onready var' if '@onready var' not in seen: if prev_token != '': - issues.append((path, line_no, 'onready_blank', '@onready var')) + issues.append((path, line_no, 'onready_blank_missing', '@onready var')) else: if prev_token != '@onready var' and prev_token != '}' and prev_token != ']': - issues.append((path, line_no, 'onready_blank', '@onready var')) + issues.append((path, line_no, 'onready_blank_extra', '@onready var')) seen.add('@onready var') else: prev_token = stripped j += 1 continue + curr_order = order_index[token] key_map = { - 'signal': 'signal_position', - 'enum': 'enum_position', - 'const': 'const_position', - 'static var': 'static_position', - '@export': 'export_position', - 'var': 'var_position', + 'signal': 'signal_position', + 'enum': 'enum_position', + 'const': 'const_position', + 'static var': 'static_position', + '@export': 'export_position', + 'var': 'var_position', '@onready var': 'onready_position', } if curr_order < current_order: - issues.append((path, line_no, key_map[token], token)) + after_token = order[current_order] + issues.append((path, line_no, key_map[token], {'after': after_token})) else: current_order = max(current_order, curr_order) @@ -311,7 +399,8 @@ def check_content_order(path: str, lines: list[str]): j += 1 -# Spacing for functions +# ─── Function spacing check ─────────────────────────────────────────────────── + def check_func_spacing(path: str): with open(path, 'r', encoding='utf-8') as file: lines = file.readlines() @@ -348,14 +437,15 @@ def check_func_spacing(path: str): region_above = test_index >= 0 and REGION_RE.match(lines[test_index].lstrip()) if region_above: if blank_count > 1: - issues.append((path, idx + 1, 'func_blank', 'func')) + issues.append((path, idx + 1, 'func_blank', {'found': blank_count})) continue elif blank_count != 2: if not (blank_count == 1 and test_index >= 0 and lines[test_index].lstrip().startswith('#region')): - issues.append((path, idx + 1, 'func_blank', 'func')) + issues.append((path, idx + 1, 'func_blank', {'found': blank_count})) -# Main function +# ─── Main ───────────────────────────────────────────────────────────────────── + for root, dirs, files in os.walk('.', topdown=True): rel_root = os.path.relpath(root, '.') if any(rel_root == excluded or rel_root.startswith(f"{excluded}{os.sep}") for excluded in EXCLUDED_DIRS): @@ -378,15 +468,83 @@ for root, dirs, files in os.walk('.', topdown=True): check_content_order(path, lines) check_func_spacing(path) -if issues: - print("### \u274c GDScript Naming Convention Check Failed\n") - print(f"The project must follow Godot GDScript naming conventions.\nTotal issues: {len(issues)}\n") - for path, idx, kind, name in issues: - if kind == 'error': - message = name - else: - message = f"'{name}' {MESSAGES[kind]}" - print(f"- `{path}:{idx}` {message}") - sys.exit(1) -else: - print("\u2705 All GDScript files follow the naming conventions.") + +# ─── Output ─────────────────────────────────────────────────────────────────── + +ORDERING_KINDS = frozenset({ + 'annotation_order', 'class_position', 'extends_position', 'extends_missing', + 'signal_position', 'enum_position', 'const_position', 'static_position', + 'export_position', 'var_position', 'onready_position', +}) +FORMATTING_KINDS = frozenset({ + 'func_blank', + 'signal_format', 'signal_blank_extra', + 'enum_format', 'enum_blank_missing', 'enum_blank_extra', + 'enum_member_blank', 'enum_member_indent', 'enum_no_close', + 'const_blank_missing', 'const_blank_extra', + 'static_blank_missing', 'static_blank_extra', + 'export_blank_missing', 'export_blank_extra', + 'var_blank_missing', 'var_blank_extra', + 'onready_blank_missing', 'onready_blank_extra', +}) + + +def categorize(kind: str) -> str: + if kind in NAMING_KINDS: + return 'naming' + if kind in ORDERING_KINDS: + return 'ordering' + if kind in FORMATTING_KINDS: + return 'formatting' + return 'other' + + +def format_message(kind: str, data) -> str: + if kind in NAMING_KINDS: + suggestion = SUGGESTION_FN[kind](data) + conv = CONVENTION_NAMES[kind] + return f"'{data}' should be '{suggestion}' ({kind}s must be {conv})" + if kind == 'error': + return str(data) + template = MESSAGES.get(kind, kind) + if isinstance(data, dict): + return template.format(**data) + return template + + +if not issues: + print("✅ All GDScript files follow the naming conventions.") + sys.exit(0) + +# Group issues by file, sort by line number within each file +by_file: dict = defaultdict(list) +counts: Counter = Counter() +for path, line_no, kind, data in issues: + by_file[path].append((line_no, kind, data)) + counts[categorize(kind)] += 1 + +total = len(issues) +file_count = len(by_file) + +summary_parts = [] +for cat in ('naming', 'ordering', 'formatting', 'other'): + if counts[cat]: + summary_parts.append(f"{counts[cat]} {cat}") +summary = ', '.join(summary_parts) + +print(f"### ❌ GDScript Naming Convention Check Failed\n") +print(f"**{total} issue{'s' if total != 1 else ''}** in {file_count} file{'s' if file_count != 1 else ''} ({summary})\n") + +for fpath in sorted(by_file): + file_issues = sorted(by_file[fpath], key=lambda x: x[0]) + count = len(file_issues) + print("
") + print(f"{fpath} — {count} issue{'s' if count != 1 else ''}\n") + print("| Line | Issue |") + print("|------|-------|") + for line_no, kind, data in file_issues: + msg = format_message(kind, data) + print(f"| {line_no} | {msg} |") + print("\n
\n") + +sys.exit(1) diff --git a/.github/workflows/gdscript-naming.yml b/.github/workflows/gdscript-naming.yml index d6dbe41a..60250ffb 100644 --- a/.github/workflows/gdscript-naming.yml +++ b/.github/workflows/gdscript-naming.yml @@ -10,7 +10,7 @@ jobs: permissions: pull-requests: write steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Run GDScript naming convention check id: naming run: | From c6f7ef833ddc845e9a27a34b0bb644a9e51e2a24 Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Fri, 17 Apr 2026 10:06:46 +0200 Subject: [PATCH 031/111] Cleaning --- .github/scripts/check_gd_nomenclature.py | 94 ++++++++++++++++--- kalulu_localization.csv | 2 +- resources/gardens/garden.gd | 2 +- resources/gardens/garden_layout.gd | 8 +- resources/user/student_data.gd | 8 +- resources/user/student_progression.gd | 74 +++++++-------- resources/user/teacher_settings.gd | 8 +- sources/gardens/gardens.gd | 22 ++--- sources/language_tool/gp_list_element.gd | 12 ++- sources/language_tool/lesson_exercises.gd | 2 +- sources/menus/register/register.gd | 4 +- .../menus/register/steps/account_type_step.gd | 4 +- sources/menus/register/steps/recap_step.gd | 4 +- .../register/steps/teacher/method_step.gd | 4 +- .../register/steps/teacher/method_step.tscn | 8 +- sources/menus/settings/lesson_unlock.gd | 74 +++++++-------- sources/menus/settings/lesson_unlocks.gd | 2 +- sources/minigames/base/base_minigame.gd | 74 +++++++++------ sources/minigames/boss/boss_minigame.gd | 12 +-- sources/minigames/frog/frog_minigame.gd | 2 +- sources/minigames/jellyfish/jellyfish.gd | 12 +-- sources/minigames/monkeys/monkeys_minigame.gd | 12 +-- sources/minigames/parakeets/parakeet.gd | 10 +- .../minigames/parakeets/parakeets_minigame.gd | 48 +++++----- sources/minigames/turtles/turtle.gd | 8 +- sources/utils/autoloads/music_manager.gd | 6 +- .../autoloads/user_database_synchronizer.gd | 94 +++++++++---------- .../test_account_lifecycle.gd | 20 ++-- tests/unit_tests/test_student_data.gd | 6 +- 29 files changed, 361 insertions(+), 275 deletions(-) diff --git a/.github/scripts/check_gd_nomenclature.py b/.github/scripts/check_gd_nomenclature.py index a1c3cb4a..68564422 100644 --- a/.github/scripts/check_gd_nomenclature.py +++ b/.github/scripts/check_gd_nomenclature.py @@ -136,7 +136,11 @@ def _to_snake_case(name: str) -> str: def _to_pascal_case(name: str) -> str: prefix = '_' if name.startswith('_') else '' core = name.lstrip('_') - return prefix + ''.join(w.capitalize() for w in re.split(r'[_\s]+', core) if w) + # Split on camelCase boundaries first, then on underscores/spaces + # e.g. 'myBadEnum' → 'my_Bad_Enum' → 'MyBadEnum' + snake = re.sub(r'([a-z0-9])([A-Z])', r'\1_\2', core) + snake = re.sub(r'([A-Z]+)([A-Z][a-z])', r'\1_\2', snake) + return prefix + ''.join(w.capitalize() for w in re.split(r'[_\s]+', snake) if w) def _to_upper_snake_case(name: str) -> str: @@ -148,31 +152,63 @@ def _to_upper_snake_case(name: str) -> str: CONVENTION_NAMES: dict[str, str] = { - 'class': 'PascalCase', - 'function': 'snake_case', - 'variable': 'snake_case', - 'constant': 'UPPER_SNAKE_CASE', - 'signal': 'snake_case', + 'class': 'PascalCase', + 'enum_name': 'PascalCase', + 'enum_member': 'UPPER_SNAKE_CASE', + 'function': 'snake_case', + 'variable': 'snake_case', + 'constant': 'UPPER_SNAKE_CASE', + 'signal': 'snake_case', } SUGGESTION_FN: dict = { - 'class': _to_pascal_case, - 'function': _to_snake_case, - 'variable': _to_snake_case, - 'constant': _to_upper_snake_case, - 'signal': _to_snake_case, + 'class': _to_pascal_case, + 'enum_name': _to_pascal_case, + 'enum_member': _to_upper_snake_case, + 'function': _to_snake_case, + 'variable': _to_snake_case, + 'constant': _to_upper_snake_case, + 'signal': _to_snake_case, } -NAMING_KINDS = frozenset({'class', 'function', 'variable', 'constant', 'signal'}) +NAMING_KINDS = frozenset({'class', 'enum_name', 'enum_member', 'function', 'variable', 'constant', 'signal'}) # ─── Naming check ───────────────────────────────────────────────────────────── +def _check_enum_member(path: str, idx: int, name: str) -> None: + """Flag a single enum member name if it is not UPPER_SNAKE_CASE.""" + if name and not UPPER_SNAKE_CASE.match(name): + issues.append((path, idx, 'enum_member', name)) + + def check_naming(path: str, lines: list[str]): + in_enum = False # True while scanning the body of a multi-line enum + for idx, line in enumerate(lines, 1): stripped = line.strip() if stripped.startswith('#') or stripped.startswith('@warning_ignore(') or not stripped: continue + # ── Enum-body lines ──────────────────────────────────────────────────── + if in_enum: + close = stripped.find('}') + if close != -1: + in_enum = False + # Any identifiers before the closing brace on this line + before = stripped[:close] + for part in before.split(','): + m = re.match(r"\s*([A-Za-z0-9_]+)", part) + if m: + _check_enum_member(path, idx, m.group(1)) + else: + # One (or more) members on this line: "NAME," or "NAME = val," + for part in stripped.split(','): + m = re.match(r"\s*([A-Za-z0-9_]+)", part) + if m: + _check_enum_member(path, idx, m.group(1)) + continue + # ── End enum-body ────────────────────────────────────────────────────── + match_class = re.match(r"class_name\s+([A-Za-z0-9_]+)", stripped) if match_class: name = match_class.group(1) @@ -208,6 +244,26 @@ def check_naming(path: str, lines: list[str]): if not UPPER_SNAKE_CASE.match(name): issues.append((path, idx, 'constant', name)) + match_enum = re.match(r"enum\s+([A-Za-z0-9_]+)", stripped) + if match_enum: + name = match_enum.group(1) + if not PASCAL_CASE.match(name): + issues.append((path, idx, 'enum_name', name)) + # Determine whether the enum body is inline or multi-line + brace = stripped.find('{') + if brace != -1: + rest = stripped[brace + 1:] + close = rest.find('}') + if close != -1: + # Inline enum — check members immediately + for part in rest[:close].split(','): + m = re.match(r"\s*([A-Za-z0-9_]+)", part) + if m: + _check_enum_member(path, idx, m.group(1)) + else: + # Body continues on following lines + in_enum = True + match_signal = re.match(r"signal\s+([A-Za-z0-9_]+)", stripped) if match_signal: name = match_signal.group(1) @@ -499,11 +555,23 @@ def categorize(kind: str) -> str: return 'other' +_KIND_LABEL: dict[str, str] = { + 'class': 'class names', + 'enum_name': 'enum names', + 'enum_member': 'enum member names', + 'function': 'function names', + 'variable': 'variable names', + 'constant': 'constant names', + 'signal': 'signal names', +} + + def format_message(kind: str, data) -> str: if kind in NAMING_KINDS: suggestion = SUGGESTION_FN[kind](data) conv = CONVENTION_NAMES[kind] - return f"'{data}' should be '{suggestion}' ({kind}s must be {conv})" + label = _KIND_LABEL.get(kind, f"{kind}s") + return f"'{data}' should be '{suggestion}' ({label} must be {conv})" if kind == 'error': return str(data) template = MESSAGES.get(kind, kind) diff --git a/kalulu_localization.csv b/kalulu_localization.csv index 95412fcc..4c8fd803 100644 --- a/kalulu_localization.csv +++ b/kalulu_localization.csv @@ -404,7 +404,7 @@ VALIDATE,Confirmer,Confirmar,Confirmar,Conferma SUMMARY_EMAIL,Adresse email : {mail},Correo electrónico: {mail},Endereço de e-mail : {mail},Indirizzo email: {mail} SUMMARY_TYPE,Type de compte : {type},Tipo de cuenta: {type},Tipo de conta : {type},Tipo di account: {type} SUMMARY_METHOD,Méthode d'éducation : {method},Método de enseñanza: {method},Método educacional : {method},Metodo educativo: {method} -APPONLY,Application uniquement,Solo aplicación,Somente aplicativo,Solo applicazione +APP_ONLY,Application uniquement,Solo aplicación,Somente aplicativo,Solo applicazione COMPLETE,Complète (livrets et jeux papiers),Completo (cuaderno y juegos en papel),Completo (livretos e jogos de papel),Completo (libretti e giochi cartacei) SUMMARY_NUMBER_OF_DEVICES,Nombre d'appareils : {number},Cantidad de dispositivos: {number},Número de dispositivos : {number},Numero di dispositivi: {number} SUMMARY_NUMBER_OF_STUDENTS,Nombre d'élèves : {number},Cantidad de estudiantes: {number},Número de alunos : {number},Numero di studenti: {number} diff --git a/resources/gardens/garden.gd b/resources/gardens/garden.gd index 36e7b99d..e1454137 100644 --- a/resources/gardens/garden.gd +++ b/resources/gardens/garden.gd @@ -2,7 +2,7 @@ class_name Garden extends Control -const BACKGROUND_PATH_MODEL: String = "res://assets/gardens/gardens/Garden_%02d.png" +const BACKGROUND_PATH_MODEL: String = "res://assets/gardens/gardens/garden_%02d.png" const MAX_LESSONS: int = 5 const PLANT_COUNT: int = 8 # Maps lesson count → which slot indices to use diff --git a/resources/gardens/garden_layout.gd b/resources/gardens/garden_layout.gd index ed1970a1..27336383 100644 --- a/resources/gardens/garden_layout.gd +++ b/resources/gardens/garden_layout.gd @@ -3,15 +3,15 @@ class_name GardenLayout extends Resource enum FirstOrLast { - First, - Neither, - Last + FIRST, + NEITHER, + LAST } @export var color: int = 0 @export var lesson_buttons_export: Array[Dictionary] = []: set = set_lesson_buttons_export -@export var is_first_or_last: FirstOrLast = FirstOrLast.Neither +@export var is_first_or_last: FirstOrLast = FirstOrLast.NEITHER var lesson_buttons: Array[GardenLayoutLessonButton] = []: set = set_lesson_buttons diff --git a/resources/user/student_data.gd b/resources/user/student_data.gd index e059c974..e8ccaaa1 100644 --- a/resources/user/student_data.gd +++ b/resources/user/student_data.gd @@ -2,14 +2,14 @@ class_name StudentData extends Resource enum Level { - Beginner, - Reviewer, - Adult + BEGINNER, + REVIEWER, + ADULT } @export var code: int = 0 @export var name: String = "" -@export var level: Level = Level.Beginner +@export var level: Level = Level.BEGINNER @export var age: int = 0 @export var last_modified: String = "" diff --git a/resources/user/student_progression.gd b/resources/user/student_progression.gd index 4f119eae..65061843 100644 --- a/resources/user/student_progression.gd +++ b/resources/user/student_progression.gd @@ -4,9 +4,9 @@ extends Resource signal progression_changed() enum Status{ - Locked, - Unlocked, - Completed, + LOCKED, + UNLOCKED, + COMPLETED, } static var cached_boss_gate_lessons: Array[int] = [] @@ -42,11 +42,11 @@ func init_unlocks() -> void: for index: int in range(number_of_lessons): if not unlocks.has(index+1): unlocks[index + 1] = { - "look_and_learn": Status.Locked, + "look_and_learn": Status.LOCKED, "games": [ - Status.Locked, - Status.Locked, - Status.Locked, + Status.LOCKED, + Status.LOCKED, + Status.LOCKED, ], "last_duration": PackedInt32Array([0, 0, 0]), "total_duration": PackedInt32Array([0, 0, 0]) @@ -54,8 +54,8 @@ func init_unlocks() -> void: # Make sure that the first garden is always accessible if unlocks.has(1): - if unlocks[1]["look_and_learn"] == Status.Locked: - unlocks[1]["look_and_learn"] = Status.Unlocked + if unlocks[1]["look_and_learn"] == Status.LOCKED: + unlocks[1]["look_and_learn"] = Status.UNLOCKED _sanitize_boss_progression() @@ -75,8 +75,8 @@ func ensure_data_integrity(data: Dictionary[int, Dictionary]) -> Dictionary: if not is_init: Log.warn("StudentProgression: Garden %d missing → added with default values." % index) result[index] = { - "games": [Status.Locked, Status.Locked, Status.Locked], - "look_and_learn": Status.Locked, + "games": [Status.LOCKED, Status.LOCKED, Status.LOCKED], + "look_and_learn": Status.LOCKED, "last_duration": PackedInt32Array([0, 0, 0]), "total_duration": PackedInt32Array([0, 0, 0]) } @@ -87,11 +87,11 @@ func ensure_data_integrity(data: Dictionary[int, Dictionary]) -> Dictionary: if not garden.has("games"): if not is_init: Log.warn("StudentProgression: Garden %d: Add missing key 'games'." % index) - garden["games"] = [Status.Locked, Status.Locked, Status.Locked] + garden["games"] = [Status.LOCKED, Status.LOCKED, Status.LOCKED] if not garden.has("look_and_learn"): if not is_init: Log.warn("StudentProgression: Garden %d: Add missing key 'look_and_learn'." % index) - garden["look_and_learn"] = Status.Locked + garden["look_and_learn"] = Status.LOCKED if not garden.has("last_duration"): garden["last_duration"] = PackedInt32Array([0, 0, 0]) if not garden.has("total_duration"): @@ -101,14 +101,14 @@ func ensure_data_integrity(data: Dictionary[int, Dictionary]) -> Dictionary: if typeof(garden["games"]) != TYPE_ARRAY or (garden["games"] as Array).size() != 3: if not is_init: Log.warn("StudentProgression: Garden %d: invalid format for 'games' → reset." % index) - garden["games"] = [Status.Locked, Status.Locked, Status.Locked] + garden["games"] = [Status.LOCKED, Status.LOCKED, Status.LOCKED] # Check value outside of possible enum values for game_index: int in range(3): - if garden["games"][game_index] not in [Status.Locked, Status.Unlocked, Status.Completed]: - garden["games"][game_index] = Status.Locked - if garden["look_and_learn"] not in [Status.Locked, Status.Unlocked, Status.Completed]: - garden["look_and_learn"] = Status.Locked + if garden["games"][game_index] not in [Status.LOCKED, Status.UNLOCKED, Status.COMPLETED]: + garden["games"][game_index] = Status.LOCKED + if garden["look_and_learn"] not in [Status.LOCKED, Status.UNLOCKED, Status.COMPLETED]: + garden["look_and_learn"] = Status.LOCKED # Check progression rules for index: int in range(min_key, max_key + 1): @@ -119,8 +119,8 @@ func ensure_data_integrity(data: Dictionary[int, Dictionary]) -> Dictionary: if result.has(index - 1): var prev: Dictionary = result[index - 1] prev_completed = ( - prev["look_and_learn"] == Status.Completed and - (prev["games"] as Array).all(func(x: int) -> bool: return x == Status.Completed) + prev["look_and_learn"] == Status.COMPLETED and + (prev["games"] as Array).all(func(x: int) -> bool: return x == Status.COMPLETED) ) else: # First garden (key 1) is always unlocked @@ -129,25 +129,25 @@ func ensure_data_integrity(data: Dictionary[int, Dictionary]) -> Dictionary: # Case: previous garden not completed if not prev_completed: for game_index: int in range(3): - if garden["games"][game_index] != Status.Locked or garden["look_and_learn"] != Status.Locked: + if garden["games"][game_index] != Status.LOCKED or garden["look_and_learn"] != Status.LOCKED: if not is_init: Log.warn("StudentProgression: Garden %d: invalid progression (previous not finished) → reset." % index) - garden["games"] = [Status.Locked, Status.Locked, Status.Locked] - garden["look_and_learn"] = Status.Locked + garden["games"] = [Status.LOCKED, Status.LOCKED, Status.LOCKED] + garden["look_and_learn"] = Status.LOCKED break continue # Case: lesson completed → unlock games if needed - if garden["look_and_learn"] == Status.Completed: + if garden["look_and_learn"] == Status.COMPLETED: for game_index: int in range(3): - if garden["games"][game_index] == Status.Locked: - garden["games"][game_index] = Status.Unlocked + if garden["games"][game_index] == Status.LOCKED: + garden["games"][game_index] = Status.UNLOCKED if not is_init: Log.warn("StudentProgression: Garden %d: game %d unlocked because lesson is completed" % [index, game_index + 1]) # Case: previous garden completed → unlock lesson if needed - elif garden["look_and_learn"] == Status.Locked: - garden["look_and_learn"] = Status.Unlocked + elif garden["look_and_learn"] == Status.LOCKED: + garden["look_and_learn"] = Status.UNLOCKED if not is_init: Log.warn("StudentProgression: Garden %d: lesson unlocked because previous garden is completed" % index) @@ -229,7 +229,7 @@ func get_max_unlocked_lesson_index() -> int: for index: int in range(unlocks.size()): if is_lesson_blocked_by_boss(index + 1): break - if unlocks[index + 1]["look_and_learn"] >= Status.Unlocked: + if unlocks[index + 1]["look_and_learn"] >= Status.UNLOCKED: max_unlocked_level = index else: break @@ -238,18 +238,18 @@ func get_max_unlocked_lesson_index() -> int: func is_lesson_completed(lesson_number: int) -> bool: - return unlocks[lesson_number]["look_and_learn"] == Status.Completed and unlocks[lesson_number]["games"][0] == Status.Completed and unlocks[lesson_number]["games"][1] == Status.Completed and unlocks[lesson_number]["games"][2] == Status.Completed + return unlocks[lesson_number]["look_and_learn"] == Status.COMPLETED and unlocks[lesson_number]["games"][0] == Status.COMPLETED and unlocks[lesson_number]["games"][1] == Status.COMPLETED and unlocks[lesson_number]["games"][2] == Status.COMPLETED # Return true if the progression is saved or false if the look and learn was already completed func look_and_learn_completed(lesson_number: int) -> bool: - if unlocks[lesson_number]["look_and_learn"] == Status.Completed: + if unlocks[lesson_number]["look_and_learn"] == Status.COMPLETED: return false - unlocks[lesson_number]["look_and_learn"] = Status.Completed + unlocks[lesson_number]["look_and_learn"] = Status.COMPLETED for index: int in range(3): - unlocks[lesson_number]["games"][index] = Status.Unlocked + unlocks[lesson_number]["games"][index] = Status.UNLOCKED last_modified = Time.get_datetime_string_from_system(true) progression_changed.emit() @@ -259,18 +259,18 @@ func look_and_learn_completed(lesson_number: int) -> bool: # Return true if the progression is saved or false if the game was already completed func game_completed(lesson_number: int, game_number: int) -> bool: # If the game is already completed, do nothing - if unlocks[lesson_number]["games"][game_number] == Status.Completed: + if unlocks[lesson_number]["games"][game_number] == Status.COMPLETED: return false - unlocks[lesson_number]["games"][game_number] = Status.Completed + unlocks[lesson_number]["games"][game_number] = Status.COMPLETED var all_completed: bool = true for index: int in range(3): - all_completed = all_completed and unlocks[lesson_number]["games"][index] == Status.Completed + all_completed = all_completed and unlocks[lesson_number]["games"][index] == Status.COMPLETED if all_completed: if unlocks.has(lesson_number + 1): - unlocks[lesson_number + 1]["look_and_learn"] = Status.Unlocked + unlocks[lesson_number + 1]["look_and_learn"] = Status.UNLOCKED last_modified = Time.get_datetime_string_from_system(true) progression_changed.emit() diff --git a/resources/user/teacher_settings.gd b/resources/user/teacher_settings.gd index b0c1c92e..1588b132 100644 --- a/resources/user/teacher_settings.gd +++ b/resources/user/teacher_settings.gd @@ -2,12 +2,12 @@ class_name TeacherSettings extends Resource enum AccountType { - Teacher, - Parent + TEACHER, + PARENT } enum EducationMethod { - AppOnly, - Complete + APP_ONLY, + COMPLETE } const AVAILABLE_CODES: Array[int] = [123, 124, 125, 126, 132, 134, 135, 136, 142, 143, 145, 146, 152, 153, 154, 213, 214, 215, 216, 231, 234, 235, 236, 241, 243, 245, 246, 251, 253, 254, 321, 324, 325, 326, 312, 314, 315, 316, 342, 341, 345, 346, 352, 351, 354, 423, 421, 425, 426, 432, 431, 435, 436, 412, 413, 415, 416, 452, 453, 451, 523, 524, 521, 526, 532, 534, 531, 536, 542, 543, 541, 546, 512, 513, 514, 623, 624, 625, 621, 632, 634, 635, 631, 642, 643, 645, 641, 652, 653, 654] diff --git a/sources/gardens/gardens.gd b/sources/gardens/gardens.gd index ecf30802..bb0c5f36 100644 --- a/sources/gardens/gardens.gd +++ b/sources/gardens/gardens.gd @@ -178,7 +178,7 @@ func _apply_progression_to_gardens(transition_context: Dictionary) -> void: var lesson_unlocks: Dictionary = UserDataManager.student_progression.unlocks[lesson_index] var is_blocked_by_boss: bool = UserDataManager.student_progression.is_lesson_blocked_by_boss(lesson_index) - var is_lesson_unlocked: bool = lesson_unlocks["look_and_learn"] != StudentProgression.Status.Locked and not is_blocked_by_boss + var is_lesson_unlocked: bool = lesson_unlocks["look_and_learn"] != StudentProgression.Status.LOCKED and not is_blocked_by_boss button.set_button_disabled(not is_lesson_unlocked) if transition_context.new_lesson_unlocked and lesson_index == transition_context.newly_unlocked_lesson_number: @@ -352,7 +352,7 @@ func _ready() -> void: _scroll_to_starting_garden(transition_context) await (OpeningCurtain as OpeningCurtainClass).open() - (MusicManager as MusicManagerClass).play((MusicManager as MusicManagerClass).Track.Garden) + (MusicManager as MusicManagerClass).play((MusicManager as MusicManagerClass).Track.GARDEN) # Handles all the animation played when entering the gardens if transition_data: @@ -674,7 +674,7 @@ func _open_minigames_layout(button: LessonButton, lesson_number: int) -> void: current_button_global_position = button.global_position # Gets the current lesson unlocks var lesson_unlocks: Dictionary = UserDataManager.student_progression.unlocks[current_lesson_number] - var are_minigames_locked: bool = lesson_unlocks["games"][0] == StudentProgression.Status.Locked and lesson_unlocks["games"][1] == StudentProgression.Status.Locked and lesson_unlocks["games"][2] == StudentProgression.Status.Locked + var are_minigames_locked: bool = lesson_unlocks["games"][0] == StudentProgression.Status.LOCKED and lesson_unlocks["games"][1] == StudentProgression.Status.LOCKED and lesson_unlocks["games"][2] == StudentProgression.Status.LOCKED # Deactivate the mouse filters on the buttons behind the layout for lesson_button_item: LessonButton in current_garden.get_lesson_buttons(): lesson_button_item.mouse_filter = Control.MOUSE_FILTER_IGNORE @@ -712,10 +712,10 @@ func _open_minigames_layout(button: LessonButton, lesson_number: int) -> void: func _handle_lesson_button(lesson_number: int, status: StudentProgression.Status) -> void: lesson_button.text = lessons[lesson_number][0].grapheme - lesson_button.set_button_disabled(status == StudentProgression.Status.Locked) - lesson_button.completed = status == StudentProgression.Status.Completed - lesson_button_particles.emitting = status == StudentProgression.Status.Unlocked - if status == StudentProgression.Status.Completed: + lesson_button.set_button_disabled(status == StudentProgression.Status.LOCKED) + lesson_button.completed = status == StudentProgression.Status.COMPLETED + lesson_button_particles.emitting = status == StudentProgression.Status.UNLOCKED + if status == StudentProgression.Status.COMPLETED: if transition_data and transition_data.has("look_and_learn_completed") and transition_data.look_and_learn_completed: await minigame_layout_opened lesson_button.right() @@ -723,8 +723,8 @@ func _handle_lesson_button(lesson_number: int, status: StudentProgression.Status func _fill_minigame_choice(minigame_layout: MinigameLayout, exercise_type: int, status: StudentProgression.Status, minigame_number: int) -> void: minigame_layout.icon.texture = minigames_icons[exercise_type-1] - minigame_layout.is_disabled = status == StudentProgression.Status.Locked - if status == StudentProgression.Status.Completed: + minigame_layout.is_disabled = status == StudentProgression.Status.LOCKED + if status == StudentProgression.Status.COMPLETED: if transition_data and transition_data.has("minigame_completed") and transition_data.minigame_completed and transition_data.has("minigame_number") and transition_data.minigame_number == minigame_number and transition_data.has("first_clear") and transition_data.first_clear: minigame_layout.self_modulate = unlocked_color await minigame_layout_opened @@ -732,7 +732,7 @@ func _fill_minigame_choice(minigame_layout: MinigameLayout, exercise_type: int, minigame_layout.right() else: minigame_layout.self_modulate.a = 0 - elif status == StudentProgression.Status.Locked: + elif status == StudentProgression.Status.LOCKED: minigame_layout.self_modulate = locked_color else: minigame_layout.self_modulate = unlocked_color @@ -760,7 +760,7 @@ func _count_completed_minigames(lesson_number: int) -> int: return 0 var completed: int = 0 for game_status: int in UserDataManager.student_progression.unlocks[lesson_number]["games"]: - if game_status == StudentProgression.Status.Completed: + if game_status == StudentProgression.Status.COMPLETED: completed += 1 return completed diff --git a/sources/language_tool/gp_list_element.gd b/sources/language_tool/gp_list_element.gd index 45e65402..5ca45779 100644 --- a/sources/language_tool/gp_list_element.gd +++ b/sources/language_tool/gp_list_element.gd @@ -5,16 +5,18 @@ signal delete_pressed() signal validated() enum Type { - Silent, - Vowel, - Consonant, + SILENT, + VOWEL, + CONSONANT, } +const TYPE_LABELS: Array[String] = ["Silent", "Vowel", "Consonant"] + var grapheme: String = "": set = set_grapheme var phoneme: String = "": set = set_phoneme -var type: GPListElement.Type = Type.Silent: +var type: GPListElement.Type = Type.SILENT: set = set_type var exception: bool = false: set = set_exception @@ -55,7 +57,7 @@ func set_phoneme(p_phoneme: String) -> void: func set_type(p_type: Type) -> void: type = p_type if type_label: - type_label.text = Type.keys()[type] + type_label.text = TYPE_LABELS[type] if type_edit: type_edit.selected = type diff --git a/sources/language_tool/lesson_exercises.gd b/sources/language_tool/lesson_exercises.gd index d452d0e2..7fa3659b 100644 --- a/sources/language_tool/lesson_exercises.gd +++ b/sources/language_tool/lesson_exercises.gd @@ -15,7 +15,7 @@ func _ready() -> void: Database.db.query(query) if Database.db.query_result.is_empty(): Database.db.query("CREATE TABLE ExerciseTypes (ID INTEGER PRIMARY KEY ASC AUTOINCREMENT UNIQUE NOT NULL, Type TEXT NOT NULL)") - for exercise_name: String in Minigame.Type.keys(): + for exercise_name: String in Minigame.TYPE_NAMES: Database.db.query("SELECT * FROM ExerciseTypes WHERE Type = '%s'" % exercise_name) if Database.db.query_result.is_empty(): Database.db.insert_row("ExerciseTypes", diff --git a/sources/menus/register/register.gd b/sources/menus/register/register.gd index 19a5a5b1..370306e8 100644 --- a/sources/menus/register/register.gd +++ b/sources/menus/register/register.gd @@ -74,10 +74,10 @@ func _on_step_completed(step: Step) -> void: "type": # Adds teacher or parent steps _remove_future_steps() - if register_data.account_type == TeacherSettings.AccountType.Teacher: + if register_data.account_type == TeacherSettings.AccountType.TEACHER: for scene: PackedScene in teacher_steps: current_steps.append(scene.instantiate()) - elif register_data.account_type == TeacherSettings.AccountType.Parent: + elif register_data.account_type == TeacherSettings.AccountType.PARENT: for scene: PackedScene in parent_steps: current_steps.append(scene.instantiate()) progress_bar.max_value = current_steps.size() + 3 diff --git a/sources/menus/register/steps/account_type_step.gd b/sources/menus/register/steps/account_type_step.gd index 41fc30da..b28f8b4f 100644 --- a/sources/menus/register/steps/account_type_step.gd +++ b/sources/menus/register/steps/account_type_step.gd @@ -14,8 +14,8 @@ func _ready() -> void: func _on_next() -> bool: var register_data: TeacherSettings = data as TeacherSettings if register_data: - if register_data.account_type == TeacherSettings.AccountType.Parent: - register_data.education_method = TeacherSettings.EducationMethod.AppOnly + if register_data.account_type == TeacherSettings.AccountType.PARENT: + register_data.education_method = TeacherSettings.EducationMethod.APP_ONLY Log.info("Register/AccountTypeStep: selected account type = %s" % TeacherSettings.AccountType.keys()[register_data.account_type]) else: Log.warn("Register/AccountTypeStep: cannot continue because TeacherSettings data is missing") diff --git a/sources/menus/register/steps/recap_step.gd b/sources/menus/register/steps/recap_step.gd index 551a8ab4..d8ae2c88 100644 --- a/sources/menus/register/steps/recap_step.gd +++ b/sources/menus/register/steps/recap_step.gd @@ -22,7 +22,7 @@ func on_enter() -> void: email.text = tr("SUMMARY_EMAIL").format({"mail": teacher_settings.email}) account_type.text = tr("SUMMARY_TYPE").format({"type": tr((TeacherSettings.AccountType.keys()[teacher_settings.account_type] as String).to_upper())}) - if teacher_settings.account_type == TeacherSettings.AccountType.Teacher: + if teacher_settings.account_type == TeacherSettings.AccountType.TEACHER: education_method.text = tr("SUMMARY_METHOD").format({"method": tr((TeacherSettings.EducationMethod.keys()[teacher_settings.education_method] as String).to_upper())}) education_method.show() @@ -41,7 +41,7 @@ func on_enter() -> void: for device: int in teacher_settings.students.keys(): var device_recap: DeviceRecap = DEVICE_RECAP_SCENE.instantiate() - if teacher_settings.account_type == TeacherSettings.AccountType.Teacher: + if teacher_settings.account_type == TeacherSettings.AccountType.TEACHER: device_recap.title = tr("DEVICE_NUMBER").format({"number": device}) else: device_recap.title = tr("PLAYERS") diff --git a/sources/menus/register/steps/teacher/method_step.gd b/sources/menus/register/steps/teacher/method_step.gd index abbb8cd2..789dfa11 100644 --- a/sources/menus/register/steps/teacher/method_step.gd +++ b/sources/menus/register/steps/teacher/method_step.gd @@ -13,8 +13,8 @@ func _ready() -> void: func _on_next() -> bool: var register_data: TeacherSettings = data as TeacherSettings if register_data: - if register_data.account_type == TeacherSettings.AccountType.Parent: - register_data.education_method = TeacherSettings.EducationMethod.AppOnly + if register_data.account_type == TeacherSettings.AccountType.PARENT: + register_data.education_method = TeacherSettings.EducationMethod.APP_ONLY else: return false return true diff --git a/sources/menus/register/steps/teacher/method_step.tscn b/sources/menus/register/steps/teacher/method_step.tscn index 8300ca7d..1d5054c8 100644 --- a/sources/menus/register/steps/teacher/method_step.tscn +++ b/sources/menus/register/steps/teacher/method_step.tscn @@ -1,13 +1,13 @@ [gd_scene format=3 uid="uid://buhnx0oblueuq"] [ext_resource type="PackedScene" uid="uid://bxd3i06rqpxf0" path="res://sources/menus/register/steps/base_step.tscn" id="1_ksrhk"] -[ext_resource type="Script" uid="uid://dg4qit8mffvjh" path="res://addons/godot-form-validator/control_validator.gd" id="2_03dua"] +[ext_resource type="Script" uid="uid://ctfu2lhk6xaad" path="res://addons/godot-form-validator/control_validator.gd" id="2_03dua"] [ext_resource type="Script" uid="uid://ugsjyxqh1s5h" path="res://sources/menus/register/steps/teacher/method_step.gd" id="2_onyn6"] [ext_resource type="Script" uid="uid://dv82313fptjgb" path="res://sources/ui/tr_item_list.gd" id="2_qrbn1"] -[ext_resource type="Script" uid="uid://dw5aercmfe4" path="res://addons/godot-form-validator/rules/required_rule.gd" id="3_qewnl"] +[ext_resource type="Script" uid="uid://btw6a2qw2xnje" path="res://addons/godot-form-validator/rules/required_rule.gd" id="3_qewnl"] [ext_resource type="Script" uid="uid://7uwoocpe7ieu" path="res://sources/utils/binder/control_binder.gd" id="4_1k1yt"] [ext_resource type="Script" uid="uid://83q48kwp3p6p" path="res://sources/menus/register/steps/validation/item_list_validator.gd" id="4_rimto"] -[ext_resource type="Script" uid="uid://dg17cfvs2w257" path="res://addons/godot-form-validator/rules/validator_rule.gd" id="4_wmpac"] +[ext_resource type="Script" uid="uid://dlg1muqj8qwau" path="res://addons/godot-form-validator/rules/validator_rule.gd" id="4_wmpac"] [ext_resource type="LabelSettings" uid="uid://ohvlqccl2oog" path="res://resources/themes/error_label_settings.tres" id="6_sf33v"] [sub_resource type="Resource" id="Resource_kw8sn"] @@ -16,7 +16,9 @@ fail_message = "A value is required." [sub_resource type="Resource" id="Resource_ar6ux"] script = ExtResource("4_rimto") +validation_order = 1 validation_method = 1 +skip_validation = false rules = Array[ExtResource("4_wmpac")]([SubResource("Resource_kw8sn")]) [node name="MethodStep" unique_id=304348596 instance=ExtResource("1_ksrhk")] diff --git a/sources/menus/settings/lesson_unlock.gd b/sources/menus/settings/lesson_unlock.gd index 1e270a93..a2d2da6d 100644 --- a/sources/menus/settings/lesson_unlock.gd +++ b/sources/menus/settings/lesson_unlock.gd @@ -68,54 +68,54 @@ func _set_lesson_gps(value: String) -> void: func _on_look_and_learn_option_button_item_selected(index: int) -> void: unlocks[lesson_number]["look_and_learn"] = index - if index == StudentProgression.Status.Locked: + if index == StudentProgression.Status.LOCKED: if lesson_number == 1: - unlocks[lesson_number]["look_and_learn"] = StudentProgression.Status.Unlocked + unlocks[lesson_number]["look_and_learn"] = StudentProgression.Status.UNLOCKED else: - unlocks[lesson_number - 1]["look_and_learn"] = StudentProgression.Status.Unlocked - unlocks[lesson_number - 1]["games"][0] = StudentProgression.Status.Locked - unlocks[lesson_number - 1]["games"][1] = StudentProgression.Status.Locked - unlocks[lesson_number - 1]["games"][2] = StudentProgression.Status.Locked + unlocks[lesson_number - 1]["look_and_learn"] = StudentProgression.Status.UNLOCKED + unlocks[lesson_number - 1]["games"][0] = StudentProgression.Status.LOCKED + unlocks[lesson_number - 1]["games"][1] = StudentProgression.Status.LOCKED + unlocks[lesson_number - 1]["games"][2] = StudentProgression.Status.LOCKED - unlocks[lesson_number]["games"][0] = StudentProgression.Status.Locked - unlocks[lesson_number]["games"][1] = StudentProgression.Status.Locked - unlocks[lesson_number]["games"][2] = StudentProgression.Status.Locked + unlocks[lesson_number]["games"][0] = StudentProgression.Status.LOCKED + unlocks[lesson_number]["games"][1] = StudentProgression.Status.LOCKED + unlocks[lesson_number]["games"][2] = StudentProgression.Status.LOCKED for lesson: int in unlocks.keys(): if lesson > lesson_number: - unlocks[lesson]["look_and_learn"] = StudentProgression.Status.Locked - unlocks[lesson]["games"][0] = StudentProgression.Status.Locked - unlocks[lesson]["games"][1] = StudentProgression.Status.Locked - unlocks[lesson]["games"][2] = StudentProgression.Status.Locked + unlocks[lesson]["look_and_learn"] = StudentProgression.Status.LOCKED + unlocks[lesson]["games"][0] = StudentProgression.Status.LOCKED + unlocks[lesson]["games"][1] = StudentProgression.Status.LOCKED + unlocks[lesson]["games"][2] = StudentProgression.Status.LOCKED - elif index == StudentProgression.Status.Unlocked: - unlocks[lesson_number]["games"][0] = StudentProgression.Status.Locked - unlocks[lesson_number]["games"][1] = StudentProgression.Status.Locked - unlocks[lesson_number]["games"][2] = StudentProgression.Status.Locked + elif index == StudentProgression.Status.UNLOCKED: + unlocks[lesson_number]["games"][0] = StudentProgression.Status.LOCKED + unlocks[lesson_number]["games"][1] = StudentProgression.Status.LOCKED + unlocks[lesson_number]["games"][2] = StudentProgression.Status.LOCKED for lesson: int in unlocks.keys(): if lesson < lesson_number: - unlocks[lesson]["look_and_learn"] = StudentProgression.Status.Completed - unlocks[lesson]["games"][0] = StudentProgression.Status.Completed - unlocks[lesson]["games"][1] = StudentProgression.Status.Completed - unlocks[lesson]["games"][2] = StudentProgression.Status.Completed + unlocks[lesson]["look_and_learn"] = StudentProgression.Status.COMPLETED + unlocks[lesson]["games"][0] = StudentProgression.Status.COMPLETED + unlocks[lesson]["games"][1] = StudentProgression.Status.COMPLETED + unlocks[lesson]["games"][2] = StudentProgression.Status.COMPLETED elif lesson > lesson_number: - unlocks[lesson]["look_and_learn"] = StudentProgression.Status.Locked - unlocks[lesson]["games"][0] = StudentProgression.Status.Locked - unlocks[lesson]["games"][1] = StudentProgression.Status.Locked - unlocks[lesson]["games"][2] = StudentProgression.Status.Locked - elif index == StudentProgression.Status.Completed: - unlocks[lesson_number]["games"][0] = StudentProgression.Status.Unlocked - unlocks[lesson_number]["games"][1] = StudentProgression.Status.Unlocked - unlocks[lesson_number]["games"][2] = StudentProgression.Status.Unlocked + unlocks[lesson]["look_and_learn"] = StudentProgression.Status.LOCKED + unlocks[lesson]["games"][0] = StudentProgression.Status.LOCKED + unlocks[lesson]["games"][1] = StudentProgression.Status.LOCKED + unlocks[lesson]["games"][2] = StudentProgression.Status.LOCKED + elif index == StudentProgression.Status.COMPLETED: + unlocks[lesson_number]["games"][0] = StudentProgression.Status.UNLOCKED + unlocks[lesson_number]["games"][1] = StudentProgression.Status.UNLOCKED + unlocks[lesson_number]["games"][2] = StudentProgression.Status.UNLOCKED for lesson: int in unlocks.keys(): if lesson < lesson_number: - unlocks[lesson]["look_and_learn"] = StudentProgression.Status.Completed - unlocks[lesson]["games"][0] = StudentProgression.Status.Completed - unlocks[lesson]["games"][1] = StudentProgression.Status.Completed - unlocks[lesson]["games"][2] = StudentProgression.Status.Completed + unlocks[lesson]["look_and_learn"] = StudentProgression.Status.COMPLETED + unlocks[lesson]["games"][0] = StudentProgression.Status.COMPLETED + unlocks[lesson]["games"][1] = StudentProgression.Status.COMPLETED + unlocks[lesson]["games"][2] = StudentProgression.Status.COMPLETED elif lesson > lesson_number: - unlocks[lesson]["look_and_learn"] = StudentProgression.Status.Locked - unlocks[lesson]["games"][0] = StudentProgression.Status.Locked - unlocks[lesson]["games"][1] = StudentProgression.Status.Locked - unlocks[lesson]["games"][2] = StudentProgression.Status.Locked + unlocks[lesson]["look_and_learn"] = StudentProgression.Status.LOCKED + unlocks[lesson]["games"][0] = StudentProgression.Status.LOCKED + unlocks[lesson]["games"][1] = StudentProgression.Status.LOCKED + unlocks[lesson]["games"][2] = StudentProgression.Status.LOCKED unlocks_changed.emit() diff --git a/sources/menus/settings/lesson_unlocks.gd b/sources/menus/settings/lesson_unlocks.gd index e843cbe3..4c549d12 100644 --- a/sources/menus/settings/lesson_unlocks.gd +++ b/sources/menus/settings/lesson_unlocks.gd @@ -90,7 +90,7 @@ func _on_back_button_pressed() -> void: func _get_highest_unlocked_lesson() -> int: var highest_unlocked_lesson: int = 0 for lesson_number: int in progression.unlocks.keys(): - if progression.unlocks[lesson_number]["look_and_learn"] >= StudentProgression.Status.Unlocked: + if progression.unlocks[lesson_number]["look_and_learn"] >= StudentProgression.Status.UNLOCKED: highest_unlocked_lesson = max(highest_unlocked_lesson, lesson_number) return highest_unlocked_lesson diff --git a/sources/minigames/base/base_minigame.gd b/sources/minigames/base/base_minigame.gd index 6bb7c711..ac046d8d 100644 --- a/sources/minigames/base/base_minigame.gd +++ b/sources/minigames/base/base_minigame.gd @@ -2,18 +2,32 @@ class_name Minigame extends Control enum Type { - jellyfish, - crabs, - parakeets, - monkey, - caterpillar, - frog, - turtles, - ants, - penguin, - fish + JELLYFISH, + CRABS, + PARAKEETS, + MONKEY, + CATERPILLAR, + FROG, + TURTLES, + ANTS, + PENGUIN, + FISH, } +# String names used for file paths, database keys, and speech lookups. +# Kept separate from enum member names so renaming members doesn't affect runtime behaviour. +const TYPE_NAMES: Array[String] = [ + "jellyfish", + "crabs", + "parakeets", + "monkey", + "caterpillar", + "frog", + "turtles", + "ants", + "penguin", + "fish", +] const WIN_SOUND_FX: AudioStreamMP3 = preload("res://assets/sfx/sfx_game_over_win.mp3") const LOSE_SOUND_FX: AudioStreamMP3 = preload("res://assets/sfx/sfx_game_over_lose.mp3") const LABEL_COLOR_NEUTRAL: Color = Color("#e6f3e0") @@ -59,7 +73,7 @@ var current_lives: int = 0: var previous_lives: int = current_lives current_lives = value if current_lives != previous_lives: - Log.trace("BaseMinigame: Lives changed from %d to %d (max %d) for %s" % [previous_lives, current_lives, max_number_of_lives, Type.keys()[minigame_name]]) + Log.trace("BaseMinigame: Lives changed from %d to %d (max %d) for %s" % [previous_lives, current_lives, max_number_of_lives, TYPE_NAMES[minigame_name]]) if current_lives < previous_lives: consecutive_errors += previous_lives - current_lives if current_lives <= max_number_of_lives - errors_before_help_speech: @@ -104,11 +118,11 @@ func _ready() -> void: # Difficulty if (UserDataManager as UserDataManagerClass)._student_difficulty: - difficulty = UserDataManager.get_difficulty_for_minigame(Type.keys()[minigame_name] as String) + difficulty = UserDataManager.get_difficulty_for_minigame(TYPE_NAMES[minigame_name] as String) - intro_kalulu_speech = Database.load_external_sound(Database.get_kalulu_speech_path(Type.keys()[minigame_name] as String, "intro")) - help_kalulu_speech = Database.load_external_sound(Database.get_kalulu_speech_path(Type.keys()[minigame_name] as String, "help")) - win_kalulu_speech = Database.load_external_sound(Database.get_kalulu_speech_path(Type.keys()[minigame_name] as String, "end")) + intro_kalulu_speech = Database.load_external_sound(Database.get_kalulu_speech_path(TYPE_NAMES[minigame_name] as String, "intro")) + help_kalulu_speech = Database.load_external_sound(Database.get_kalulu_speech_path(TYPE_NAMES[minigame_name] as String, "help")) + win_kalulu_speech = Database.load_external_sound(Database.get_kalulu_speech_path(TYPE_NAMES[minigame_name] as String, "end")) lose_kalulu_speech = Database.load_external_sound(Database.get_kalulu_speech_path("minigame", "lose")) if not Engine.is_editor_hint(): @@ -125,7 +139,7 @@ func _initialize() -> void: _setup_minigame() - Log.info("BaseMinigame: Initialize %s (lesson %d, minigame #%d, difficulty %d)" % [Type.keys()[minigame_name], lesson_nb, minigame_number, difficulty]) + Log.info("BaseMinigame: Initialize %s (lesson %d, minigame #%d, difficulty %d)" % [TYPE_NAMES[minigame_name], lesson_nb, minigame_number, difficulty]) if not Engine.is_editor_hint(): await _curtains_and_kalulu() @@ -151,10 +165,10 @@ func _curtains_and_kalulu() -> void: await (OpeningCurtain as OpeningCurtainClass).open() # Checks if intro needs to be played - if not UserDataManager.is_speech_played(Type.keys()[minigame_name] as String): + if not UserDataManager.is_speech_played(TYPE_NAMES[minigame_name] as String): minigame_ui.play_kalulu_speech(intro_kalulu_speech) await minigame_ui.kalulu_speech_ended - UserDataManager.mark_speech_as_played(Type.keys()[minigame_name] as String) + UserDataManager.mark_speech_as_played(TYPE_NAMES[minigame_name] as String) #endregion #region Timer @@ -166,7 +180,7 @@ var _is_paused: bool = false # Launch the minigame func _start() -> void: - Log.info("BaseMinigame: Start minigame=%s lesson=%d difficulty=%d" % [Type.keys()[minigame_name], lesson_nb, difficulty]) + Log.info("BaseMinigame: Start minigame=%s lesson=%d difficulty=%d" % [TYPE_NAMES[minigame_name], lesson_nb, difficulty]) _start_time = Time.get_ticks_msec() / 1000.0 _elapsed_paused = 0.0 _is_paused = false @@ -218,13 +232,13 @@ func _win() -> void: update_scores() - Log.info("BaseMinigame: %s won in %d seconds with progression %d/%d and %d/%d lives" % [Type.keys()[minigame_name], _get_elapsed_time_seconds(), current_progression, max_progression, current_lives, max_number_of_lives]) + Log.info("BaseMinigame: %s won in %d seconds with progression %d/%d and %d/%d lives" % [TYPE_NAMES[minigame_name], _get_elapsed_time_seconds(), current_progression, max_progression, current_lives, max_number_of_lives]) # Difficulty if current_lives <= 0: - UserDataManager.update_difficulty_for_minigame(Type.keys()[minigame_name] as String, false) + UserDataManager.update_difficulty_for_minigame(TYPE_NAMES[minigame_name] as String, false) else: - UserDataManager.update_difficulty_for_minigame(Type.keys()[minigame_name] as String, true) + UserDataManager.update_difficulty_for_minigame(TYPE_NAMES[minigame_name] as String, true) audio_player.stream = WIN_SOUND_FX audio_player.play() @@ -263,10 +277,10 @@ func _lose() -> void: update_scores() - Log.info("BaseMinigame: %s Lose in %d seconds with progression %d/%d and %d/%d lives" % [Type.keys()[minigame_name], _get_elapsed_time_seconds(), current_progression, max_progression, current_lives, max_number_of_lives]) + Log.info("BaseMinigame: %s Lose in %d seconds with progression %d/%d and %d/%d lives" % [TYPE_NAMES[minigame_name], _get_elapsed_time_seconds(), current_progression, max_progression, current_lives, max_number_of_lives]) # Difficulty - UserDataManager.update_difficulty_for_minigame(Type.keys()[minigame_name] as String, false) + UserDataManager.update_difficulty_for_minigame(TYPE_NAMES[minigame_name] as String, false) audio_player.stream = LOSE_SOUND_FX audio_player.play() @@ -280,7 +294,7 @@ func _lose() -> void: if has_method("show_adult_block"): call("show_adult_block") else: - Log.error("BaseMinigame: Adult block requested but no handler exists for %s" % Type.keys()[minigame_name]) + Log.error("BaseMinigame: Adult block requested but no handler exists for %s" % TYPE_NAMES[minigame_name]) return _reset() @@ -303,8 +317,8 @@ func _save_logs() -> void: var logs_size: int = -1 if logs.has("answers") and logs.get("answers", []) is Array: logs_size = (logs.get("answers", []) as Array).size() - Log.info("BaseMinigame: Saving logs for %s with %d answer(s)" % [Type.keys()[minigame_name], logs_size]) - LessonLogger.save_logs(logs, UserDataManager.get_student_folder(), Type.keys()[minigame_name] as String, lesson_nb, Time.get_time_string_from_system()) + Log.info("BaseMinigame: Saving logs for %s with %d answer(s)" % [TYPE_NAMES[minigame_name], logs_size]) + LessonLogger.save_logs(logs, UserDataManager.get_student_folder(), TYPE_NAMES[minigame_name] as String, lesson_nb, Time.get_time_string_from_system()) _reset_logs() @@ -317,7 +331,7 @@ func _log_new_response(response: Dictionary, current_stimulus: Dictionary) -> vo "reponse": response, "awaited_response": current_stimulus, "is_right": response == current_stimulus, - "minigame": Type.keys()[minigame_name], + "minigame": TYPE_NAMES[minigame_name], "number_of_hints": current_number_of_hints, "current_progression": current_progression, "max_progression": max_progression, @@ -325,7 +339,7 @@ func _log_new_response(response: Dictionary, current_stimulus: Dictionary) -> vo "max_number_of_lives": max_number_of_lives, } Log.trace("BaseMinigame: Log new response minigame=%s response=%s expected=%s right=%s progression=%d/%d lives=%d/%d" % [ - Type.keys()[minigame_name], + TYPE_NAMES[minigame_name], str(response), str(current_stimulus), str(response_log.is_right), @@ -437,7 +451,7 @@ func _play_kalulu_help_speech() -> void: func set_current_progression(p_current_progression: int) -> void: var previous_progression: int = current_progression current_progression = p_current_progression - Log.trace("BaseMinigame: Progression changed from %d to %d/%d for %s" % [previous_progression, current_progression, max_progression, Type.keys()[minigame_name]]) + Log.trace("BaseMinigame: Progression changed from %d to %d/%d for %s" % [previous_progression, current_progression, max_progression, TYPE_NAMES[minigame_name]]) consecutive_errors = 0 is_highlighting = false diff --git a/sources/minigames/boss/boss_minigame.gd b/sources/minigames/boss/boss_minigame.gd index 12493415..55b2079a 100644 --- a/sources/minigames/boss/boss_minigame.gd +++ b/sources/minigames/boss/boss_minigame.gd @@ -65,7 +65,7 @@ func _ready() -> void: default_label_background_color = texture_rect_text_box.self_modulate # Skips the whole tutorial - if UserDataManager.is_speech_played(Type.keys()[minigame_name] as String): + if UserDataManager.is_speech_played(TYPE_NAMES[minigame_name]): tutorial_count = 2 @@ -158,7 +158,7 @@ func _present_next_word() -> void: if _is_boss_session(): _boss_answer_start_ms = Time.get_ticks_msec() if tutorial_count == 0: - var speech: AudioStreamMP3 = Database.load_external_sound(Database.get_kalulu_speech_path(Type.keys()[minigame_name] as String, "intro_test_game_first_word")) + var speech: AudioStreamMP3 = Database.load_external_sound(Database.get_kalulu_speech_path(TYPE_NAMES[minigame_name], "intro_test_game_first_word")) minigame_ui.play_kalulu_speech(speech) await minigame_ui.kalulu_speech_ended @@ -224,12 +224,12 @@ func _on_answer_dropped(is_answered_real: bool) -> void: words_to_present.pop_front() await _play_correct_answer_animation(target_button) if tutorial_count == 0: - var speech: AudioStreamMP3 = Database.load_external_sound(Database.get_kalulu_speech_path(Type.keys()[minigame_name] as String, "win_test_game_first_word")) + var speech: AudioStreamMP3 = Database.load_external_sound(Database.get_kalulu_speech_path(TYPE_NAMES[minigame_name], "win_test_game_first_word")) minigame_ui.play_kalulu_speech(speech) await minigame_ui.kalulu_speech_ended tutorial_count += 1 elif tutorial_count == 1: - var speech: AudioStreamMP3 = Database.load_external_sound(Database.get_kalulu_speech_path(Type.keys()[minigame_name] as String, "win_test_game_second_word")) + var speech: AudioStreamMP3 = Database.load_external_sound(Database.get_kalulu_speech_path(TYPE_NAMES[minigame_name], "win_test_game_second_word")) minigame_ui.play_kalulu_speech(speech) await minigame_ui.kalulu_speech_ended tutorial_count += 1 @@ -245,12 +245,12 @@ func _on_answer_dropped(is_answered_real: bool) -> void: wrong_fx.play() words_to_present_next.append(words_to_present.pop_front()) if tutorial_count == 0: - var speech: AudioStreamMP3 = Database.load_external_sound(Database.get_kalulu_speech_path(Type.keys()[minigame_name] as String, "lose_test_game_first_word")) + var speech: AudioStreamMP3 = Database.load_external_sound(Database.get_kalulu_speech_path(TYPE_NAMES[minigame_name], "lose_test_game_first_word")) minigame_ui.play_kalulu_speech(speech) await minigame_ui.kalulu_speech_ended tutorial_count += 1 elif tutorial_count == 1: - var speech: AudioStreamMP3 = Database.load_external_sound(Database.get_kalulu_speech_path(Type.keys()[minigame_name] as String, "lose_test_game_second_word")) + var speech: AudioStreamMP3 = Database.load_external_sound(Database.get_kalulu_speech_path(TYPE_NAMES[minigame_name], "lose_test_game_second_word")) minigame_ui.play_kalulu_speech(speech) await minigame_ui.kalulu_speech_ended tutorial_count += 1 diff --git a/sources/minigames/frog/frog_minigame.gd b/sources/minigames/frog/frog_minigame.gd index d51f0ae3..cc473084 100644 --- a/sources/minigames/frog/frog_minigame.gd +++ b/sources/minigames/frog/frog_minigame.gd @@ -162,7 +162,7 @@ func _on_current_progression_changed() -> void: func set_current_progression(p_current_progression: int) -> void: var previous_progression: int = current_progression current_progression = p_current_progression - Log.debug("BaseMinigame: Progression changed from %d to %d/%d for %s" % [previous_progression, current_progression, max_progression, Type.keys()[minigame_name]]) + Log.debug("BaseMinigame: Progression changed from %d to %d/%d for %s" % [previous_progression, current_progression, max_progression, TYPE_NAMES[minigame_name]]) consecutive_errors = 0 is_highlighting = false diff --git a/sources/minigames/jellyfish/jellyfish.gd b/sources/minigames/jellyfish/jellyfish.gd index 5d61e4fc..fbf59f62 100644 --- a/sources/minigames/jellyfish/jellyfish.gd +++ b/sources/minigames/jellyfish/jellyfish.gd @@ -4,8 +4,8 @@ extends Control signal pressed(stimulus: Dictionary) enum Colors { - Blue, - Pink, + BLUE, + PINK, } const ANIMATIONS_BODY: Array[SpriteFrames] = [ @@ -28,7 +28,7 @@ const SCALE_FACTOR: float = 0.2 if is_node_ready(): _apply_visuals() -var _color: int = Colors.Blue +var _color: int = Colors.BLUE var color: int: get: return _color set(value): @@ -62,7 +62,7 @@ func _ready() -> void: return var rand: float = randf() - color = Colors.Blue if rand < 0.7 else Colors.Pink + color = Colors.BLUE if rand < 0.7 else Colors.PINK var rand_frame: int = randi_range(0, animated_sprite_body.sprite_frames.get_frame_count("idle") - 1) animated_sprite_body.frame = rand_frame animated_sprite_arms.frame = rand_frame @@ -71,7 +71,7 @@ func _ready() -> void: func _apply_visuals() -> void: if boss: - animated_sprite_body.sprite_frames = ANIMATIONS_BODY[Colors.Pink] + animated_sprite_body.sprite_frames = ANIMATIONS_BODY[Colors.PINK] animated_sprite_arms.hide() return else: @@ -147,7 +147,7 @@ func delete() -> void: func idle_boss() -> void: text_box_sprite_2d.hide() - color = Colors.Pink + color = Colors.PINK scale = Vector2(0.45, 0.45) animated_sprite_body.stop() animated_sprite_arms.stop() diff --git a/sources/minigames/monkeys/monkeys_minigame.gd b/sources/minigames/monkeys/monkeys_minigame.gd index 448c7c51..91379219 100644 --- a/sources/minigames/monkeys/monkeys_minigame.gd +++ b/sources/minigames/monkeys/monkeys_minigame.gd @@ -1,9 +1,9 @@ extends WordsMinigame enum Audio { - SendToKing, - SendToPlank, - SendToMonkey, + SEND_TO_KING, + SEND_TO_PLANK, + SEND_TO_MONKEY, } const MONKEY_SCENE: PackedScene = preload("res://sources/minigames/monkeys/monkey.tscn") @@ -123,7 +123,7 @@ func _get_coconut_from_monkey_to_king(monkey: Monkey) -> Node2D: await monkey.play("start_throw") monkey.play("finish_throw") - audio_player.stream = AUDIO_STREAMS[Audio.SendToKing] + audio_player.stream = AUDIO_STREAMS[Audio.SEND_TO_KING] audio_player.play() var coconut: Coconut = monkey.coconut.duplicate() @@ -167,7 +167,7 @@ func _on_coconut_thrown(monkey: Monkey) -> void: if _is_gp_right(monkey.stimulus): await king.play("start_right") - audio_player.stream = AUDIO_STREAMS[Audio.SendToPlank] + audio_player.stream = AUDIO_STREAMS[Audio.SEND_TO_PLANK] audio_player.play() king.play("finish_right") var tween: Tween = create_tween() @@ -179,7 +179,7 @@ func _on_coconut_thrown(monkey: Monkey) -> void: current_word_progression += 1 else: await king.play("start_wrong") - audio_player.stream = AUDIO_STREAMS[Audio.SendToMonkey] + audio_player.stream = AUDIO_STREAMS[Audio.SEND_TO_MONKEY] audio_player.play() king.play("finish_wrong") var tween: Tween = create_tween() diff --git a/sources/minigames/parakeets/parakeet.gd b/sources/minigames/parakeets/parakeet.gd index b8ee49a8..8b48d077 100644 --- a/sources/minigames/parakeets/parakeet.gd +++ b/sources/minigames/parakeets/parakeet.gd @@ -4,9 +4,9 @@ extends Node2D signal pressed() enum Colors { - Red, - Green, - Yellow, + RED, + GREEN, + YELLOW, } const ANIMATIONS: Array[SpriteFrames] = [ @@ -21,7 +21,7 @@ const FEATHERS_ANIMATIONS: Array[SpriteFrames] = [ ] @export var sad_duration: float = 2.0 -@export var color: Colors = Colors.Red: +@export var color: Colors = Colors.RED: set(value): color = value if animated_sprite: @@ -141,7 +141,7 @@ func wrong() -> void: func idle_boss() -> void: text_box_sprite_2d.hide() - color = Colors.Green + color = Colors.GREEN animated_sprite.play("idle_front") animated_sprite.stop() diff --git a/sources/minigames/parakeets/parakeets_minigame.gd b/sources/minigames/parakeets/parakeets_minigame.gd index 5939c260..a90dc773 100644 --- a/sources/minigames/parakeets/parakeets_minigame.gd +++ b/sources/minigames/parakeets/parakeets_minigame.gd @@ -1,16 +1,16 @@ extends Minigame enum State { - Locked, - Idle, - Selected1, - Selected2, + LOCKED, + IDLE, + SELECTED_1, + SELECTED_2, } enum Audio { - Fly, - Happy, - Turn, - Win, + FLY, + HAPPY, + TURN, + WIN, } const AUDIO_STREAMS: Array[AudioStreamMP3] = [ @@ -32,7 +32,7 @@ const PARAKEET_SCENE: PackedScene = preload("res://sources/minigames/parakeets/p var parakeets: Array[Parakeet] = [] var selected: Array[Parakeet] = [] -var state: State = State.Locked +var state: State = State.LOCKED @onready var branches: Node2D = $GameRoot/TreeTrunk/Branches @onready var possible_start_positions_parent: Control = $GameRoot/FlyFrom @@ -114,30 +114,30 @@ func _start() -> void: func _on_parakeet_pressed(parakeet: Parakeet) -> void: match state: - State.Selected2, State.Locked: + State.SELECTED_2, State.LOCKED: return - State.Selected1: - state = State.Locked + State.SELECTED_1: + state = State.LOCKED if parakeet in selected: selected.erase(parakeet) await _turn(parakeet, true) - state = State.Idle + state = State.IDLE else: selected.append(parakeet) await _turn(parakeet, false) - state = State.Selected2 + state = State.SELECTED_2 _log_new_response({"pair": [selected[0].stimulus, selected[1].stimulus]}, {"pair": [selected[0].stimulus, selected[0].stimulus]}) if selected[0].stimulus.Grapheme == selected[1].stimulus.Grapheme: _correct() else: _wrong() - State.Idle: - state = State.Locked + State.IDLE: + state = State.LOCKED selected.append(parakeet) await _turn(parakeet, false) - state = State.Selected1 + state = State.SELECTED_1 func _correct() -> void: @@ -151,7 +151,7 @@ func _correct() -> void: await _fly_to(nest_positions) await _make_selected_coo() _fly_to(fly_away_positions) - state = State.Idle + state = State.IDLE selected.clear() @@ -183,14 +183,14 @@ func _present_parakeets() -> void: for parakeet: Parakeet in parakeets: coroutine.add_future(_turn.bind(parakeet, true)) await coroutine.join_all() - state = State.Idle + state = State.IDLE func _make_selected_happy() -> void: for parakeet: Parakeet in selected: parakeet.right() parakeet.happy() - audio_player.stream = AUDIO_STREAMS[Audio.Happy] + audio_player.stream = AUDIO_STREAMS[Audio.HAPPY] audio_player.play() await audio_player.finished @@ -206,7 +206,7 @@ func _make_selected_sad() -> void: func _make_selected_coo() -> void: for parakeet: Parakeet in selected: parakeet.idle() - audio_player.stream = AUDIO_STREAMS[Audio.Win] + audio_player.stream = AUDIO_STREAMS[Audio.WIN] audio_player.play() await audio_player.finished @@ -216,7 +216,7 @@ func _fly_to(targets: Array[Vector2]) -> void: parent.move_child(selected[0], parent.get_child_count() - 1) parent.move_child(selected[1], parent.get_child_count() - 1) var coroutine: Coroutine = Coroutine.new() - audio_player.stream = AUDIO_STREAMS[Audio.Fly] + audio_player.stream = AUDIO_STREAMS[Audio.FLY] audio_player.play() coroutine.add_future(audio_player.finished) coroutine.add_future(selected[0].fly_to.bind(targets[0], fly_duration)) @@ -226,7 +226,7 @@ func _fly_to(targets: Array[Vector2]) -> void: func _turn(parakeet: Parakeet, to_back: bool) -> void: if not audio_player.playing: - audio_player.stream = AUDIO_STREAMS[Audio.Turn] + audio_player.stream = AUDIO_STREAMS[Audio.TURN] audio_player.play() if to_back: await parakeet.turn_to_back() @@ -237,7 +237,7 @@ func _turn(parakeet: Parakeet, to_back: bool) -> void: func _flying_arrival(to: Array[Vector2]) -> void: assert(parakeets.size() <= to.size(), "Some parakeets don't have a destination") var coroutine: Coroutine = Coroutine.new() - audio_player.stream = AUDIO_STREAMS[Audio.Fly] + audio_player.stream = AUDIO_STREAMS[Audio.FLY] audio_player.play() coroutine.add_future(audio_player.finished) for index: int in range(parakeets.size()): diff --git a/sources/minigames/turtles/turtle.gd b/sources/minigames/turtles/turtle.gd index f3b186a4..f1754de9 100644 --- a/sources/minigames/turtles/turtle.gd +++ b/sources/minigames/turtles/turtle.gd @@ -5,9 +5,9 @@ signal pressed(gp: Dictionary) signal animation_changed(position: Vector2) enum Colors { - Green, - Khaki, - Purple, + GREEN, + KHAKI, + PURPLE, } const ANIMATIONS: Array[SpriteFrames] = [ @@ -18,7 +18,7 @@ const ANIMATIONS: Array[SpriteFrames] = [ const TURTLE_BACK_RIGHT: CompressedTexture2D = preload("res://assets/minigames/turtles/graphic/turtle_back_right.png") const TURTLE_BACK_WRONG: CompressedTexture2D = preload("res://assets/minigames/turtles/graphic/turtle_back_wrong.png") -@export var color: Colors = Colors.Purple: +@export var color: Colors = Colors.PURPLE: set(value): color = value if sprite: diff --git a/sources/utils/autoloads/music_manager.gd b/sources/utils/autoloads/music_manager.gd index 033d8ad2..6fa2164a 100644 --- a/sources/utils/autoloads/music_manager.gd +++ b/sources/utils/autoloads/music_manager.gd @@ -2,8 +2,8 @@ class_name MusicManagerClass extends Node enum Track { - Title, - Garden + TITLE, + GARDEN } const TRACKS: Array = [ @@ -16,7 +16,7 @@ const TRACKS: Array = [ func _ready() -> void: Log.trace("MusicManager: Ready - starting title track") - play(Track.Title) + play(Track.TITLE) func _on_music_player_finished() -> void: diff --git a/sources/utils/autoloads/user_database_synchronizer.gd b/sources/utils/autoloads/user_database_synchronizer.gd index 0167cafb..e4ccdfdc 100644 --- a/sources/utils/autoloads/user_database_synchronizer.gd +++ b/sources/utils/autoloads/user_database_synchronizer.gd @@ -2,11 +2,11 @@ class_name UserDatabaseSynchronizer extends Node enum UpdateNeeded { - Nothing, - FromLocal, - FromServer, - DeleteLocal, - DeleteServer + NOTHING, + FROM_LOCAL, + FROM_SERVER, + DELETE_LOCAL, + DELETE_SERVER } var synchronizing: bool = false @@ -62,13 +62,13 @@ func _determine_user_update(response_body: Dictionary) -> UpdateNeeded: Log.trace("UserDatabaseSynchronizer: Cannot get user from body. Canceling synchronization.") set_loading_bar_text("SYNCHRONIZATION_ERROR_NO_BODY_FROM_SERVER") stop_sync() - return UpdateNeeded.Nothing + return UpdateNeeded.NOTHING var user: Dictionary = response_body.user if not user.has("last_modified"): Log.trace("UserDatabaseSynchronizer: Cannot get last_modified from user. Canceling synchronization.") set_loading_bar_text("SYNCHRONIZATION_ERROR") stop_sync() - return UpdateNeeded.Nothing + return UpdateNeeded.NOTHING var server_unix_time_user: int = Time.get_unix_time_from_datetime_string(user.last_modified as String) var local_user_string_time: String = UserDataManager.teacher_settings.last_modified var local_unix_time_user: int = 0 @@ -79,10 +79,10 @@ func _determine_user_update(response_body: Dictionary) -> UpdateNeeded: func _compute_update_needed(local_unix_time: int, server_unix_time: int) -> UpdateNeeded: if local_unix_time == server_unix_time: - return UpdateNeeded.Nothing + return UpdateNeeded.NOTHING if local_unix_time > server_unix_time: - return UpdateNeeded.FromLocal - return UpdateNeeded.FromServer + return UpdateNeeded.FROM_LOCAL + return UpdateNeeded.FROM_SERVER func _determine_students_update(response_body: Dictionary, need_update_user: UpdateNeeded) -> Dictionary: @@ -150,7 +150,7 @@ func _determine_students_update(response_body: Dictionary, need_update_user: Upd # Synchronize student data var local_student_unix_time: int = Time.get_unix_time_from_datetime_string(student_data.last_modified) student_updates["data"] = _compute_update_needed(local_student_unix_time, server_student_unix_time) - if student_updates["data"] == UpdateNeeded.Nothing: + if student_updates["data"] == UpdateNeeded.NOTHING: Log.trace("UserDatabaseSynchronizer: Student %d data timestamp is the same in local and on server. No synchronization necessary" % code_to_check) # Synchronize student progression @@ -162,7 +162,7 @@ func _determine_students_update(response_body: Dictionary, need_update_user: Upd return {} var local_student_progression_unix_time: int = Time.get_unix_time_from_datetime_string(student_progression.last_modified) student_updates["progression"] = _compute_update_needed(local_student_progression_unix_time, server_student_progression_unix_time) - if student_updates["progression"] == UpdateNeeded.Nothing: + if student_updates["progression"] == UpdateNeeded.NOTHING: Log.trace("UserDatabaseSynchronizer: Student %d progression data timestamp is the same in local and on server. No synchronization necessary" % code_to_check) # Synchronize student remediation @@ -170,17 +170,17 @@ func _determine_students_update(response_body: Dictionary, need_update_user: Upd if student_remediation != null: var local_student_gp_remediation_unix_time: int = Time.get_unix_time_from_datetime_string(student_remediation.gp_last_modified) student_updates["remediation_gp"] = _compute_update_needed(local_student_gp_remediation_unix_time, server_student_remediation_gp_unix_time) - if student_updates["remediation_gp"] == UpdateNeeded.Nothing: + if student_updates["remediation_gp"] == UpdateNeeded.NOTHING: Log.trace("UserDatabaseSynchronizer: Student %d GP remediation data timestamp is the same in local and on server. No synchronization necessary" % code_to_check) var local_student_syllables_remediation_unix_time: int = Time.get_unix_time_from_datetime_string(student_remediation.syllables_last_modified) student_updates["remediation_syllables"] = _compute_update_needed(local_student_syllables_remediation_unix_time, server_student_remediation_syllables_unix_time) - if student_updates["remediation_syllables"] == UpdateNeeded.Nothing: + if student_updates["remediation_syllables"] == UpdateNeeded.NOTHING: Log.trace("UserDatabaseSynchronizer: Student %d syllables remediation data timestamp is the same in local and on server. No synchronization necessary" % code_to_check) var local_student_words_remediation_unix_time: int = Time.get_unix_time_from_datetime_string(student_remediation.words_last_modified) student_updates["remediation_words"] = _compute_update_needed(local_student_words_remediation_unix_time, server_student_remediation_words_unix_time) - if student_updates["remediation_words"] == UpdateNeeded.Nothing: + if student_updates["remediation_words"] == UpdateNeeded.NOTHING: Log.trace("UserDatabaseSynchronizer: Student %d words remediation data timestamp is the same in local and on server. No synchronization necessary" % code_to_check) # Synchronize student confusion matrix @@ -188,20 +188,20 @@ func _determine_students_update(response_body: Dictionary, need_update_user: Upd if student_confusion_matrix != null: var local_student_gp_confusion_matrix_unix_time: int = Time.get_unix_time_from_datetime_string(student_confusion_matrix.gp_last_modified) student_updates["confusion_matrix_gp"] = _compute_update_needed(local_student_gp_confusion_matrix_unix_time, server_student_confusion_matrix_gp_unix_time) - if student_updates["confusion_matrix_gp"] == UpdateNeeded.Nothing: + if student_updates["confusion_matrix_gp"] == UpdateNeeded.NOTHING: Log.trace("UserDatabaseSynchronizer: Student %d GP confusion matrix data timestamp is the same in local and on server. No synchronization necessary" % code_to_check) else: if server_student_confusion_matrix_gp_unix_time > 0: - student_updates["confusion_matrix_gp"] = UpdateNeeded.FromServer + student_updates["confusion_matrix_gp"] = UpdateNeeded.FROM_SERVER break if found: break if not found: - if need_update_user == UpdateNeeded.FromServer: - need_update_students[code_to_check]["data"] = UpdateNeeded.FromServer - elif need_update_user == UpdateNeeded.FromLocal: - need_update_students[code_to_check]["data"] = UpdateNeeded.DeleteServer + if need_update_user == UpdateNeeded.FROM_SERVER: + need_update_students[code_to_check]["data"] = UpdateNeeded.FROM_SERVER + elif need_update_user == UpdateNeeded.FROM_LOCAL: + need_update_students[code_to_check]["data"] = UpdateNeeded.DELETE_SERVER else: Log.warn("UserDatabaseSynchronizer: Student %d not found in local, but user doesn't need to be updated...this is theoretically not possible" % code_to_check) @@ -209,12 +209,12 @@ func _determine_students_update(response_body: Dictionary, need_update_user: Upd var students_in_device: Array[StudentData] = UserDataManager.teacher_settings.students[device] for student_data: StudentData in students_in_device: if not need_update_students.has(student_data.code): - if need_update_user == UpdateNeeded.FromServer: + if need_update_user == UpdateNeeded.FROM_SERVER: need_update_students[student_data.code] = {} - need_update_students[student_data.code]["data"] = UpdateNeeded.DeleteLocal - elif need_update_user == UpdateNeeded.FromLocal: + need_update_students[student_data.code]["data"] = UpdateNeeded.DELETE_LOCAL + elif need_update_user == UpdateNeeded.FROM_LOCAL: need_update_students[student_data.code] = {} - need_update_students[student_data.code]["data"] = UpdateNeeded.FromLocal + need_update_students[student_data.code]["data"] = UpdateNeeded.FROM_LOCAL else: Log.warn("UserDatabaseSynchronizer: Student %d not found in server, but user doesn't need to be updated...this is theoretically not possible" % student_data.code) return need_update_students @@ -223,13 +223,13 @@ func _determine_students_update(response_body: Dictionary, need_update_user: Upd func _build_message_to_server(need_update_user: UpdateNeeded, need_update_students: Dictionary[int, Dictionary]) -> Dictionary: var message_to_server: Dictionary = {} - if need_update_user == UpdateNeeded.FromLocal: + if need_update_user == UpdateNeeded.FROM_LOCAL: message_to_server["user"] = { "account_type": UserDataManager.teacher_settings.account_type, "education_method": UserDataManager.teacher_settings.education_method, "last_modified": UserDataManager.teacher_settings.last_modified } - elif need_update_user == UpdateNeeded.FromServer: + elif need_update_user == UpdateNeeded.FROM_SERVER: message_to_server["user"] = {"need_update": true} message_to_server["students"] = {} @@ -241,14 +241,14 @@ func _build_message_to_server(need_update_user: UpdateNeeded, need_update_studen if student_entry.has("data"): var student_update: UpdateNeeded = student_entry["data"] - if student_update == UpdateNeeded.DeleteLocal: + if student_update == UpdateNeeded.DELETE_LOCAL: UserDataManager.delete_student(student_code) continue - elif student_update == UpdateNeeded.DeleteServer: + elif student_update == UpdateNeeded.DELETE_SERVER: student_block["delete"] = true - elif student_update == UpdateNeeded.FromLocal: + elif student_update == UpdateNeeded.FROM_LOCAL: var device_id: int = UserDataManager.teacher_settings.get_student_device(student_code) if device_id == -1: Log.error("UserDatabaseSynchronizer: Student code %s has no device ID" % student_code) @@ -264,7 +264,7 @@ func _build_message_to_server(need_update_user: UpdateNeeded, need_update_studen "updated_at": student_data.last_modified }) - elif student_update == UpdateNeeded.FromServer: + elif student_update == UpdateNeeded.FROM_SERVER: student_block["need_update"] = true var student_progression: StudentProgression = UserDataManager.get_student_progression_for_code(0, student_code) @@ -272,16 +272,16 @@ func _build_message_to_server(need_update_user: UpdateNeeded, need_update_studen Log.trace("Cannot find progression data for student %s" % str(student_code)) elif student_entry.has("progression"): var progression_block: Dictionary = {} - if student_entry.progression == UpdateNeeded.FromLocal: + if student_entry.progression == UpdateNeeded.FROM_LOCAL: progression_block = { "version": student_progression.version, "unlocked": student_progression.unlocks, "highest_boss_defeated": student_progression.highest_boss_defeated, "updated_at": student_progression.last_modified } - elif student_entry.progression == UpdateNeeded.FromServer: + elif student_entry.progression == UpdateNeeded.FROM_SERVER: progression_block = {"need_update": true} - elif student_entry.progression == UpdateNeeded.DeleteServer: + elif student_entry.progression == UpdateNeeded.DELETE_SERVER: progression_block = {"delete": true} if progression_block.size() > 0: @@ -290,14 +290,14 @@ func _build_message_to_server(need_update_user: UpdateNeeded, need_update_studen var student_remediation: UserRemediation = UserDataManager.get_student_remediation_data(student_code) if student_entry.has("remediation_gp"): var gp_remediation_block: Dictionary = {} - if student_entry.remediation_gp == UpdateNeeded.FromLocal: + if student_entry.remediation_gp == UpdateNeeded.FROM_LOCAL: var tuple_list: Array = [] for key: int in student_remediation.gps_scores.keys(): tuple_list.append([key, student_remediation.gps_scores[key]]) gp_remediation_block = {"score_remediation": tuple_list, "updated_at": student_remediation.gp_last_modified} - elif student_entry.remediation_gp == UpdateNeeded.FromServer: + elif student_entry.remediation_gp == UpdateNeeded.FROM_SERVER: gp_remediation_block = {"need_update": true} - elif student_entry.remediation_gp == UpdateNeeded.DeleteServer: + elif student_entry.remediation_gp == UpdateNeeded.DELETE_SERVER: gp_remediation_block = {"delete": true} if gp_remediation_block.size() > 0: @@ -305,14 +305,14 @@ func _build_message_to_server(need_update_user: UpdateNeeded, need_update_studen if student_entry.has("remediation_syllables"): var syllables_remediation_block: Dictionary = {} - if student_entry.remediation_syllables == UpdateNeeded.FromLocal: + if student_entry.remediation_syllables == UpdateNeeded.FROM_LOCAL: var tuple_list: Array = [] for key: int in student_remediation.syllables_scores.keys(): tuple_list.append([key, student_remediation.syllables_scores[key]]) syllables_remediation_block = {"score_remediation": tuple_list, "updated_at": student_remediation.syllables_last_modified} - elif student_entry.remediation_syllables == UpdateNeeded.FromServer: + elif student_entry.remediation_syllables == UpdateNeeded.FROM_SERVER: syllables_remediation_block = {"need_update": true} - elif student_entry.remediation_syllables == UpdateNeeded.DeleteServer: + elif student_entry.remediation_syllables == UpdateNeeded.DELETE_SERVER: syllables_remediation_block = {"delete": true} if syllables_remediation_block.size() > 0: @@ -320,14 +320,14 @@ func _build_message_to_server(need_update_user: UpdateNeeded, need_update_studen if student_entry.has("remediation_words"): var words_remediation_block: Dictionary = {} - if student_entry.remediation_words == UpdateNeeded.FromLocal: + if student_entry.remediation_words == UpdateNeeded.FROM_LOCAL: var tuple_list: Array = [] for key: int in student_remediation.words_scores.keys(): tuple_list.append([key, student_remediation.words_scores[key]]) words_remediation_block = {"score_remediation": tuple_list, "updated_at": student_remediation.words_last_modified} - elif student_entry.remediation_words == UpdateNeeded.FromServer: + elif student_entry.remediation_words == UpdateNeeded.FROM_SERVER: words_remediation_block = {"need_update": true} - elif student_entry.remediation_words == UpdateNeeded.DeleteServer: + elif student_entry.remediation_words == UpdateNeeded.DELETE_SERVER: words_remediation_block = {"delete": true} if words_remediation_block.size() > 0: @@ -336,14 +336,14 @@ func _build_message_to_server(need_update_user: UpdateNeeded, need_update_studen var student_confusion_matrix: UserConfusionMatrix = UserDataManager.get_student_confusion_matrix_data(student_code) if student_entry.has("confusion_matrix_gp"): var gp_confusion_matrix_block: Dictionary = {} - if student_entry.confusion_matrix_gp == UpdateNeeded.FromLocal: + if student_entry.confusion_matrix_gp == UpdateNeeded.FROM_LOCAL: var tuple_list: Array = [] for key: int in student_confusion_matrix.gp_scores.keys(): tuple_list.append([key, student_confusion_matrix.gp_scores[key]]) gp_confusion_matrix_block = {"confusion_matrix": tuple_list, "updated_at": student_confusion_matrix.gp_last_modified} - elif student_entry.confusion_matrix_gp == UpdateNeeded.FromServer: + elif student_entry.confusion_matrix_gp == UpdateNeeded.FROM_SERVER: gp_confusion_matrix_block = {"need_update": true} - elif student_entry.confusion_matrix_gp == UpdateNeeded.DeleteServer: + elif student_entry.confusion_matrix_gp == UpdateNeeded.DELETE_SERVER: gp_confusion_matrix_block = {"delete": true} if gp_confusion_matrix_block.size() > 0: @@ -474,7 +474,7 @@ func synchronize() -> void: return var need_update_user: UpdateNeeded = _determine_user_update(response_body) - if need_update_user == UpdateNeeded.Nothing: + if need_update_user == UpdateNeeded.NOTHING: Log.trace("UserDatabaseSynchronizer: User data timestamp is the same in local and on server. No synchronization necessary") if not synchronizing: return diff --git a/tests/integration_tests/test_account_lifecycle.gd b/tests/integration_tests/test_account_lifecycle.gd index acb4afad..850307ff 100644 --- a/tests/integration_tests/test_account_lifecycle.gd +++ b/tests/integration_tests/test_account_lifecycle.gd @@ -84,8 +84,8 @@ func test_full_account_creation_login_and_deletion() -> void: gut.p("Step 2: Building registration payload…") var register_data: TeacherSettings = TeacherSettings.new() - register_data.account_type = TeacherSettings.AccountType.Teacher - register_data.education_method = TeacherSettings.EducationMethod.Complete + register_data.account_type = TeacherSettings.AccountType.TEACHER + register_data.education_method = TeacherSettings.EducationMethod.COMPLETE register_data.email = _test_email register_data.password = TEST_PASSWORD register_data.language = "fr_FR" @@ -94,20 +94,20 @@ func test_full_account_creation_login_and_deletion() -> void: var student_alice: StudentData = StudentData.new() student_alice.code = 123 student_alice.name = "Alice" - student_alice.level = StudentData.Level.Beginner + student_alice.level = StudentData.Level.BEGINNER student_alice.age = 7 var student_bob: StudentData = StudentData.new() student_bob.code = 124 student_bob.name = "Bob" - student_bob.level = StudentData.Level.Reviewer + student_bob.level = StudentData.Level.REVIEWER student_bob.age = 8 # Device 2 — one student var student_charlie: StudentData = StudentData.new() student_charlie.code = 321 student_charlie.name = "Charlie" - student_charlie.level = StudentData.Level.Adult + student_charlie.level = StudentData.Level.ADULT student_charlie.age = 10 register_data.students[1] = [student_alice, student_bob] @@ -166,9 +166,9 @@ func test_full_account_creation_login_and_deletion() -> void: # --- Basic fields --- assert_eq(str(login_body.email), _test_email, "Returned email should match") - assert_eq(login_body.account_type as int, TeacherSettings.AccountType.Teacher, + assert_eq(login_body.account_type as int, TeacherSettings.AccountType.TEACHER, "Account type should be Teacher (0)") - assert_eq(login_body.education_method as int, TeacherSettings.EducationMethod.Complete, + assert_eq(login_body.education_method as int, TeacherSettings.EducationMethod.COMPLETE, "Education method should be Complete (1)") assert_eq(str(login_body.language), "fr_FR", "Language should be 'fr'") assert_true(login_body.has("token"), "Login response must include token") @@ -198,13 +198,13 @@ func test_full_account_creation_login_and_deletion() -> void: found_alice = true assert_eq(str(student.name), "Alice", "Student 123 should be Alice") assert_eq(student.age as int, 7, "Alice should be age 7") - assert_eq(student.level as int, StudentData.Level.Beginner, + assert_eq(student.level as int, StudentData.Level.BEGINNER, "Alice should be Beginner (0)") 124: found_bob = true assert_eq(str(student.name), "Bob", "Student 124 should be Bob") assert_eq(student.age as int, 8, "Bob should be age 8") - assert_eq(student.level as int, StudentData.Level.Reviewer, + assert_eq(student.level as int, StudentData.Level.REVIEWER, "Bob should be Reviewer (1)") assert_true(found_alice, "Alice (code 123) should be present on device 1") assert_true(found_bob, "Bob (code 124) should be present on device 1") @@ -215,7 +215,7 @@ func test_full_account_creation_login_and_deletion() -> void: assert_eq(charlie.code as int, 321, "Device 2 student should have code 321") assert_eq(str(charlie.name), "Charlie", "Student 321 should be Charlie") assert_eq(charlie.age as int, 10, "Charlie should be age 10") - assert_eq(charlie.level as int, StudentData.Level.Adult, + assert_eq(charlie.level as int, StudentData.Level.ADULT, "Charlie should be Adult (2)") # ------------------------------------------------------------------ diff --git a/tests/unit_tests/test_student_data.gd b/tests/unit_tests/test_student_data.gd index bbedff5d..8cf256e7 100644 --- a/tests/unit_tests/test_student_data.gd +++ b/tests/unit_tests/test_student_data.gd @@ -3,14 +3,14 @@ extends GutTest var default_student_data_dict: Dictionary = { "code": 0, "name": "", - "level": StudentData.Level.Beginner, + "level": StudentData.Level.BEGINNER, "age": 0, "last_modified": "" } var modified_student_data_dict: Dictionary = { "code": 123, "name": "Alice", - "level": StudentData.Level.Adult, + "level": StudentData.Level.ADULT, "age": 7, "last_modified": Time.get_datetime_string_from_unix_time(12345) } @@ -21,7 +21,7 @@ func test_to_dict() -> void: assert_eq_deep(default_student.to_dict(), default_student_data_dict) default_student.code = 123 default_student.name = "Alice" - default_student.level = StudentData.Level.Adult + default_student.level = StudentData.Level.ADULT default_student.age = 7 default_student.last_modified = Time.get_datetime_string_from_unix_time(12345) assert_eq_deep(default_student.to_dict(), modified_student_data_dict) From 790260e2fd881530c3e8349e687b64e7ce0e394e Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Fri, 17 Apr 2026 14:18:32 +0200 Subject: [PATCH 032/111] Add CHANGE_LANGUAGE feature to teacher settings MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reorders the left sidebar so risky actions sit at the bottom with a gap: Dashboard, Synchronize, Logout | Change Language (red), Delete Account. The new Change Language button opens a warning popup with a language dropdown. On confirm, if the selected locale differs from the current one, the client calls POST /reset_language. On success it wipes the local teacher folder (progression, remediation, confusion matrix…), applies the new language to device and teacher settings, logs out and reloads from the splash screen. On error the user sees an error popup and nothing local changes. --- kalulu_localization.csv | 3 + sources/menus/settings/teacher_settings.gd | 33 +++++++ sources/menus/settings/teacher_settings.tscn | 34 ++++++-- sources/ui/change_language_popup.gd | 76 ++++++++++++++++ sources/ui/change_language_popup.gd.uid | 1 + sources/ui/change_language_popup.tscn | 92 ++++++++++++++++++++ sources/utils/autoloads/server_manager.gd | 8 ++ 7 files changed, 241 insertions(+), 6 deletions(-) create mode 100644 sources/ui/change_language_popup.gd create mode 100644 sources/ui/change_language_popup.gd.uid create mode 100644 sources/ui/change_language_popup.tscn diff --git a/kalulu_localization.csv b/kalulu_localization.csv index 4c8fd803..23c87251 100644 --- a/kalulu_localization.csv +++ b/kalulu_localization.csv @@ -434,6 +434,9 @@ CHECKING_DATA,Vérification des données...,Comprobando datos...,Verificação d TEACHER_SETTINGS_HELP,"Pour accéder aux paramètres, veuillez appuyer sur le plus et la barre verticale, puis maintenez le bouton ""Paramètres"" pendant 5 secondes","Para acceder a los ajustes, pulse el signo más y la barra vertical y, a continuación, mantenga pulsado el botón «Configuración» durante 5 segundos","Para acessar as configurações, pressione o sinal de mais e a barra vertical e, em seguida, mantenha pressionado o botão ""Parâmetros"" por 5 segundos","Per accedere alle impostazioni, premi il segno più e la barra verticale, quindi tieni premuto il pulsante ""Impostazioni"" per 5 secondi" DELETE_ACCOUNT,Supprimer le compte,Eliminar cuenta,Excluir conta,Elimina account DELETE_ACCOUNT_POPUP,Voulez-vous vraiment supprimer votre compte ? Cette action est irréversible !,¿De verdad quieres eliminar tu cuenta? ¡Esta acción es irreversible!,Você realmente deseja excluir sua conta? Essa ação é irreversível!,Vuoi davvero eliminare il tuo account? Questa azione è irreversibile! +CHANGE_LANGUAGE,Changer la langue,Cambiar el idioma,Mudar o idioma,Cambia lingua +CHANGE_LANGUAGE_POPUP,"Changer la langue du compte supprimera toute la progression et les données de tous les élèves. Cette action est irréversible. Sélectionnez la nouvelle langue ci-dessous.","Cambiar el idioma de la cuenta borrará todo el progreso y los datos de todos los alumnos. Esta acción es irreversible. Seleccione el nuevo idioma a continuación.","Mudar o idioma da conta apagará todo o progresso e os dados de todos os alunos. Essa ação é irreversível. Selecione o novo idioma abaixo.","Cambiare la lingua dell'account cancellerà tutti i progressi e i dati di tutti gli studenti. Questa azione è irreversibile. Seleziona di seguito la nuova lingua." +CHANGE_LANGUAGE_ERROR,"Impossible de changer la langue. Veuillez vérifier votre connexion et réessayer.","No se pudo cambiar el idioma. Compruebe su conexión y vuelva a intentarlo.","Não foi possível mudar o idioma. Verifique sua conexão e tente novamente.","Impossibile cambiare la lingua. Verifica la connessione e riprova." DISCONNECTED_ERROR,Vous avez été déconnecté. Veuillez renseigner vos identifiants à nouveau.,Se ha cerrado la sesión. Vuelva a introducir sus datos de acceso.,Você foi desconectado. Digite seus detalhes de login novamente.,Sei stato disconnesso. Inserisci nuovamente le tue credenziali. INVALID_LANGUAGE_DIRECTORY,Dossier de langue invalide,Carpeta de idioma no válida,Pasta de idioma inválida,Cartella lingua non valida NO_INTERNET_ACCESS,Vous n'êtes pas connecté à Internet. Veuillez vérifier votre connexion et réessayer.,No está conectado a Internet. Compruebe su conexión e inténtelo de nuevo.,Você não está conectado à Internet. Verifique sua conexão e tente novamente.,Non sei connesso a Internet. Verifica la connessione e riprova. diff --git a/sources/menus/settings/teacher_settings.gd b/sources/menus/settings/teacher_settings.gd index 48bf7a3a..d6a3af48 100644 --- a/sources/menus/settings/teacher_settings.gd +++ b/sources/menus/settings/teacher_settings.gd @@ -3,6 +3,7 @@ extends Control const MAIN_MENU_PATH: String = "res://sources/menus/main/main_menu.tscn" const LOGIN_MENU_PATH: String = "res://sources/menus/login/login.tscn" +const SPLASH_SCREEN_PATH: String = "res://sources/menus/splash_screen/splash_screen.tscn" const DEVICE_SELECTION_SCENE_PATH: String = "res://sources/menus/device_selection/device_selection.tscn" const DEVICE_TAB_SCENE: PackedScene = preload("res://sources/menus/settings/device_tab.tscn") const PASSWORD_VISUALIZER_SCENE: PackedScene = preload("res://sources/menus/components/password_visualizer.tscn") @@ -18,6 +19,8 @@ var last_device_id: int = -1 @onready var devices_tab_container: TabContainer = %DevicesTabContainer @onready var lesson_unlocks: LessonUnlocks = $LessonUnlocks @onready var delete_popup: ConfirmPopup = %DeletePopup +@onready var change_language_popup: ChangeLanguagePopup = %ChangeLanguagePopup +@onready var change_language_error_popup: ConfirmPopup = %ChangeLanguageErrorPopup @onready var loading_popup: LoadingPopup = %LoadingPopup @onready var account_type_option_button: OptionButton = %AccountTypeOptionButton @onready var education_method_option_button: OptionButton = %EducationMethodOptionButton @@ -125,6 +128,36 @@ func _on_logout_button_pressed() -> void: get_tree().change_scene_to_file(MAIN_MENU_PATH) +func _on_change_language_button_pressed() -> void: + var current_language: String = UserDataManager.get_language() + change_language_popup.show_for_current_language(current_language) + + +func _on_change_language_popup_accepted(new_language: String) -> void: + if not new_language: + Log.warn("SettingsTeacherSettings: Change language cancelled - no language selected") + return + var current_language: String = UserDataManager.get_language() + if new_language == current_language: + Log.info("SettingsTeacherSettings: Change language skipped - selected language matches current (%s)" % current_language) + return + Log.warn("SettingsTeacherSettings: Change language from %s to %s" % [current_language, new_language]) + + var res: Dictionary = await ServerManager.reset_language(new_language) + if res.code != 200: + Log.error("SettingsTeacherSettings: Reset language request failed. Error code %d" % res.code) + change_language_error_popup.show() + return + + # Server confirmed: wipe all local teacher data, apply new language, and restart from splash. + UserDataManager.delete_teacher_data() + if UserDataManager.teacher_settings: + UserDataManager.teacher_settings.server_language_validated = false + UserDataManager.set_language(new_language, true) + UserDataManager.logout() + get_tree().change_scene_to_file(SPLASH_SCREEN_PATH) + + func _on_devices_tab_container_tab_changed(tab: int) -> void: var device_tab: DeviceTab = devices_tab_container.get_tab_control(tab) as DeviceTab if not device_tab: diff --git a/sources/menus/settings/teacher_settings.tscn b/sources/menus/settings/teacher_settings.tscn index 9cd2278e..660dd97f 100644 --- a/sources/menus/settings/teacher_settings.tscn +++ b/sources/menus/settings/teacher_settings.tscn @@ -10,6 +10,7 @@ [ext_resource type="Theme" uid="uid://dqjvrt5nrtwn1" path="res://resources/themes/kalulu_theme.tres" id="8_7h0sa"] [ext_resource type="PackedScene" uid="uid://qsvbq6ruc44v" path="res://sources/menus/settings/lesson_unlocks.tscn" id="9_mljfd"] [ext_resource type="PackedScene" uid="uid://dhowigt8un22u" path="res://sources/ui/loading_popup.tscn" id="10_i488h"] +[ext_resource type="PackedScene" path="res://sources/ui/change_language_popup.tscn" id="11_chglg"] [node name="TeacherSettings" type="Control" unique_id=149147235] layout_mode = 3 @@ -71,6 +72,30 @@ theme_type_variation = &"FlatButton" theme_override_font_sizes/font_size = 40 text = "SYNCHRONIZE_ACCOUNT" +[node name="LogoutButton" type="Button" parent="InterfaceLeft/Container" unique_id=808130432] +layout_mode = 2 +theme_override_font_sizes/font_size = 40 +text = "LOGOUT" + +[node name="DangerSpacer" type="Control" parent="InterfaceLeft/Container" unique_id=312700845] +custom_minimum_size = Vector2(0, 100) +layout_mode = 2 + +[node name="ChangeLanguageButton" type="Button" parent="InterfaceLeft/Container" unique_id=144215823] +layout_mode = 2 +theme_type_variation = &"DangerButton" +theme_override_font_sizes/font_size = 40 +text = "CHANGE_LANGUAGE" + +[node name="ChangeLanguagePopup" parent="InterfaceLeft/Container/ChangeLanguageButton" unique_id=144215824 instance=ExtResource("11_chglg")] +unique_name_in_owner = true +visible = false + +[node name="ChangeLanguageErrorPopup" parent="InterfaceLeft/Container/ChangeLanguageButton" unique_id=144215825 instance=ExtResource("7_jetb7")] +unique_name_in_owner = true +visible = false +content_text = "CHANGE_LANGUAGE_ERROR" + [node name="DeleteButton" type="Button" parent="InterfaceLeft/Container" unique_id=721919922] layout_mode = 2 theme_type_variation = &"DangerButton" @@ -82,11 +107,6 @@ unique_name_in_owner = true visible = false content_text = "DELETE_ACCOUNT_POPUP" -[node name="LogoutButton" type="Button" parent="InterfaceLeft/Container" unique_id=808130432] -layout_mode = 2 -theme_override_font_sizes/font_size = 40 -text = "LOGOUT" - [node name="VBoxContainer" type="VBoxContainer" parent="." unique_id=2087046145] custom_minimum_size = Vector2(1970, 1800) layout_mode = 1 @@ -243,9 +263,11 @@ access = 2 [connection signal="pressed" from="InterfaceLeft/Container/BackButton" to="." method="_on_back_button_pressed"] [connection signal="pressed" from="InterfaceLeft/Container/Dashboard" to="." method="_on_dashboard_button_pressed"] [connection signal="pressed" from="InterfaceLeft/Container/SynchronizeButton" to="." method="_on_synchronize_button_pressed"] +[connection signal="pressed" from="InterfaceLeft/Container/LogoutButton" to="." method="_on_logout_button_pressed"] +[connection signal="pressed" from="InterfaceLeft/Container/ChangeLanguageButton" to="." method="_on_change_language_button_pressed"] +[connection signal="accepted" from="InterfaceLeft/Container/ChangeLanguageButton/ChangeLanguagePopup" to="." method="_on_change_language_popup_accepted"] [connection signal="pressed" from="InterfaceLeft/Container/DeleteButton" to="." method="_on_delete_button_pressed"] [connection signal="accepted" from="InterfaceLeft/Container/DeleteButton/DeletePopup" to="." method="_on_delete_popup_accepted"] -[connection signal="pressed" from="InterfaceLeft/Container/LogoutButton" to="." method="_on_logout_button_pressed"] [connection signal="item_selected" from="VBoxContainer/HBoxContainer/AccountTypeOptionButton" to="." method="_on_account_type_option_button_item_selected"] [connection signal="item_selected" from="VBoxContainer/HBoxContainer/EducationMethodOptionButton" to="." method="_on_education_method_option_button_item_selected"] [connection signal="tab_changed" from="VBoxContainer/DevicesTabContainer" to="." method="_on_devices_tab_container_tab_changed"] diff --git a/sources/ui/change_language_popup.gd b/sources/ui/change_language_popup.gd new file mode 100644 index 00000000..15565140 --- /dev/null +++ b/sources/ui/change_language_popup.gd @@ -0,0 +1,76 @@ +@tool +class_name ChangeLanguagePopup +extends CanvasLayer + +signal accepted(language: String) +signal refused() + +@export_multiline var content_text: String = "CHANGE_LANGUAGE_POPUP": set = _set_content_text +@export var close_on_action: bool = true + +var _locales: Array[String] = [] + +@onready var content_label: Label = %ChangeLanguageContentLabel +@onready var language_field: OptionButton = %ChangeLanguageLanguageField +@onready var confirm_button: Button = %ChangeLanguageConfirmButton +@onready var cancel_button: Button = %ChangeLanguageCancelButton + + +func _ready() -> void: + _set_content_text(content_text) + if not Engine.is_editor_hint(): + _populate_language_field() + + +func show_for_current_language(current_language: String) -> void: + _populate_language_field(current_language) + show() + + +func get_selected_language() -> String: + if not language_field: + return "" + var selected_id: int = language_field.get_selected_id() + if selected_id < 0 or selected_id >= _locales.size(): + return "" + return _locales[selected_id] + + +func _populate_language_field(preselected_locale: String = "") -> void: + if not language_field: + return + _locales.clear() + language_field.clear() + var index: int = 0 + for locale: String in Utils.SUPPORTED_LOCALES.keys(): + if not locale: + continue + var locale_name: String = Utils.SUPPORTED_LOCALES[locale] + if not locale_name: + continue + language_field.add_item(locale_name, index) + _locales.append(locale) + if locale == preselected_locale: + language_field.select(index) + index += 1 + if language_field.get_selected_id() == -1 and _locales.size() > 0: + language_field.select(0) + + +func _set_content_text(p_content_text: String) -> void: + content_text = p_content_text + if content_label: + content_label.text = content_text + + +func _on_confirm_button_pressed() -> void: + var selected_language: String = get_selected_language() + accepted.emit(selected_language) + if close_on_action: + hide() + + +func _on_cancel_button_pressed() -> void: + refused.emit() + if close_on_action: + hide() diff --git a/sources/ui/change_language_popup.gd.uid b/sources/ui/change_language_popup.gd.uid new file mode 100644 index 00000000..bab62365 --- /dev/null +++ b/sources/ui/change_language_popup.gd.uid @@ -0,0 +1 @@ +uid://bxqtlx38skcu3 diff --git a/sources/ui/change_language_popup.tscn b/sources/ui/change_language_popup.tscn new file mode 100644 index 00000000..9470a8e2 --- /dev/null +++ b/sources/ui/change_language_popup.tscn @@ -0,0 +1,92 @@ +[gd_scene format=3] + +[ext_resource type="Script" path="res://sources/ui/change_language_popup.gd" id="1_chglg"] +[ext_resource type="Theme" path="res://resources/themes/kalulu_theme.tres" id="2_chglg"] + +[sub_resource type="Gradient" id="Gradient_chglg"] +colors = PackedColorArray(0.2, 0.2, 0.2, 0.505882, 0.2, 0.2, 0.2, 0.505882) + +[sub_resource type="GradientTexture1D" id="GradientTexture1D_chglg"] +gradient = SubResource("Gradient_chglg") + +[node name="ChangeLanguagePopup" type="CanvasLayer"] +script = ExtResource("1_chglg") + +[node name="TextureRect" type="TextureRect" parent="."] +top_level = true +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 0 +texture = SubResource("GradientTexture1D_chglg") + +[node name="PanelContainer" type="PanelContainer" parent="TextureRect"] +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -20.0 +offset_top = -20.0 +offset_right = 20.0 +offset_bottom = 20.0 +grow_horizontal = 2 +grow_vertical = 2 +theme_type_variation = &"PanelKalulu" + +[node name="VBoxContainer" type="VBoxContainer" parent="TextureRect/PanelContainer"] +layout_mode = 2 + +[node name="MarginContainer" type="MarginContainer" parent="TextureRect/PanelContainer/VBoxContainer"] +layout_mode = 2 +theme_override_constants/margin_left = 50 +theme_override_constants/margin_top = 50 +theme_override_constants/margin_right = 50 +theme_override_constants/margin_bottom = 25 + +[node name="VBoxContainer" type="VBoxContainer" parent="TextureRect/PanelContainer/VBoxContainer/MarginContainer"] +layout_mode = 2 +theme_override_constants/separation = 30 + +[node name="ChangeLanguageContentLabel" type="Label" parent="TextureRect/PanelContainer/VBoxContainer/MarginContainer/VBoxContainer"] +unique_name_in_owner = true +custom_minimum_size = Vector2(1200, 0) +layout_mode = 2 +size_flags_vertical = 1 +theme_override_font_sizes/font_size = 60 +text = "CHANGE_LANGUAGE_POPUP" +autowrap_mode = 2 + +[node name="ChangeLanguageLanguageField" type="OptionButton" parent="TextureRect/PanelContainer/VBoxContainer/MarginContainer/VBoxContainer"] +unique_name_in_owner = true +custom_minimum_size = Vector2(0, 120) +layout_mode = 2 +theme = ExtResource("2_chglg") +theme_override_font_sizes/font_size = 60 +autowrap_mode = 2 + +[node name="HBoxContainer" type="HBoxContainer" parent="TextureRect/PanelContainer/VBoxContainer/MarginContainer/VBoxContainer"] +layout_mode = 2 + +[node name="ChangeLanguageConfirmButton" type="Button" parent="TextureRect/PanelContainer/VBoxContainer/MarginContainer/VBoxContainer/HBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +theme_type_variation = &"DangerButton" +theme_override_font_sizes/font_size = 70 +text = "VALIDATE" + +[node name="Separator" type="Control" parent="TextureRect/PanelContainer/VBoxContainer/MarginContainer/VBoxContainer/HBoxContainer"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="ChangeLanguageCancelButton" type="Button" parent="TextureRect/PanelContainer/VBoxContainer/MarginContainer/VBoxContainer/HBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +theme_override_font_sizes/font_size = 70 +text = "CANCEL" + +[connection signal="pressed" from="TextureRect/PanelContainer/VBoxContainer/MarginContainer/VBoxContainer/HBoxContainer/ChangeLanguageConfirmButton" to="." method="_on_confirm_button_pressed"] +[connection signal="pressed" from="TextureRect/PanelContainer/VBoxContainer/MarginContainer/VBoxContainer/HBoxContainer/ChangeLanguageCancelButton" to="." method="_on_cancel_button_pressed"] diff --git a/sources/utils/autoloads/server_manager.gd b/sources/utils/autoloads/server_manager.gd index a2367617..b98b0f99 100644 --- a/sources/utils/autoloads/server_manager.gd +++ b/sources/utils/autoloads/server_manager.gd @@ -174,6 +174,14 @@ func set_user_language(language: String) -> Dictionary: await _post_request("set_language", data) return _response() + +func reset_language(language: String) -> Dictionary: + loading_rect.show() + Log.warn("ServerManager: Reset language request initiated for %s" % language) + var data: Dictionary = {"language": language} + await _post_request("reset_language", data) + return _response() + #region Sender functions func check_internet_access() -> bool: From 5797c040d794884a4f2d560c8e5a4ed50f2e63d1 Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Mon, 20 Apr 2026 09:32:07 +0200 Subject: [PATCH 033/111] Make login error readable for frontend/backend --- kalulu_localization.csv | 5 +++++ sources/menus/main/login.gd | 28 +++++++++++++++++++++++++++- 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/kalulu_localization.csv b/kalulu_localization.csv index 23c87251..7038dbfd 100644 --- a/kalulu_localization.csv +++ b/kalulu_localization.csv @@ -11,6 +11,11 @@ EMAIL,Adresse mail,Correo electrónico,Endereço eletrônico,Indirizzo email PASSWORD,Mot de passe,Contraseña,Senha,Password LOG_IN,Se connecter,Ingresar,Conexão,Accedi INVALID_EMAIL_OR_PASSWORD,Adresse mail ou mot de passe invalide,Correo electrónico o contraseña inválida,Endereço de e-mail ou senha inválidos,Email o password non validi +LOGIN_USER_NOT_FOUND,Aucun compte ne correspond à cette adresse mail,No existe ninguna cuenta con este correo electrónico,Nenhuma conta corresponde a este e-mail,Nessun account corrisponde a questa email +LOGIN_WRONG_PASSWORD,Mot de passe incorrect,Contraseña incorrecta,Senha incorreta,Password errata +LOGIN_MISSING_CREDENTIALS,Veuillez renseigner votre adresse mail et votre mot de passe,"Por favor, introduzca su correo electrónico y su contraseña","Por favor, informe seu e-mail e sua senha",Inserisci email e password +LOGIN_SERVER_ERROR,"Erreur serveur, veuillez réessayer plus tard","Error del servidor, inténtelo más tarde","Erro do servidor, tente novamente mais tarde","Errore del server, riprova più tardi" +LOGIN_NETWORK_ERROR,"Connexion au serveur échouée, vérifiez votre accès Internet","Error de conexión al servidor, verifique su acceso a Internet","Falha na conexão com o servidor, verifique seu acesso à Internet","Connessione al server fallita, verifica il tuo accesso a Internet" RESET_PASSWORD,Réinitialiser le mot de passe,Restablecer la contraseña,Redefinir senha,Reimposta password CHECK_YOUR_EMAIL,Veuillez vérifier votre boîte mail,"Por favor, revise su correo electrónico","Por favor, verifique seu e-mail",Controlla la tua email RESET_PASSWORD_FAILED,"Erreur lors de la réinitialisation, réessayez plus tard","Error al restablecer la contraseña, inténtelo más tarde","Erro ao redefinir a senha, tente novamente mais tarde","Errore nel reimpostare la password, riprova più tardi" diff --git a/sources/menus/main/login.gd b/sources/menus/main/login.gd index 4b5e559f..8e5e2e0f 100644 --- a/sources/menus/main/login.gd +++ b/sources/menus/main/login.gd @@ -40,7 +40,7 @@ func _on_validate_button_pressed() -> void: if not validator.validate(): Log.info("Login: Validation failed for email %s" % email_field.text) return - + # Request server for login Log.info("Login: Sending login request for email %s" % email_field.text) var res: Dictionary = await ServerManager.login(email_field.text, password_field.text) @@ -52,14 +52,40 @@ func _on_validate_button_pressed() -> void: logged_in.emit() else: Log.info("Login: UserDataManager rejected server response during login") + login_message.text = "LOGIN_SERVER_ERROR" login_message.show() reset_password_button.show() else: Log.info("Login: Server responded with code %d for login attempt with email %s" % [res.code, email_field.text]) + login_message.text = _translation_key_for_error(res) login_message.show() reset_password_button.show() +func _translation_key_for_error(res: Dictionary) -> String: + # Network failure: no HTTP response received (code stays 0 in ServerManager). + if res.code == 0: + return "LOGIN_NETWORK_ERROR" + + var body: Dictionary = (res.body as Dictionary) if res.body is Dictionary else {} + var error_code: String = str(body.get("error_code", "")) + match error_code: + "USER_NOT_FOUND": + return "LOGIN_USER_NOT_FOUND" + "INVALID_PASSWORD": + return "LOGIN_WRONG_PASSWORD" + "MISSING_CREDENTIALS": + return "LOGIN_MISSING_CREDENTIALS" + "SERVER_ERROR": + return "LOGIN_SERVER_ERROR" + "BAD_REQUEST": + return "LOGIN_SERVER_ERROR" + + if res.code >= 500: + return "LOGIN_SERVER_ERROR" + return "INVALID_EMAIL_OR_PASSWORD" + + func _on_reset_password_button_pressed() -> void: Log.info("Login: Reset password requested for email %s" % email_field.text) reset_password_button.disabled = true From f61639f9aecbd63da8939432d142d34bc2ec6495 Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Mon, 20 Apr 2026 09:51:41 +0200 Subject: [PATCH 034/111] Reset password button only show if password is invalid and hides in other cases --- sources/menus/main/login.gd | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/sources/menus/main/login.gd b/sources/menus/main/login.gd index 8e5e2e0f..de65f087 100644 --- a/sources/menus/main/login.gd +++ b/sources/menus/main/login.gd @@ -52,14 +52,22 @@ func _on_validate_button_pressed() -> void: logged_in.emit() else: Log.info("Login: UserDataManager rejected server response during login") - login_message.text = "LOGIN_SERVER_ERROR" - login_message.show() - reset_password_button.show() + _show_login_error("LOGIN_SERVER_ERROR") else: Log.info("Login: Server responded with code %d for login attempt with email %s" % [res.code, email_field.text]) - login_message.text = _translation_key_for_error(res) - login_message.show() + _show_login_error(_translation_key_for_error(res)) + + +func _show_login_error(translation_key: String) -> void: + login_message.text = translation_key + login_message.show() + # Offer password reset only when the email exists and the password is wrong — + # resetting is useless for any other failure (unknown account, network, server…). + if translation_key == "LOGIN_WRONG_PASSWORD": + reset_password_button.disabled = false reset_password_button.show() + else: + reset_password_button.hide() func _translation_key_for_error(res: Dictionary) -> String: From 5e8807a664f48462a29a54ffd2832ead5c7f1dec Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Mon, 20 Apr 2026 10:36:17 +0200 Subject: [PATCH 035/111] GUT tests --- .../test_account_lifecycle.gd | 44 +++++++++++++++++-- 1 file changed, 40 insertions(+), 4 deletions(-) diff --git a/tests/integration_tests/test_account_lifecycle.gd b/tests/integration_tests/test_account_lifecycle.gd index 850307ff..fcba6e7f 100644 --- a/tests/integration_tests/test_account_lifecycle.gd +++ b/tests/integration_tests/test_account_lifecycle.gd @@ -218,6 +218,39 @@ func test_full_account_creation_login_and_deletion() -> void: assert_eq(charlie.level as int, StudentData.Level.ADULT, "Charlie should be Adult (2)") + # ------------------------------------------------------------------ + # Step 5b – Login with wrong password must report INVALID_PASSWORD + # ------------------------------------------------------------------ + gut.p("Step 5b: Attempting login with a wrong password…") + var wrong_pw_res: Dictionary = await ServerManager.login(_test_email, TEST_PASSWORD + "_wrong") + assert_eq(wrong_pw_res.code as int, 401, + "Login with wrong password should return 401") + var wrong_pw_body: Dictionary = wrong_pw_res.body as Dictionary + assert_eq(str(wrong_pw_body.get("error_code", "")), "INVALID_PASSWORD", + "Wrong password for an existing email should return error_code INVALID_PASSWORD") + + assert_engine_error("Response code = 401", + "Expected: server returns 401 for wrong password") + assert_engine_error("INVALID_PASSWORD", + "Expected: wrong password should report INVALID_PASSWORD") + + # ------------------------------------------------------------------ + # Step 5c – Login with unknown email must report USER_NOT_FOUND + # ------------------------------------------------------------------ + gut.p("Step 5c: Attempting login with an unknown email…") + var unknown_email: String = TEST_EMAIL_PREFIX + "unknown_" + str(Time.get_ticks_usec()) + TEST_EMAIL_DOMAIN + var unknown_res: Dictionary = await ServerManager.login(unknown_email, TEST_PASSWORD) + assert_eq(unknown_res.code as int, 401, + "Login with unknown email should return 401") + var unknown_body: Dictionary = unknown_res.body as Dictionary + assert_eq(str(unknown_body.get("error_code", "")), "USER_NOT_FOUND", + "Unknown email should return error_code USER_NOT_FOUND") + + assert_engine_error("Response code = 401", + "Expected: server returns 401 for unknown email") + assert_engine_error("USER_NOT_FOUND", + "Expected: unknown email should report USER_NOT_FOUND") + # ------------------------------------------------------------------ # Step 6 – Set auth context and delete the account # ------------------------------------------------------------------ @@ -248,14 +281,17 @@ func test_full_account_creation_login_and_deletion() -> void: UserDataManager.teacher_settings = null var login_after_del: Dictionary = await ServerManager.login(_test_email, TEST_PASSWORD) - assert_ne(login_after_del.code as int, 200, - "Login should fail after account deletion (expected 401, got %d)" % login_after_del.code) + assert_eq(login_after_del.code as int, 401, + "Login should fail with 401 after account deletion (got %d)" % login_after_del.code) + var deleted_body: Dictionary = login_after_del.body as Dictionary + assert_eq(str(deleted_body.get("error_code", "")), "USER_NOT_FOUND", + "Login after deletion should return error_code USER_NOT_FOUND") # Handle expected warnings: server returns 401 for deleted account login assert_engine_error("Response code = 401", "Expected: server returns 401 for deleted account") - assert_engine_error("Login or password incorrect", - "Expected: login should fail after account deletion") + assert_engine_error("USER_NOT_FOUND", + "Expected: login after deletion should report USER_NOT_FOUND") # ------------------------------------------------------------------ # Step 8 – Email should be available again From 5e6ddf3f5366e3d0482fd2035c3ba729723cb4b9 Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Mon, 20 Apr 2026 10:53:25 +0200 Subject: [PATCH 036/111] Debug gut tests --- .../test_account_lifecycle.gd | 29 +++++++------------ 1 file changed, 10 insertions(+), 19 deletions(-) diff --git a/tests/integration_tests/test_account_lifecycle.gd b/tests/integration_tests/test_account_lifecycle.gd index fcba6e7f..3ef0f322 100644 --- a/tests/integration_tests/test_account_lifecycle.gd +++ b/tests/integration_tests/test_account_lifecycle.gd @@ -229,11 +229,6 @@ func test_full_account_creation_login_and_deletion() -> void: assert_eq(str(wrong_pw_body.get("error_code", "")), "INVALID_PASSWORD", "Wrong password for an existing email should return error_code INVALID_PASSWORD") - assert_engine_error("Response code = 401", - "Expected: server returns 401 for wrong password") - assert_engine_error("INVALID_PASSWORD", - "Expected: wrong password should report INVALID_PASSWORD") - # ------------------------------------------------------------------ # Step 5c – Login with unknown email must report USER_NOT_FOUND # ------------------------------------------------------------------ @@ -246,11 +241,6 @@ func test_full_account_creation_login_and_deletion() -> void: assert_eq(str(unknown_body.get("error_code", "")), "USER_NOT_FOUND", "Unknown email should return error_code USER_NOT_FOUND") - assert_engine_error("Response code = 401", - "Expected: server returns 401 for unknown email") - assert_engine_error("USER_NOT_FOUND", - "Expected: unknown email should report USER_NOT_FOUND") - # ------------------------------------------------------------------ # Step 6 – Set auth context and delete the account # ------------------------------------------------------------------ @@ -287,12 +277,6 @@ func test_full_account_creation_login_and_deletion() -> void: assert_eq(str(deleted_body.get("error_code", "")), "USER_NOT_FOUND", "Login after deletion should return error_code USER_NOT_FOUND") - # Handle expected warnings: server returns 401 for deleted account login - assert_engine_error("Response code = 401", - "Expected: server returns 401 for deleted account") - assert_engine_error("USER_NOT_FOUND", - "Expected: login after deletion should report USER_NOT_FOUND") - # ------------------------------------------------------------------ # Step 8 – Email should be available again # ------------------------------------------------------------------ @@ -306,10 +290,17 @@ func test_full_account_creation_login_and_deletion() -> void: # cannot reach those, so we mark them manually via get_errors(). # "Database is null" warnings are also expected when the godot-sqlite addon # is absent (e.g. in GitHub Actions), so we suppress them here too. + # Each failed login produces two ServerManager warnings (HTTP code line + # + pretty-printed body). We acknowledge all of them here because + # assert_engine_error() handles only the first occurrence of a pattern. for err: GutTrackedError in get_errors(): - if not err.handled and err.contains_text("Database file not found"): - err.handled = true - if not err.handled and err.contains_text("Database is null"): + if err.handled: + continue + if err.contains_text("Database file not found") \ + or err.contains_text("Database is null") \ + or err.contains_text("Response code = 401") \ + or err.contains_text("INVALID_PASSWORD") \ + or err.contains_text("USER_NOT_FOUND"): err.handled = true gut.p("All steps passed.") From 9afd95213a5666655f3f6d73096d2eae8fdc86a5 Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Mon, 20 Apr 2026 12:00:47 +0200 Subject: [PATCH 037/111] Larger button for developer menu --- sources/menus/login/login.tscn | 1 + sources/menus/main/main_menu.gd | 3 ++- sources/menus/main/main_menu.tscn | 10 +++++++++- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/sources/menus/login/login.tscn b/sources/menus/login/login.tscn index b3669b8d..c1167a30 100644 --- a/sources/menus/login/login.tscn +++ b/sources/menus/login/login.tscn @@ -92,6 +92,7 @@ mouse_filter = 2 [node name="BuildVersionValue" type="Label" parent="InterfaceLeft/Container" unique_id=758975831] unique_name_in_owner = true +custom_minimum_size = Vector2(0, 120) layout_mode = 2 mouse_filter = 0 theme_override_font_sizes/font_size = 30 diff --git a/sources/menus/main/main_menu.gd b/sources/menus/main/main_menu.gd index 22edead1..b340118e 100644 --- a/sources/menus/main/main_menu.gd +++ b/sources/menus/main/main_menu.gd @@ -11,6 +11,7 @@ var dev_click_count: int = 0 var dev_last_click_time: float = 0.0 @onready var version_label: Label = $Informations/BuildVersionValue +@onready var version_click_area: Control = $Informations/VersionClickArea @onready var teacher_label: Label = $Informations/TeacherValue @onready var device_id_label: Label = $Informations/DeviceIDValue @onready var kalulu: KALULU = $Kalulu @@ -25,7 +26,7 @@ func _ready() -> void: version_label.text = Utils.get_application_version_with_code() teacher_label.text = UserDataManager.get_device_settings().teacher device_id_label.text = str(UserDataManager.get_device_settings().device_id) - version_label.gui_input.connect(_on_version_label_gui_input) + version_click_area.gui_input.connect(_on_version_label_gui_input) OpeningCurtain.open() diff --git a/sources/menus/main/main_menu.tscn b/sources/menus/main/main_menu.tscn index 99b1006b..fcc752fd 100644 --- a/sources/menus/main/main_menu.tscn +++ b/sources/menus/main/main_menu.tscn @@ -395,11 +395,19 @@ layout_mode = 1 offset_left = 410.0 offset_right = 560.0 offset_bottom = 56.0 -mouse_filter = 0 theme_override_font_sizes/font_size = 30 text = "?" vertical_alignment = 1 +[node name="VersionClickArea" type="Control" parent="Informations"] +unique_name_in_owner = true +layout_mode = 1 +offset_left = 270.0 +offset_top = -80.0 +offset_right = 620.0 +offset_bottom = 56.0 +mouse_filter = 0 + [node name="TeacherTitle" type="Label" parent="Informations" unique_id=102169017] custom_minimum_size = Vector2(400, 0) layout_mode = 0 From 9d518d038fade21b80604fbc9139cfb567c227c2 Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Thu, 23 Apr 2026 10:36:35 +0200 Subject: [PATCH 038/111] Sparks fx now appears correctly on the "first" video button of look and learn. --- sources/look_and_learn/look_and_learn.gd | 1 + sources/menus/main/main_menu.tscn | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/sources/look_and_learn/look_and_learn.gd b/sources/look_and_learn/look_and_learn.gd index 5d521ac1..b85f13b1 100644 --- a/sources/look_and_learn/look_and_learn.gd +++ b/sources/look_and_learn/look_and_learn.gd @@ -33,6 +33,7 @@ func _ready() -> void: Log.trace("LookAndLearn: Starting lesson %d" % lesson_nb) setup() await (OpeningCurtain as OpeningCurtainClass).open() + grapheme_particles.emitting = true func setup() -> void: diff --git a/sources/menus/main/main_menu.tscn b/sources/menus/main/main_menu.tscn index fcc752fd..a086b475 100644 --- a/sources/menus/main/main_menu.tscn +++ b/sources/menus/main/main_menu.tscn @@ -399,14 +399,14 @@ theme_override_font_sizes/font_size = 30 text = "?" vertical_alignment = 1 -[node name="VersionClickArea" type="Control" parent="Informations"] +[node name="VersionClickArea" type="Control" parent="Informations" unique_id=1005725962] unique_name_in_owner = true layout_mode = 1 +anchors_preset = 0 offset_left = 270.0 offset_top = -80.0 offset_right = 620.0 offset_bottom = 56.0 -mouse_filter = 0 [node name="TeacherTitle" type="Label" parent="Informations" unique_id=102169017] custom_minimum_size = Vector2(400, 0) From b307c86e4f27ea1fef3c69a2491e4e534c09b4b1 Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Thu, 23 Apr 2026 11:17:39 +0200 Subject: [PATCH 039/111] Ants spawn all at once and travel together --- sources/minigames/ants/ants_minigame.gd | 45 ++++++++++++++++--------- 1 file changed, 30 insertions(+), 15 deletions(-) diff --git a/sources/minigames/ants/ants_minigame.gd b/sources/minigames/ants/ants_minigame.gd index b449b3cb..6cbd85ec 100644 --- a/sources/minigames/ants/ants_minigame.gd +++ b/sources/minigames/ants/ants_minigame.gd @@ -4,6 +4,8 @@ const BLANK_SCENE: PackedScene = preload("res://sources/minigames/ants/blank.tsc const ANT_SCENE: PackedScene = preload("res://sources/minigames/ants/ant.tscn") const WORD_SCENE: PackedScene = preload("res://sources/minigames/ants/word.tscn") const LABEL_SETTINGS: LabelSettings = preload("res://resources/themes/minigames_label_settings_ants.tres") +const SPAWN_SPACING: float = 600.0 +const REFERENCE_DURATION: float = 1.3985 # Ants travel duration var current_sentence: Dictionary = {} var answer_input_done: Array[bool] = [] @@ -217,31 +219,44 @@ func setup_sentence_background() -> void: func _start_ants() -> void: var total_ants: int = ants.get_child_count() + if total_ants == 0: + return - # Animate each ant, one after another + var spawn_position: Vector2 = ants_spawn.global_position + var start_position: Vector2 = ants_start.global_position + var end_position: Vector2 = ants_end.global_position + var denominator: float = maxf(1.0, float(total_ants - 1)) # Avoid division by zero when there is only one ant + + # Spawn the ants in a line off-screen in the same order as their on-screen targets: + # ant 0 heads to the leftmost target, so it must also be leftmost in the spawn line. + # This keeps their relative order constant while they all move right, preventing crossings. for ant_index: int in range(total_ants): var ant: Ant = ants.get_child(ant_index) + var offset: float = -float(total_ants - 1 - ant_index) * SPAWN_SPACING + ant.global_position = spawn_position + Vector2(offset, 0.0) + # Constant speed derived from ant 0's travel, so the leftmost ant stops first + # and each subsequent ant stops shortly after as it reaches its own target. + var ant0: Ant = ants.get_child(0) + var reference_distance: float = maxf(1.0, ant0.global_position.distance_to(start_position)) + var speed: float = reference_distance / REFERENCE_DURATION + + var tweens: Array[Tween] = [] + for ant_index: int in range(total_ants): + var ant: Ant = ants.get_child(ant_index) ant.walk() - # Create a tween to move the ant from start to end point - var tween: Tween = create_tween() - - # Compute interpolation factor (0.0 to 1.0) based on position in the list - var denominator: float = maxf(1.0, float(total_ants - 1)) # Avoid division by zero when there is only one ant var position_ratio: float = float(ant_index) / denominator - - # Interpolate position from ants_start to ants_end using the ratio - var start_position: Vector2 = ants_start.global_position - var end_position: Vector2 = ants_end.global_position var target_position: Vector2 = lerp(start_position, end_position, position_ratio) + var duration: float = ant.global_position.distance_to(target_position) / speed - # Animate the movement over 1 second - tween.tween_property(ant, "global_position", target_position, 1.0) - await tween.finished + var tween: Tween = create_tween() + tween.tween_property(ant, "global_position", target_position, duration) + tween.tween_callback(ant.idle) + tweens.append(tween) - # Switch to idle state once movement is complete - ant.idle() + # Wait for the last ant (longest travel) to reach its position. + await tweens[tweens.size() - 1].finished # Reactivate all words once ants have reached their positions for word: Word in words.get_children(): From 195f2305d596e29eefe15c65703339e1fa4c4673 Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Thu, 23 Apr 2026 11:30:56 +0200 Subject: [PATCH 040/111] Position lower and more to the right --- sources/minigames/ants/ants_minigame.tscn | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/sources/minigames/ants/ants_minigame.tscn b/sources/minigames/ants/ants_minigame.tscn index 842d8552..ca5b0522 100644 --- a/sources/minigames/ants/ants_minigame.tscn +++ b/sources/minigames/ants/ants_minigame.tscn @@ -41,10 +41,10 @@ texture = ExtResource("7_ihrng") [node name="MarginContainer" type="MarginContainer" parent="GameRoot" parent_id_path=PackedInt32Array(1053321881) index="1" unique_id=1085551937] layout_mode = 0 -offset_left = 530.0 -offset_top = 254.0 -offset_right = 530.0 -offset_bottom = 254.0 +offset_left = 400.0 +offset_top = 350.0 +offset_right = 470.0 +offset_bottom = 350.0 theme_override_constants/margin_left = 20 [node name="SentenceBackground" type="HFlowContainer" parent="GameRoot/MarginContainer" index="0" unique_id=306719963] From 8e58ad537f2f735caaf19dfe49a862e34fe0f28b Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Thu, 23 Apr 2026 11:44:06 +0200 Subject: [PATCH 041/111] Center sentence --- sources/minigames/ants/ants_minigame.tscn | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/sources/minigames/ants/ants_minigame.tscn b/sources/minigames/ants/ants_minigame.tscn index ca5b0522..fdbc3ed2 100644 --- a/sources/minigames/ants/ants_minigame.tscn +++ b/sources/minigames/ants/ants_minigame.tscn @@ -40,11 +40,13 @@ mouse_filter = 2 texture = ExtResource("7_ihrng") [node name="MarginContainer" type="MarginContainer" parent="GameRoot" parent_id_path=PackedInt32Array(1053321881) index="1" unique_id=1085551937] -layout_mode = 0 +layout_mode = 1 +anchors_preset = -1 +anchor_top = 0.45 +anchor_bottom = 0.45 offset_left = 400.0 -offset_top = 350.0 offset_right = 470.0 -offset_bottom = 350.0 +grow_vertical = 2 theme_override_constants/margin_left = 20 [node name="SentenceBackground" type="HFlowContainer" parent="GameRoot/MarginContainer" index="0" unique_id=306719963] From d9a1a35e130ca354f2e686ed99b1ab7e60899e9f Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Thu, 23 Apr 2026 12:02:33 +0200 Subject: [PATCH 042/111] Debug long sentences and background positioning --- sources/minigames/ants/ants_minigame.gd | 4 +++- sources/minigames/ants/blank.tscn | 6 +++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/sources/minigames/ants/ants_minigame.gd b/sources/minigames/ants/ants_minigame.gd index 6cbd85ec..1c41d553 100644 --- a/sources/minigames/ants/ants_minigame.gd +++ b/sources/minigames/ants/ants_minigame.gd @@ -4,6 +4,7 @@ const BLANK_SCENE: PackedScene = preload("res://sources/minigames/ants/blank.tsc const ANT_SCENE: PackedScene = preload("res://sources/minigames/ants/ant.tscn") const WORD_SCENE: PackedScene = preload("res://sources/minigames/ants/word.tscn") const LABEL_SETTINGS: LabelSettings = preload("res://resources/themes/minigames_label_settings_ants.tres") +const LINE_HEIGHT: float = 159.0 # Matches sentence_text_box.png and blank row height const SPAWN_SPACING: float = 600.0 const REFERENCE_DURATION: float = 1.3985 # Ants travel duration @@ -183,7 +184,7 @@ func _next_sentence() -> void: else: var label: Label = Label.new() sentence_container.add_child(label) - + if current_word == ".": label.text = current_word + " " else: @@ -191,6 +192,7 @@ func _next_sentence() -> void: label.vertical_alignment = VERTICAL_ALIGNMENT_CENTER label.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER label.label_settings = LABEL_SETTINGS + label.custom_minimum_size.y = LINE_HEIGHT await setup_sentence_background() diff --git a/sources/minigames/ants/blank.tscn b/sources/minigames/ants/blank.tscn index 14090ac5..389284af 100644 --- a/sources/minigames/ants/blank.tscn +++ b/sources/minigames/ants/blank.tscn @@ -4,12 +4,12 @@ [ext_resource type="Script" uid="uid://bydhpvtn71v5a" path="res://sources/minigames/ants/blank.gd" id="2_mvcny"] [sub_resource type="RectangleShape2D" id="RectangleShape2D_pwxu7"] -size = Vector2(610, 230) +size = Vector2(610, 160) [node name="Blank" type="TextureRect" unique_id=764966448] modulate = Color(0.5254902, 0.4509804, 0.8980392, 1) offset_right = 594.0 -offset_bottom = 229.0 +offset_bottom = 159.0 size_flags_horizontal = 4 size_flags_vertical = 4 texture = ExtResource("1_iy5b6") @@ -20,5 +20,5 @@ collision_mask = 0 monitoring = false [node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D" unique_id=2104163297] -position = Vector2(305, 115) +position = Vector2(297, 80) shape = SubResource("RectangleShape2D_pwxu7") From 72c01cc338715b5b086ccec842b53840d11f8a98 Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Thu, 23 Apr 2026 15:08:55 +0200 Subject: [PATCH 043/111] Better color and special effect when victory threshold reached --- sources/minigames/boss/boss_minigame.gd | 29 +++++++++++++++++++++-- sources/minigames/boss/boss_minigame.tscn | 2 +- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/sources/minigames/boss/boss_minigame.gd b/sources/minigames/boss/boss_minigame.gd index 55b2079a..9a810d58 100644 --- a/sources/minigames/boss/boss_minigame.gd +++ b/sources/minigames/boss/boss_minigame.gd @@ -2,6 +2,8 @@ extends Minigame const FINAL_BOSS_GAME_DURATION: int = 20 * 60 const FINAL_BOSS_TOTAL_WORDS: int = 180 +const GAUGE_COLOR_LOW: Color = Color(0.55, 0.95, 0.45) +const GAUGE_COLOR_HIGH: Color = Color(0.996078, 0.776471, 0.2) @export var game_duration: int = 4 * 60 @export var minimum_correct_ratio: float = 0.8 @@ -19,6 +21,8 @@ var _boss_answer_start_ms: int = 0 var default_label_settings: LabelSettings var default_label_background_color: Color var _correct_answer_tween: Tween +var _victory_pulse_tween: Tween +var _victory_threshold_reached: bool = false @onready var text_start_zone: Control = %ControlText @onready var texture_button_bin: TextureButton = $GameRoot/TextureButtonBin @@ -336,8 +340,29 @@ func _update_progression_gauge() -> void: # Keep at least one pixel unfilled while there are still words to answer. margin_top_ratio = max(margin_top_ratio, 1.0 / progress_gauge.size.y) progress_gauge.margin_top_ratio = margin_top_ratio - if _get_win_ratio() >= minimum_correct_ratio: - progress_gauge_internal.modulate = winning_color + var ratio: float = _get_win_ratio() + if ratio >= minimum_correct_ratio: + if not _victory_threshold_reached: + _victory_threshold_reached = true + _play_victory_threshold_effect() + else: + var weight: float = clamp(ratio / minimum_correct_ratio, 0.0, 1.0) + progress_gauge_internal.modulate = GAUGE_COLOR_LOW.lerp(GAUGE_COLOR_HIGH, weight) + + +func _play_victory_threshold_effect() -> void: + if _victory_pulse_tween and _victory_pulse_tween.is_running(): + _victory_pulse_tween.kill() + right_stars.global_position = progress_gauge_internal.global_position + progress_gauge_internal.size / 2.0 + right_stars.replay() + _victory_pulse_tween = create_tween() + _victory_pulse_tween.tween_method( + func(hue: float) -> void: + progress_gauge_internal.modulate = Color.from_hsv(fmod(hue, 1.0), 0.8, 1.0), + 0.0, 1.0, 1.8 + ).set_trans(Tween.TRANS_LINEAR) + _victory_pulse_tween.tween_property(progress_gauge_internal, "modulate", GAUGE_COLOR_HIGH, 0.4) \ + .set_trans(Tween.TRANS_SINE).set_ease(Tween.EASE_OUT) func _get_win_ratio() -> float: diff --git a/sources/minigames/boss/boss_minigame.tscn b/sources/minigames/boss/boss_minigame.tscn index 2c733241..d1ba6e32 100644 --- a/sources/minigames/boss/boss_minigame.tscn +++ b/sources/minigames/boss/boss_minigame.tscn @@ -236,7 +236,7 @@ margin_top_ratio = 0.95 [node name="ProgressionGaugeInternal" type="NinePatchRect" parent="GameRoot/ProgressionGauge/ProgressionGaugePercentMarginContainer" index="0" unique_id=1534553679] unique_name_in_owner = true -modulate = Color(0.996078, 0.776471, 0.2, 1) +modulate = Color(0.54901963, 0.9490196, 0.4509804, 1) layout_mode = 2 texture = ExtResource("12_w5m1b") patch_margin_top = 33 From bac87eb46a2b379cfafd7cd67f2ada2a7a968259 Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Thu, 23 Apr 2026 15:49:36 +0200 Subject: [PATCH 044/111] Add frame delay in _setup_minigame() to optimize minigame loading and avoid ram overload --- sources/minigames/monkeys/monkeys_minigame.gd | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sources/minigames/monkeys/monkeys_minigame.gd b/sources/minigames/monkeys/monkeys_minigame.gd index 91379219..2314eb1d 100644 --- a/sources/minigames/monkeys/monkeys_minigame.gd +++ b/sources/minigames/monkeys/monkeys_minigame.gd @@ -47,6 +47,7 @@ func _setup_minigame() -> void: var settings: DifficultySettings = difficulty_settings[difficulty] for index: int in range(settings.distractors_count + 1): + await get_tree().process_frame Log.trace("MonkeysMinigame: SetupMinigame: Instantiate new monkey") var monkey: Monkey = MONKEY_SCENE.instantiate() monkeys_node.add_child(monkey) @@ -74,6 +75,7 @@ func _setup_minigame() -> void: _update_label(0) # Pre-warm particle shaders to avoid stutter on first coconut explosion + await get_tree().process_frame await monkeys[0].coconut.broken_coconut_fx.warm_up() From d2b406da061f99a17d474a186e8df01ae854072c Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Thu, 23 Apr 2026 16:09:35 +0200 Subject: [PATCH 045/111] Optimize monkey architecture for coconut and fx --- sources/minigames/monkeys/coconut.gd | 12 +++++--- sources/minigames/monkeys/coconut.tscn | 3 -- sources/minigames/monkeys/monkey.gd | 29 +++++++++++++++++++ sources/minigames/monkeys/monkeys_minigame.gd | 29 ++++++++++--------- .../minigames/monkeys/monkeys_minigame.tscn | 3 ++ 5 files changed, 56 insertions(+), 20 deletions(-) diff --git a/sources/minigames/monkeys/coconut.gd b/sources/minigames/monkeys/coconut.gd index df44f51c..3c01d377 100644 --- a/sources/minigames/monkeys/coconut.gd +++ b/sources/minigames/monkeys/coconut.gd @@ -7,10 +7,12 @@ var text: String: if label: label.text = text +# External, shared across all coconuts in the minigame. Set by the minigame before play. +var broken_fx: BrokenCoconutFX + @onready var highlight_fx: HighlightFX = $HighlightFX @onready var sprite: Sprite2D = $Sprite2D @onready var label: Label = $Label -@onready var broken_coconut_fx: BrokenCoconutFX = $BrokenCoconutFX func _ready() -> void: @@ -26,7 +28,9 @@ func explode() -> void: highlight_fx.stop() sprite.hide() label.hide() - - await broken_coconut_fx.play() - + + if broken_fx: + broken_fx.global_position = global_position + await broken_fx.play() + queue_free() diff --git a/sources/minigames/monkeys/coconut.tscn b/sources/minigames/monkeys/coconut.tscn index 1eabfad6..4f2c2561 100644 --- a/sources/minigames/monkeys/coconut.tscn +++ b/sources/minigames/monkeys/coconut.tscn @@ -4,7 +4,6 @@ [ext_resource type="Script" uid="uid://q6go00k3f50e" path="res://sources/minigames/monkeys/coconut.gd" id="1_yojn5"] [ext_resource type="PackedScene" uid="uid://cge0uyn30tcpv" path="res://sources/utils/fx/highlight.tscn" id="2_8nuxj"] [ext_resource type="LabelSettings" uid="uid://c4n6n26sxuxbh" path="res://resources/themes/minigames_label_settings_monkey_coconut.tres" id="4_50ros"] -[ext_resource type="PackedScene" uid="uid://cnt2q4hqn1wsq" path="res://sources/minigames/monkeys/broken_coconut_fx.tscn" id="5_ddd0v"] [node name="Coconut" type="Node2D" unique_id=458844620] script = ExtResource("1_yojn5") @@ -27,5 +26,3 @@ text = "e" label_settings = ExtResource("4_50ros") horizontal_alignment = 1 vertical_alignment = 1 - -[node name="BrokenCoconutFX" parent="." unique_id=745079414 instance=ExtResource("5_ddd0v")] diff --git a/sources/minigames/monkeys/monkey.gd b/sources/minigames/monkeys/monkey.gd index 16c7a937..576279dd 100644 --- a/sources/minigames/monkeys/monkey.gd +++ b/sources/minigames/monkeys/monkey.gd @@ -4,6 +4,8 @@ extends Node2D signal pressed() signal dragged_into_self() +const COCONUT_SCENE: PackedScene = preload("res://sources/minigames/monkeys/coconut.tscn") + var locked: bool = true: set(value): locked = value or stunned @@ -21,12 +23,23 @@ var stimulus: Dictionary = {}: else: coconut.text = "" drag_preview_label.text = "" +# Shared explosion FX owned by the minigame. Propagated to the monkey's coconut on assign. +var broken_fx: BrokenCoconutFX: + set(value): + broken_fx = value + if coconut: + coconut.broken_fx = value var blink_counter: int = 0 var blink_delay: int = 3 var blink_random: int = 3 var grab_animation_name: String = "grab" var grab_time: float = 1.0 +# Captured on _ready so reset_coconut can spawn replacements with the scene-designed transform. +var _coconut_initial_position: Vector2 +var _coconut_initial_rotation: float +var _coconut_initial_scale: Vector2 + @onready var stars: AnimatedSprite2D = $Stars @onready var coconut: Coconut = $Coconut @onready var drag_preview_label: Label = $Button/DragPreview/Label @@ -40,6 +53,22 @@ var grab_time: float = 1.0 func _ready() -> void: (button as Control).set_drag_forwarding(_get_drag_data, _can_drop_data, _drop_data) grab_time = Utils.get_animation_duration(animated_sprite_2d, grab_animation_name) + _coconut_initial_position = coconut.position + _coconut_initial_rotation = coconut.rotation + _coconut_initial_scale = coconut.scale + + +# Spawn a fresh coconut child with the scene-designed transform. Called after the +# previous one was reparented/freed during a throw. +func reset_coconut() -> void: + var new_coconut: Coconut = COCONUT_SCENE.instantiate() + new_coconut.position = _coconut_initial_position + new_coconut.rotation = _coconut_initial_rotation + new_coconut.scale = _coconut_initial_scale + new_coconut.broken_fx = broken_fx + new_coconut.hide() + add_child(new_coconut) + coconut = new_coconut func _on_button_pressed() -> void: diff --git a/sources/minigames/monkeys/monkeys_minigame.gd b/sources/minigames/monkeys/monkeys_minigame.gd index 2314eb1d..8c9e58cf 100644 --- a/sources/minigames/monkeys/monkeys_minigame.gd +++ b/sources/minigames/monkeys/monkeys_minigame.gd @@ -37,6 +37,7 @@ var is_locked: bool = true: @onready var word_label: RichTextLabel = $GameRoot/TextPlank/Label @onready var parabola_summit: Control = $GameRoot/ParabolaSummit @onready var text_plank: Sprite2D = $GameRoot/TextPlank +@onready var broken_coconut_fx: BrokenCoconutFX = $GameRoot/BrokenCoconutFX # Find and set the parameters of the minigame, like the number of lives or the victory conditions. @@ -52,10 +53,11 @@ func _setup_minigame() -> void: var monkey: Monkey = MONKEY_SCENE.instantiate() monkeys_node.add_child(monkey) monkeys.append(monkey) - + monkey.broken_fx = broken_coconut_fx + var pos: Node2D = possible_positions_parent.get_child(index) as Node2D monkey.global_position = pos.global_position - + monkey.pressed.connect(_on_monkey_pressed.bind(monkey)) monkey.dragged_into_self.connect(_on_monkey_pressed.bind(monkey)) @@ -73,10 +75,10 @@ func _setup_minigame() -> void: ) _update_label(0) - - # Pre-warm particle shaders to avoid stutter on first coconut explosion + + # Pre-warm particle shaders on the single shared FX instance to avoid stutter on first explosion. await get_tree().process_frame - await monkeys[0].coconut.broken_coconut_fx.warm_up() + await broken_coconut_fx.warm_up() func _start() -> void: @@ -121,18 +123,19 @@ func _play_monkey_stimulus(monkey: Monkey) -> void: func _get_coconut_from_monkey_to_king(monkey: Monkey) -> Node2D: monkey.stop_highlight() - + await monkey.play("start_throw") monkey.play("finish_throw") - + audio_player.stream = AUDIO_STREAMS[Audio.SEND_TO_KING] audio_player.play() - - var coconut: Coconut = monkey.coconut.duplicate() - monkey.coconut.hide() - game_root.add_child(coconut) - coconut.text = monkey.coconut.text - coconut.global_transform = monkey.coconut.global_transform + + # Reparent the monkey's own coconut (keeps global transform) and give the monkey a + # fresh one. Avoids allocating a new Coconut subtree — including particle systems — + # on every throw, which was a likely cause of stutters / crashes on low-end devices. + var coconut: Coconut = monkey.coconut + coconut.reparent(game_root) + monkey.reset_coconut() var tween: Tween = create_tween() tween.set_parallel() tween.tween_property(coconut, "global_position:x", (coconut.global_position.x + king.catch_position.global_position.x) / 2, throw_to_king_duration / 2).set_trans(Tween.TRANS_LINEAR) diff --git a/sources/minigames/monkeys/monkeys_minigame.tscn b/sources/minigames/monkeys/monkeys_minigame.tscn index b892bdc2..bca111b5 100644 --- a/sources/minigames/monkeys/monkeys_minigame.tscn +++ b/sources/minigames/monkeys/monkeys_minigame.tscn @@ -11,6 +11,7 @@ [ext_resource type="Texture2D" uid="uid://blejqny5syems" path="res://assets/minigames/monkeys/graphic/billboard.png" id="8_j0b56"] [ext_resource type="FontFile" uid="uid://bj2rpti6g24kk" path="res://assets/fonts/kalulu_mulish_bold.otf" id="10_ebf48"] [ext_resource type="Texture2D" uid="uid://u2x8lg54e1g" path="res://assets/minigames/monkeys/graphic/caterpillar.png" id="11_ebf48"] +[ext_resource type="PackedScene" uid="uid://cnt2q4hqn1wsq" path="res://sources/minigames/monkeys/broken_coconut_fx.tscn" id="12_brkfx"] [node name="MonkeysMinigame" unique_id=2041470235 instance=ExtResource("1_6nhsm")] script = ExtResource("2_12lw5") @@ -106,6 +107,8 @@ offset_top = 36.0 offset_right = 1356.0 offset_bottom = 76.0 +[node name="BrokenCoconutFX" parent="GameRoot" parent_id_path=PackedInt32Array(1053321881) index="8" unique_id=1488112341 instance=ExtResource("12_brkfx")] + [node name="Caterpillar" type="Sprite2D" parent="." index="4" unique_id=229164884] position = Vector2(1124, 1349.0001) scale = Vector2(0.31, 0.31) From 915b6c45eea5ae8094d9781f267c663cfb25430c Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Thu, 23 Apr 2026 16:33:24 +0200 Subject: [PATCH 046/111] Further optimize monkeys initialization --- sources/minigames/base/base_minigame.gd | 6 ++++-- sources/minigames/monkeys/monkeys_minigame.gd | 1 - sources/minigames/monkeys/monkeys_minigame.tscn | 1 + 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/sources/minigames/base/base_minigame.gd b/sources/minigames/base/base_minigame.gd index ac046d8d..fde3e5ff 100644 --- a/sources/minigames/base/base_minigame.gd +++ b/sources/minigames/base/base_minigame.gd @@ -137,7 +137,10 @@ func _initialize() -> void: if not Engine.is_editor_hint(): _find_stimuli_and_distractions() - _setup_minigame() + # Await so minigames whose setup is a coroutine (e.g. staged instantiation, + # particle shader warmup) finish before the curtain opens and _start() runs. + @warning_ignore("redundant_await") + await _setup_minigame() Log.info("BaseMinigame: Initialize %s (lesson %d, minigame #%d, difficulty %d)" % [TYPE_NAMES[minigame_name], lesson_nb, minigame_number, difficulty]) @@ -195,7 +198,6 @@ func _notification(what: int) -> void: if not _is_paused: _pause_start = Time.get_ticks_msec() / 1000.0 _is_paused = true - NOTIFICATION_APPLICATION_FOCUS_IN: if _is_paused: var resumed: float = Time.get_ticks_msec() / 1000.0 diff --git a/sources/minigames/monkeys/monkeys_minigame.gd b/sources/minigames/monkeys/monkeys_minigame.gd index 8c9e58cf..279852a0 100644 --- a/sources/minigames/monkeys/monkeys_minigame.gd +++ b/sources/minigames/monkeys/monkeys_minigame.gd @@ -206,7 +206,6 @@ func _on_current_word_progression_changed() -> void: else: monkey.stimulus = _get_distractor() monkey.stunned = false - monkey.coconut.show() var coroutine: Coroutine = Coroutine.new() if audio_player.playing: diff --git a/sources/minigames/monkeys/monkeys_minigame.tscn b/sources/minigames/monkeys/monkeys_minigame.tscn index bca111b5..e9e124f5 100644 --- a/sources/minigames/monkeys/monkeys_minigame.tscn +++ b/sources/minigames/monkeys/monkeys_minigame.tscn @@ -108,6 +108,7 @@ offset_right = 1356.0 offset_bottom = 76.0 [node name="BrokenCoconutFX" parent="GameRoot" parent_id_path=PackedInt32Array(1053321881) index="8" unique_id=1488112341 instance=ExtResource("12_brkfx")] +layout_mode = 0 [node name="Caterpillar" type="Sprite2D" parent="." index="4" unique_id=229164884] position = Vector2(1124, 1349.0001) From 3c4d85f03203e48fd6dc363fe171259701146154 Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Thu, 23 Apr 2026 16:35:23 +0200 Subject: [PATCH 047/111] Nomenclature --- sources/minigames/monkeys/coconut.gd | 3 --- sources/minigames/monkeys/monkey.gd | 1 - 2 files changed, 4 deletions(-) diff --git a/sources/minigames/monkeys/coconut.gd b/sources/minigames/monkeys/coconut.gd index 3c01d377..1bb22582 100644 --- a/sources/minigames/monkeys/coconut.gd +++ b/sources/minigames/monkeys/coconut.gd @@ -6,7 +6,6 @@ var text: String: text = value if label: label.text = text - # External, shared across all coconuts in the minigame. Set by the minigame before play. var broken_fx: BrokenCoconutFX @@ -28,9 +27,7 @@ func explode() -> void: highlight_fx.stop() sprite.hide() label.hide() - if broken_fx: broken_fx.global_position = global_position await broken_fx.play() - queue_free() diff --git a/sources/minigames/monkeys/monkey.gd b/sources/minigames/monkeys/monkey.gd index 576279dd..7dbc88d5 100644 --- a/sources/minigames/monkeys/monkey.gd +++ b/sources/minigames/monkeys/monkey.gd @@ -34,7 +34,6 @@ var blink_delay: int = 3 var blink_random: int = 3 var grab_animation_name: String = "grab" var grab_time: float = 1.0 - # Captured on _ready so reset_coconut can spawn replacements with the scene-designed transform. var _coconut_initial_position: Vector2 var _coconut_initial_rotation: float From 9c6ffa1b28f6cfae9c667117ccc685df82d5bde6 Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Thu, 23 Apr 2026 17:03:11 +0200 Subject: [PATCH 048/111] Add clouds to monkeys minigame --- .../minigames/monkeys/monkeys_minigame.tscn | 46 ++++++++++++++----- 1 file changed, 34 insertions(+), 12 deletions(-) diff --git a/sources/minigames/monkeys/monkeys_minigame.tscn b/sources/minigames/monkeys/monkeys_minigame.tscn index e9e124f5..ffb96c93 100644 --- a/sources/minigames/monkeys/monkeys_minigame.tscn +++ b/sources/minigames/monkeys/monkeys_minigame.tscn @@ -12,6 +12,10 @@ [ext_resource type="FontFile" uid="uid://bj2rpti6g24kk" path="res://assets/fonts/kalulu_mulish_bold.otf" id="10_ebf48"] [ext_resource type="Texture2D" uid="uid://u2x8lg54e1g" path="res://assets/minigames/monkeys/graphic/caterpillar.png" id="11_ebf48"] [ext_resource type="PackedScene" uid="uid://cnt2q4hqn1wsq" path="res://sources/minigames/monkeys/broken_coconut_fx.tscn" id="12_brkfx"] +[ext_resource type="Script" uid="uid://cgtd34f7vi2tj" path="res://sources/utils/clouds_manager.gd" id="13_xvtxv"] +[ext_resource type="Texture2D" uid="uid://rx270y4n7tul" path="res://assets/minigames/parakeets/graphic/cloud_1.png" id="14_uqlx5"] +[ext_resource type="Texture2D" uid="uid://dphj3hqfnnw4p" path="res://assets/minigames/parakeets/graphic/cloud_2.png" id="15_8kfwv"] +[ext_resource type="Texture2D" uid="uid://1btgagsporxa" path="res://assets/minigames/parakeets/graphic/cloud_3.png" id="16_j4fko"] [node name="MonkeysMinigame" unique_id=2041470235 instance=ExtResource("1_6nhsm")] script = ExtResource("2_12lw5") @@ -45,7 +49,25 @@ offset_right = 2561.0 offset_bottom = 1686.0 texture = ExtResource("4_awer8") -[node name="Ground" type="TextureRect" parent="GameRoot" parent_id_path=PackedInt32Array(1053321881) index="2" unique_id=220986790] +[node name="Clouds" type="Node2D" parent="GameRoot" parent_id_path=PackedInt32Array(1053321881) index="2" unique_id=2057497713] +script = ExtResource("13_xvtxv") +max_speed = 80.0 +min_y = 100.0 +max_y = 300.0 + +[node name="cloud_1" type="Sprite2D" parent="GameRoot/Clouds" index="0" unique_id=1028368352] +position = Vector2(623, 253.5) +texture = ExtResource("14_uqlx5") + +[node name="cloud_2" type="Sprite2D" parent="GameRoot/Clouds" index="1" unique_id=972157516] +position = Vector2(1088, 256) +texture = ExtResource("15_8kfwv") + +[node name="cloud_3" type="Sprite2D" parent="GameRoot/Clouds" index="2" unique_id=1712138587] +position = Vector2(1904, 248) +texture = ExtResource("16_j4fko") + +[node name="Ground" type="TextureRect" parent="GameRoot" parent_id_path=PackedInt32Array(1053321881) index="3" unique_id=220986790] custom_minimum_size = Vector2(2.08165e-12, 250) layout_mode = 0 offset_left = -0.5 @@ -54,7 +76,7 @@ offset_right = 2560.5 offset_bottom = 1925.5 texture = ExtResource("4_m2hoh") -[node name="PalmTreeMonkeys" type="Sprite2D" parent="GameRoot" parent_id_path=PackedInt32Array(1053321881) index="3" unique_id=1834595774] +[node name="PalmTreeMonkeys" type="Sprite2D" parent="GameRoot" parent_id_path=PackedInt32Array(1053321881) index="4" unique_id=1834595774] position = Vector2(1914, 870) scale = Vector2(1.4, 1) texture = ExtResource("5_2qxen") @@ -68,14 +90,14 @@ position = Vector2(-36.428574, 39) [node name="Position3" type="Marker2D" parent="GameRoot/PalmTreeMonkeys" index="2" unique_id=624156180] position = Vector2(-36.428574, 528) -[node name="PlamTreeKing" type="Sprite2D" parent="GameRoot" parent_id_path=PackedInt32Array(1053321881) index="4" unique_id=1643389803] +[node name="PlamTreeKing" type="Sprite2D" parent="GameRoot" parent_id_path=PackedInt32Array(1053321881) index="5" unique_id=1643389803] position = Vector2(819, 1039) texture = ExtResource("6_f5ri1") [node name="KingMonkey" parent="GameRoot/PlamTreeKing" index="0" unique_id=450360249 instance=ExtResource("7_43p1x")] position = Vector2(7, -701) -[node name="TextPlank" type="Sprite2D" parent="GameRoot" parent_id_path=PackedInt32Array(1053321881) index="5" unique_id=801038290] +[node name="TextPlank" type="Sprite2D" parent="GameRoot" parent_id_path=PackedInt32Array(1053321881) index="6" unique_id=801038290] position = Vector2(863, 1574) texture = ExtResource("8_j0b56") @@ -92,7 +114,12 @@ text = "gf[color=green]m[/color]" horizontal_alignment = 1 vertical_alignment = 1 -[node name="Monkeys" type="Control" parent="GameRoot" parent_id_path=PackedInt32Array(1053321881) index="6" unique_id=1039805988] +[node name="Caterpillar" type="Sprite2D" parent="GameRoot/TextPlank" index="1" unique_id=229164884] +position = Vector2(261, -224.99988) +scale = Vector2(0.31, 0.31) +texture = ExtResource("11_ebf48") + +[node name="Monkeys" type="Control" parent="GameRoot" parent_id_path=PackedInt32Array(1053321881) index="7" unique_id=1039805988] layout_mode = 1 anchors_preset = 15 anchor_right = 1.0 @@ -100,17 +127,12 @@ anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 -[node name="ParabolaSummit" type="Control" parent="GameRoot" parent_id_path=PackedInt32Array(1053321881) index="7" unique_id=321509035] +[node name="ParabolaSummit" type="Control" parent="GameRoot" parent_id_path=PackedInt32Array(1053321881) index="8" unique_id=321509035] anchors_preset = 0 offset_left = 1316.0 offset_top = 36.0 offset_right = 1356.0 offset_bottom = 76.0 -[node name="BrokenCoconutFX" parent="GameRoot" parent_id_path=PackedInt32Array(1053321881) index="8" unique_id=1488112341 instance=ExtResource("12_brkfx")] +[node name="BrokenCoconutFX" parent="GameRoot" parent_id_path=PackedInt32Array(1053321881) index="9" unique_id=1488112341 instance=ExtResource("12_brkfx")] layout_mode = 0 - -[node name="Caterpillar" type="Sprite2D" parent="." index="4" unique_id=229164884] -position = Vector2(1124, 1349.0001) -scale = Vector2(0.31, 0.31) -texture = ExtResource("11_ebf48") From d4c883da47c146a2e871161eeb6141f94575c4db Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Thu, 23 Apr 2026 17:09:06 +0200 Subject: [PATCH 049/111] Add moving clouds to penguin minigame --- .../minigames/penguin/penguin_minigame.tscn | 31 +++++++++++++++++-- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/sources/minigames/penguin/penguin_minigame.tscn b/sources/minigames/penguin/penguin_minigame.tscn index b8262ae2..fb9dbfe2 100644 --- a/sources/minigames/penguin/penguin_minigame.tscn +++ b/sources/minigames/penguin/penguin_minigame.tscn @@ -6,7 +6,11 @@ [ext_resource type="Texture2D" uid="uid://kwcp3ondyggo" path="res://assets/minigames/penguin/graphic/gauge_icon_penguin_empty.png" id="3_gdpi3"] [ext_resource type="PackedScene" uid="uid://b78362g1yif2n" path="res://sources/minigames/penguin/penguin.tscn" id="4_txvyj"] [ext_resource type="Texture2D" uid="uid://dq23np4euf6da" path="res://assets/minigames/penguin/graphic/gauge_icon_penguin_full.png" id="4_yua7j"] +[ext_resource type="Script" uid="uid://cgtd34f7vi2tj" path="res://sources/utils/clouds_manager.gd" id="6_ikkck"] [ext_resource type="Texture2D" uid="uid://b2bcmo1keh217" path="res://assets/minigames/ants/graphics/sentence_text_box.png" id="7_8iqp0"] +[ext_resource type="Texture2D" uid="uid://rx270y4n7tul" path="res://assets/minigames/parakeets/graphic/cloud_1.png" id="7_qq4ih"] +[ext_resource type="Texture2D" uid="uid://dphj3hqfnnw4p" path="res://assets/minigames/parakeets/graphic/cloud_2.png" id="8_mh8b7"] +[ext_resource type="Texture2D" uid="uid://1btgagsporxa" path="res://assets/minigames/parakeets/graphic/cloud_3.png" id="9_b75qo"] [node name="PenguinMinigame" unique_id=1041323901 instance=ExtResource("1_s6yuv")] script = ExtResource("2_ncha4") @@ -30,10 +34,31 @@ grow_horizontal = 2 grow_vertical = 2 texture = ExtResource("3_8crb3") -[node name="Penguin" parent="GameRoot" parent_id_path=PackedInt32Array(1053321881) index="1" unique_id=446017555 instance=ExtResource("4_txvyj")] +[node name="Clouds" type="Node2D" parent="GameRoot" parent_id_path=PackedInt32Array(1053321881) index="1" unique_id=1471723126] +script = ExtResource("6_ikkck") +max_speed = 80.0 +min_y = 100.0 +max_y = 300.0 + +[node name="cloud_1" type="Sprite2D" parent="GameRoot/Clouds" index="0" unique_id=772964697] +z_index = -3 +position = Vector2(623, 253.5) +texture = ExtResource("7_qq4ih") + +[node name="cloud_2" type="Sprite2D" parent="GameRoot/Clouds" index="1" unique_id=658891026] +z_index = -3 +position = Vector2(1088, 256) +texture = ExtResource("8_mh8b7") + +[node name="cloud_3" type="Sprite2D" parent="GameRoot/Clouds" index="2" unique_id=1388350244] +z_index = -3 +position = Vector2(1904, 248) +texture = ExtResource("9_b75qo") + +[node name="Penguin" parent="GameRoot" parent_id_path=PackedInt32Array(1053321881) index="2" unique_id=446017555 instance=ExtResource("4_txvyj")] position = Vector2(625, 1398.5) -[node name="SentenceBackground" type="HFlowContainer" parent="GameRoot" parent_id_path=PackedInt32Array(1053321881) index="2" unique_id=414621906] +[node name="SentenceBackground" type="HFlowContainer" parent="GameRoot" parent_id_path=PackedInt32Array(1053321881) index="3" unique_id=414621906] unique_name_in_owner = true visible = false custom_minimum_size = Vector2(0, 159) @@ -59,7 +84,7 @@ layout_mode = 2 texture = ExtResource("7_8iqp0") stretch_mode = 2 -[node name="Sentence" type="HFlowContainer" parent="GameRoot" parent_id_path=PackedInt32Array(1053321881) index="3" unique_id=162088451] +[node name="Sentence" type="HFlowContainer" parent="GameRoot" parent_id_path=PackedInt32Array(1053321881) index="4" unique_id=162088451] unique_name_in_owner = true layout_mode = 1 anchors_preset = 8 From 1d387d1ea671b93523d611e8c771539f68c96939 Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Fri, 24 Apr 2026 10:29:50 +0200 Subject: [PATCH 050/111] Debug difficulty system --- resources/user/user_difficulty.gd | 1 + sources/minigames/base/base_minigame.gd | 28 ++++++++++++++++++------- 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/resources/user/user_difficulty.gd b/resources/user/user_difficulty.gd index 78e1553a..d4648d3f 100644 --- a/resources/user/user_difficulty.gd +++ b/resources/user/user_difficulty.gd @@ -16,6 +16,7 @@ func get_difficulty(minigame_name: String) -> int: # Adds a game to the minigame history of the user and update difficulty if needed func add_game(minigame_name: String, minigame_won: bool) -> void: + Log.trace("UserDifficulty: %s difficulty updated: win ? %s" % [minigame_name, minigame_won]) var history: UserMinigameHistory = minigames_histories.get(minigame_name, UserMinigameHistory.new()) history.add_game(minigame_won) minigames_histories[minigame_name] = history diff --git a/sources/minigames/base/base_minigame.gd b/sources/minigames/base/base_minigame.gd index fde3e5ff..508b4a98 100644 --- a/sources/minigames/base/base_minigame.gd +++ b/sources/minigames/base/base_minigame.gd @@ -67,7 +67,20 @@ var is_final_boss: bool = false # Stimuli var stimuli: Array = [] var distractions: Array = [] -# Lives +# Hidden lives counter — used ONLY to compute the next run's difficulty. +# +# The player never sees this value and can never "lose" a regular minigame because of it: +# every run ends with the win screen once `current_progression` reaches `max_progression`. +# Starts at `max_number_of_lives` and individual minigames decrement it with `current_lives -= 1` +# each time the child makes a mistake. It is allowed to go negative — that's the whole point. +# +# At end of game, `_win()` reads this value: +# - `current_lives >= 0` (fewer mistakes than allowed) → counted as a win, difficulty may go up +# - `current_lives < 0` (more mistakes than allowed) → counted as a loss, difficulty may go down +# +# The counter is also reused (as a convenient proxy for "how many recent mistakes") to drive +# the in-game hint system (Kalulu help speech and highlighting). That side effect IS visible to +# the player, but the raw lives number is not — do not add any UI that exposes it. var current_lives: int = 0: set(value): var previous_lives: int = current_lives @@ -235,12 +248,13 @@ func _win() -> void: update_scores() Log.info("BaseMinigame: %s won in %d seconds with progression %d/%d and %d/%d lives" % [TYPE_NAMES[minigame_name], _get_elapsed_time_seconds(), current_progression, max_progression, current_lives, max_number_of_lives]) - - # Difficulty - if current_lives <= 0: - UserDataManager.update_difficulty_for_minigame(TYPE_NAMES[minigame_name] as String, false) - else: - UserDataManager.update_difficulty_for_minigame(TYPE_NAMES[minigame_name] as String, true) + + # Hidden difficulty check — see the `current_lives` declaration above. + # The player always reaches this branch (no visible loss), but if they used up more than + # `max_number_of_lives` mistakes (`current_lives` ended strictly negative), this run is + # reported to the difficulty system as a loss so the next session eases up. + var counted_as_win: bool = current_lives >= 0 + UserDataManager.update_difficulty_for_minigame(TYPE_NAMES[minigame_name] as String, counted_as_win) audio_player.stream = WIN_SOUND_FX audio_player.play() From cf46d84b565c91656f29b36433dc09e605515be8 Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Fri, 24 Apr 2026 12:06:13 +0200 Subject: [PATCH 051/111] Debug highlight fx system --- sources/minigames/base/base_minigame.gd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sources/minigames/base/base_minigame.gd b/sources/minigames/base/base_minigame.gd index 508b4a98..192b38b4 100644 --- a/sources/minigames/base/base_minigame.gd +++ b/sources/minigames/base/base_minigame.gd @@ -91,7 +91,7 @@ var current_lives: int = 0: consecutive_errors += previous_lives - current_lives if current_lives <= max_number_of_lives - errors_before_help_speech: _play_kalulu_help_speech() - elif consecutive_errors == errors_before_highlight: + if consecutive_errors == errors_before_highlight: is_highlighting = true # Progression var current_progression: int = 0: set = set_current_progression From 06019e97d29087a0affb2e11bbce8fcd1cd94e21 Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Fri, 24 Apr 2026 15:57:26 +0200 Subject: [PATCH 052/111] Parakeets maximum letters = 1 --- sources/minigames/parakeets/parakeets_minigame.gd | 3 +++ sources/minigames/parakeets/parakeets_minigame.tscn | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/sources/minigames/parakeets/parakeets_minigame.gd b/sources/minigames/parakeets/parakeets_minigame.gd index a90dc773..4dfa3f1a 100644 --- a/sources/minigames/parakeets/parakeets_minigame.gd +++ b/sources/minigames/parakeets/parakeets_minigame.gd @@ -97,6 +97,9 @@ func _setup_minigame() -> void: # Find the stimuli and distractions of the minigame. func _find_stimuli_and_distractions() -> void: stimuli = Database.get_gps_for_lesson(lesson_nb, true) + # Only select stimuli with 1 letter, not more + stimuli = stimuli.filter(func(stimulus: Dictionary) -> bool: + return (stimulus.Grapheme as String).length() == 1) func _start() -> void: diff --git a/sources/minigames/parakeets/parakeets_minigame.tscn b/sources/minigames/parakeets/parakeets_minigame.tscn index ced3f2b3..40a225d1 100644 --- a/sources/minigames/parakeets/parakeets_minigame.tscn +++ b/sources/minigames/parakeets/parakeets_minigame.tscn @@ -19,7 +19,7 @@ script = ExtResource("2_x6xn5") fly_duration = 3.0 minigame_name = 2 -lesson_nb = 8 +lesson_nb = 60 difficulty = 4 max_number_of_lives = 5 From 91f4d57ef7a1f34303b2d181201b772a028d5ad3 Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Mon, 27 Apr 2026 10:46:11 +0200 Subject: [PATCH 053/111] Turtles disappear quickly when colliding with each other --- sources/minigames/turtles/turtle.gd | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/sources/minigames/turtles/turtle.gd b/sources/minigames/turtles/turtle.gd index f1754de9..a9cbed90 100644 --- a/sources/minigames/turtles/turtle.gd +++ b/sources/minigames/turtles/turtle.gd @@ -121,16 +121,21 @@ func change_font_color_after_collision() -> void: label.label_settings.font_color = Minigame.LABEL_COLOR_NEUTRAL -func disappear() -> void: +func disappear(fast: bool = false) -> void: is_moving = false head_area_collision_shape.set_deferred("disabled", true) body_area_collision_shape.set_deferred("disabled", true) - await get_tree().create_timer(randf_range(0.1, 0.2)).timeout + var speed_scale: float = 3.0 if fast else 1.0 + if fast: + sprite.speed_scale = speed_scale + else: + await get_tree().create_timer(randf_range(0.1, 0.2)).timeout sprite.play("disappear") + var fade_duration: float = sprite.sprite_frames.get_frame_count(sprite.animation) / sprite.sprite_frames.get_animation_speed(sprite.animation) / speed_scale var tween: Tween = create_tween() - tween.tween_property(label, "modulate:a", 0, sprite.sprite_frames.get_frame_count(sprite.animation) /sprite.sprite_frames.get_animation_speed(sprite.animation)) + tween.tween_property(label, "modulate:a", 0, fade_duration) var tween2: Tween = create_tween() - tween2.tween_property(body_back, "modulate:a", 0, sprite.sprite_frames.get_frame_count(sprite.animation) /sprite.sprite_frames.get_animation_speed(sprite.animation)) + tween2.tween_property(body_back, "modulate:a", 0, fade_duration) #endregion @@ -184,7 +189,7 @@ func _on_delete_timer_timeout() -> void: func _on_body_area_area_entered(_area: Area2D) -> void: - disappear() + disappear(true) #endregion From f95ff50c15ad61c9d59302ce60ee162652c753e9 Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Mon, 27 Apr 2026 11:06:48 +0200 Subject: [PATCH 054/111] Centers text on turtles, and make font a little smaller to fit double letters --- .../themes/minigames_label_settings_turtles.tres | 2 +- sources/minigames/turtles/turtle.tscn | 15 +++++++++++---- sources/minigames/turtles/turtles_minigame.tscn | 2 +- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/resources/themes/minigames_label_settings_turtles.tres b/resources/themes/minigames_label_settings_turtles.tres index 5ac4cbcc..c96eec8d 100644 --- a/resources/themes/minigames_label_settings_turtles.tres +++ b/resources/themes/minigames_label_settings_turtles.tres @@ -4,7 +4,7 @@ [resource] font = ExtResource("1_s26u4") -font_size = 100 +font_size = 90 font_color = Color(0.2, 0.2, 0.2, 1) outline_color = Color(0.2, 0.2, 0.2, 1) shadow_size = 0 diff --git a/sources/minigames/turtles/turtle.tscn b/sources/minigames/turtles/turtle.tscn index b32e7b40..58a914cb 100644 --- a/sources/minigames/turtles/turtle.tscn +++ b/sources/minigames/turtles/turtle.tscn @@ -110,10 +110,17 @@ shape = SubResource("CapsuleShape2D_xsnve") debug_color = Color(0.870588, 0.117647, 0, 0.388235) [node name="Label" type="Label" parent="." unique_id=1496868599] -offset_left = -64.0 -offset_top = -88.0 -offset_right = 72.0 -offset_bottom = 72.0 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -68.0 +offset_top = -80.0 +offset_right = 68.0 +offset_bottom = 80.0 +grow_horizontal = 2 +grow_vertical = 2 label_settings = ExtResource("6_8k7c6") horizontal_alignment = 1 vertical_alignment = 1 diff --git a/sources/minigames/turtles/turtles_minigame.tscn b/sources/minigames/turtles/turtles_minigame.tscn index 4d9a8740..7e185b80 100644 --- a/sources/minigames/turtles/turtles_minigame.tscn +++ b/sources/minigames/turtles/turtles_minigame.tscn @@ -380,7 +380,7 @@ animations = [{ [node name="TurtlesMinigame" unique_id=115388830 instance=ExtResource("1_geqym")] script = ExtResource("2_f5de7") minigame_name = 6 -lesson_nb = 24 +lesson_nb = 60 difficulty = 4 max_number_of_lives = 5 max_progression = 5 From 810f504a16dadf3a577fa076020bfcae658a6419 Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Mon, 27 Apr 2026 13:45:45 +0200 Subject: [PATCH 055/111] Take opener and terminator sign in sentences for the penguin minigame --- sources/minigames/penguin/penguin_minigame.gd | 47 +++++++++++++++++-- .../minigames/penguin/penguin_minigame.tscn | 1 + 2 files changed, 43 insertions(+), 5 deletions(-) diff --git a/sources/minigames/penguin/penguin_minigame.gd b/sources/minigames/penguin/penguin_minigame.gd index 1380bdd4..14a57659 100644 --- a/sources/minigames/penguin/penguin_minigame.gd +++ b/sources/minigames/penguin/penguin_minigame.gd @@ -1,6 +1,7 @@ extends Minigame const LABEL_SCENE: PackedScene = preload("res://sources/minigames/penguin/penguin_label.tscn") +const LABEL_SETTINGS: LabelSettings = preload("res://resources/themes/minigames_label_settings_penguins.tres") var current_word_progression: int = 0: set = _set_current_word_progression var max_word_progression: int = 0 @@ -93,17 +94,25 @@ func _setup_word_progression() -> void: labels.clear() var stimulus: Dictionary = _get_current_stimulus() - + var sentence_text: String = stimulus.get("Sentence", "") as String + var opener: String = _extract_sentence_opener(sentence_text) + var terminator: String = _extract_sentence_terminator(sentence_text) + var first_gp: bool = true var last_word_id: int = -1 var word_container: HBoxContainer - + for gp: Dictionary in stimulus.GPs: if gp.WordID != last_word_id: last_word_id = gp.WordID word_container = HBoxContainer.new() sentence_container.add_child(word_container) - + if first_gp and not opener.is_empty(): + var opener_label: Label = Label.new() + opener_label.text = opener + opener_label.label_settings = LABEL_SETTINGS + word_container.add_child(opener_label) + var label: PenguinLabel = LABEL_SCENE.instantiate() if first_gp: label.capitalized = true @@ -112,10 +121,16 @@ func _setup_word_progression() -> void: word_container.add_child(label) label.pressed.connect(_on_snowball_thrown.bind(label)) labels.append(label) - + if gp.Type == 0: max_word_progression += 1 - + + if word_container and not terminator.is_empty(): + var terminator_label: Label = Label.new() + terminator_label.text = terminator + terminator_label.label_settings = LABEL_SETTINGS + word_container.add_child(terminator_label) + setup_sentence_background() current_word_progression = 0 @@ -164,6 +179,28 @@ func _is_silent(gp: Dictionary) -> bool: return gp.Type == 0 +# Returns the trailing punctuation that closes the sentence (e.g. ".", "?", "!", "...", "?!"). +# Returns an empty string if none is found. +func _extract_sentence_terminator(sentence: String) -> String: + const TERMINATORS: PackedStringArray = [".", "?", "!", "…"] + var trimmed: String = sentence.strip_edges() + var end_index: int = trimmed.length() + while end_index > 0 and trimmed.substr(end_index - 1, 1) in TERMINATORS: + end_index -= 1 + return trimmed.substr(end_index) + + +# Returns the leading punctuation that opens the sentence (e.g. Spanish "¿", "¡", "¿¡"). +# Returns an empty string if none is found. +func _extract_sentence_opener(sentence: String) -> String: + const OPENERS: PackedStringArray = ["¿", "¡"] + var trimmed: String = sentence.strip_edges() + var end_index: int = 0 + while end_index < trimmed.length() and trimmed.substr(end_index, 1) in OPENERS: + end_index += 1 + return trimmed.substr(0, end_index) + + func _set_current_word_progression(p_current_word_progression: int) -> void: current_word_progression = p_current_word_progression if current_word_progression == max_word_progression: diff --git a/sources/minigames/penguin/penguin_minigame.tscn b/sources/minigames/penguin/penguin_minigame.tscn index fb9dbfe2..6c06ec9f 100644 --- a/sources/minigames/penguin/penguin_minigame.tscn +++ b/sources/minigames/penguin/penguin_minigame.tscn @@ -16,6 +16,7 @@ script = ExtResource("2_ncha4") minigame_name = 8 lesson_nb = 60 +difficulty = 4 max_number_of_lives = 5 max_progression = 5 From 512038313c4fe45acbea2ad28ffdcf92f3c50dbf Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Mon, 27 Apr 2026 15:53:22 +0200 Subject: [PATCH 056/111] debug-coconut-text --- sources/minigames/monkeys/coconut.tscn | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/sources/minigames/monkeys/coconut.tscn b/sources/minigames/monkeys/coconut.tscn index 4f2c2561..4f7d52fc 100644 --- a/sources/minigames/monkeys/coconut.tscn +++ b/sources/minigames/monkeys/coconut.tscn @@ -17,12 +17,18 @@ texture = ExtResource("1_fvymg") [node name="Label" type="Label" parent="." unique_id=1611286912] custom_minimum_size = Vector2(110, 2.08165e-12) -offset_left = -91.0 -offset_top = -100.0 -offset_right = 94.0 -offset_bottom = 101.0 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -144.0 +offset_top = -100.5 +offset_right = 144.0 +offset_bottom = 100.5 +grow_horizontal = 2 +grow_vertical = 2 theme_override_font_sizes/font_size = 70 -text = "e" label_settings = ExtResource("4_50ros") horizontal_alignment = 1 vertical_alignment = 1 From 6b86d35dfe788f9c3f8811e7adcaa58af42ee2a4 Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Tue, 28 Apr 2026 12:06:34 +0200 Subject: [PATCH 057/111] Penguin text alignment --- .../minigames/penguin/penguin_minigame.tscn | 55 ++++++++----------- 1 file changed, 22 insertions(+), 33 deletions(-) diff --git a/sources/minigames/penguin/penguin_minigame.tscn b/sources/minigames/penguin/penguin_minigame.tscn index 6c06ec9f..41bca4f5 100644 --- a/sources/minigames/penguin/penguin_minigame.tscn +++ b/sources/minigames/penguin/penguin_minigame.tscn @@ -59,47 +59,36 @@ texture = ExtResource("9_b75qo") [node name="Penguin" parent="GameRoot" parent_id_path=PackedInt32Array(1053321881) index="2" unique_id=446017555 instance=ExtResource("4_txvyj")] position = Vector2(625, 1398.5) -[node name="SentenceBackground" type="HFlowContainer" parent="GameRoot" parent_id_path=PackedInt32Array(1053321881) index="3" unique_id=414621906] +[node name="MarginContainer" type="MarginContainer" parent="GameRoot" parent_id_path=PackedInt32Array(1053321881) index="3" unique_id=946035874] +layout_mode = 1 +anchors_preset = -1 +anchor_top = 0.35 +anchor_bottom = 0.35 +offset_left = 400.0 +offset_right = 470.0 +grow_vertical = 2 +theme_override_constants/margin_left = 20 + +[node name="SentenceBackground" type="HFlowContainer" parent="GameRoot/MarginContainer" index="0" unique_id=419813655] unique_name_in_owner = true visible = false custom_minimum_size = Vector2(0, 159) -layout_mode = 1 -anchors_preset = 8 -anchor_left = 0.5 -anchor_top = 0.5 -anchor_right = 0.5 -anchor_bottom = 0.5 -offset_left = -800.0 -offset_top = -630.0 -offset_right = 1008.0 -offset_bottom = -130.0 -grow_horizontal = 2 -grow_vertical = 2 +layout_mode = 2 mouse_filter = 2 -theme_override_constants/v_separation = 20 +theme_override_constants/v_separation = 25 alignment = 1 -[node name="TextureRect" type="TextureRect" parent="GameRoot/SentenceBackground" index="0" unique_id=655579677] -z_index = -2 +[node name="TextureRect" type="TextureRect" parent="GameRoot/MarginContainer/SentenceBackground" index="0" unique_id=1032993373] layout_mode = 2 texture = ExtResource("7_8iqp0") -stretch_mode = 2 -[node name="Sentence" type="HFlowContainer" parent="GameRoot" parent_id_path=PackedInt32Array(1053321881) index="4" unique_id=162088451] +[node name="SentenceMargin" type="MarginContainer" parent="GameRoot/MarginContainer" index="1" unique_id=1134881747] +layout_mode = 2 +theme_override_constants/margin_left = 50 + +[node name="Sentence" type="HFlowContainer" parent="GameRoot/MarginContainer/SentenceMargin" index="0" unique_id=1061614278] unique_name_in_owner = true -layout_mode = 1 -anchors_preset = 8 -anchor_left = 0.5 -anchor_top = 0.5 -anchor_right = 0.5 -anchor_bottom = 0.5 -offset_left = -800.0 -offset_top = -630.0 -offset_right = 1008.0 -offset_bottom = -130.0 -grow_horizontal = 2 -grow_vertical = 2 +layout_mode = 2 mouse_filter = 2 -theme_override_constants/h_separation = 48 -theme_override_constants/v_separation = 20 -alignment = 1 +theme_override_constants/h_separation = 45 +theme_override_constants/v_separation = 25 From 728819cac1f15fc3d2849f29c83fa3023be53b02 Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Tue, 28 Apr 2026 14:00:45 +0200 Subject: [PATCH 058/111] Fix ScrollContainer single-child warning in gardens scene Move BossButtons, LockedLine and UnlockedLine out of the ScrollContainer so it only contains the HBoxContainer that drives its scroll size. BossButtons now tracks scrolling via a manual position offset in _process, mirroring what the lines and parallax background already do. --- sources/gardens/gardens.gd | 5 +++-- sources/gardens/gardens.tscn | 14 ++++++++------ 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/sources/gardens/gardens.gd b/sources/gardens/gardens.gd index bb0c5f36..1977c5e5 100644 --- a/sources/gardens/gardens.gd +++ b/sources/gardens/gardens.gd @@ -73,8 +73,8 @@ var back_button_hold_progress_seconds: float = 0.0 var is_back_button_hold_active: bool = false @onready var garden_parent: HBoxContainer = %GardenParent -@onready var locked_line: Line2D = $ScrollContainer/LockedLine -@onready var unlocked_line: Line2D = $ScrollContainer/UnlockedLine +@onready var locked_line: Line2D = $LockedLine +@onready var unlocked_line: Line2D = $UnlockedLine @onready var line_particles: GPUParticles2D = %LineParticles @onready var line_audio_stream_player: AudioStreamPlayer2D = %LineAudioStreamPlayer @onready var scroll_container: ScrollContainer = $ScrollContainer @@ -632,6 +632,7 @@ func _process(_delta: float) -> void: _process_back_button_hold(_delta) locked_line.position.x = - scroll_container.scroll_horizontal unlocked_line.position.x = - scroll_container.scroll_horizontal + boss_buttons_container.position.x = - scroll_container.scroll_horizontal parallax_background.scroll_offset.x = - scroll_container.scroll_horizontal diff --git a/sources/gardens/gardens.tscn b/sources/gardens/gardens.tscn index f084ecc9..b28190c8 100644 --- a/sources/gardens/gardens.tscn +++ b/sources/gardens/gardens.tscn @@ -196,20 +196,22 @@ size_flags_horizontal = 3 custom_minimum_size = Vector2(80, 2.08165e-12) layout_mode = 2 -[node name="BossButtons" type="Control" parent="ScrollContainer" unique_id=1176317047] +[node name="BossButtons" type="Control" parent="." unique_id=1176317047] unique_name_in_owner = true -layout_mode = 2 +layout_mode = 3 +anchors_preset = 0 +mouse_filter = 2 -[node name="LockedLine" type="Line2D" parent="ScrollContainer" unique_id=1229207154] +[node name="LockedLine" type="Line2D" parent="." unique_id=1229207154] unique_name_in_owner = true width = 20.0 default_color = Color(0.356863, 0.356863, 0.356863, 1) -[node name="UnlockedLine" type="Line2D" parent="ScrollContainer" unique_id=931930346] +[node name="UnlockedLine" type="Line2D" parent="." unique_id=931930346] unique_name_in_owner = true width = 50.0 -[node name="LineParticles" type="GPUParticles2D" parent="ScrollContainer/UnlockedLine" unique_id=213294011] +[node name="LineParticles" type="GPUParticles2D" parent="UnlockedLine" unique_id=213294011] unique_name_in_owner = true z_index = 1 material = SubResource("CanvasItemMaterial_13bcn") @@ -218,7 +220,7 @@ scale = Vector2(0.4, 0.4) texture = ExtResource("25_00sy7") process_material = SubResource("ParticleProcessMaterial_3eofo") -[node name="LineAudioStreamPlayer" type="AudioStreamPlayer2D" parent="ScrollContainer/UnlockedLine/LineParticles" unique_id=1534832715] +[node name="LineAudioStreamPlayer" type="AudioStreamPlayer2D" parent="UnlockedLine/LineParticles" unique_id=1534832715] unique_name_in_owner = true stream = ExtResource("26_5g3l0") volume_db = -5.0 From 750fe21da2a7d5d694e8c685caa46fa8d3a000ea Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Thu, 30 Apr 2026 15:50:11 +0200 Subject: [PATCH 059/111] Debug save sentences modified --- sources/language_tool/word_list_element.gd | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sources/language_tool/word_list_element.gd b/sources/language_tool/word_list_element.gd index 28018967..0f9f95f9 100644 --- a/sources/language_tool/word_list_element.gd +++ b/sources/language_tool/word_list_element.gd @@ -246,11 +246,11 @@ func insert_in_database() -> void: if word != element[table_graph_column] or exception != element.Exception or reading != element.Reading or writing != element.Writing: Database.db.update_rows(table, "ID=%s" % id, {table_graph_column: word, "Exception": exception, "Reading": reading, "Writing": writing}) if " ".join(gp_ids) != element[sub_table + "IDs"]: - var gps_in_words_ids: Array[String] = Array((element[relational_table + "IDs"] as String).split(" ")) + var gps_in_words_ids: Array = Array((element[relational_table + "IDs"] as String).split(" ")) while gps_in_words_ids.size() > gp_ids.size(): Database.db.delete_rows(relational_table, "ID=%s" % int(gps_in_words_ids.pop_back() as String)) for index: int in range(gps_in_words_ids.size()): - var gps_in_words_id: int = int(gps_in_words_ids[index]) + var gps_in_words_id: int = int(gps_in_words_ids[index] as String) Database.db.update_rows(relational_table, "ID=%s" % gps_in_words_id, { table_graph_column + "ID": id, sub_table_id: gp_ids[index], From e6a8655bb849c2cca7916a9495d7dd37814e294c Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Thu, 30 Apr 2026 16:07:49 +0200 Subject: [PATCH 060/111] Prof tool 1.4.1 export settings --- export_presets.cfg | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/export_presets.cfg b/export_presets.cfg index 9fd5e781..2ab78544 100644 --- a/export_presets.cfg +++ b/export_presets.cfg @@ -1410,7 +1410,7 @@ custom_features="" export_filter="all_resources" include_filter="model_database.db" exclude_filter="" -export_path="../Export/ProfTool/MacOS/Prof_Tool_MacOS_1.4.0.dmg" +export_path="../Export/Autobuild/Prof_Tool/1.4.1 (77)/MacOS/Prof_Tool_MacOS_1.4.1.dmg" patches=PackedStringArray() patch_delta_encoding=false patch_delta_compression_level_zstd=19 @@ -1437,8 +1437,8 @@ application/icon_interpolation=4 application/bundle_identifier="com.excellolab.proftool" application/signature="" application/app_category="Games" -application/short_version="1.4.0" -application/version="1.4.0" +application/short_version="1.4.1" +application/version="1.4.1" application/copyright="" application/copyright_localized={} application/min_macos_version_x86_64="10.12" @@ -1483,7 +1483,7 @@ codesign/entitlements/app_sandbox/files_user_selected=0 codesign/entitlements/app_sandbox/helper_executables=[] codesign/entitlements/additional="" codesign/custom_options=PackedStringArray() -notarization/notarization=2 +notarization/notarization=0 privacy/microphone_usage_description="" privacy/microphone_usage_description_localized={} privacy/camera_usage_description="" @@ -1677,7 +1677,7 @@ custom_features="" export_filter="all_resources" include_filter="" exclude_filter="" -export_path="../Export/ProfTool/Windows/Prof_Tool_Windows_1.4.0.zip" +export_path="./Prof_Tool_Windows_1.4.2.zip" patches=PackedStringArray() patch_delta_encoding=false patch_delta_compression_level_zstd=19 @@ -1711,8 +1711,8 @@ application/modify_resources=true application/icon="uid://dipdtrs4i7i7v" application/console_wrapper_icon="" application/icon_interpolation=4 -application/file_version="1.4.0" -application/product_version="1.4.0" +application/file_version="1.4.1" +application/product_version="1.4.1" application/company_name="ExcelloLab" application/product_name="Prof_Tool" application/file_description="Open-source educational app to teach reading skills using Godot, based on the graphemic method, designed for children aged 5+" From a58e59f6564e428a5bfc5494862b76161854adc4 Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Tue, 28 Apr 2026 15:31:53 +0200 Subject: [PATCH 061/111] New garden 02 (and cleaning) --- assets/gardens/gardens/garden_01_open.png | Bin 47176 -> 0 bytes assets/gardens/gardens/garden_02.png | Bin 0 -> 14636 bytes ...8_open.png.import => garden_02.png.import} | 8 +- assets/gardens/gardens/garden_02_open.png | Bin 37888 -> 0 bytes assets/gardens/gardens/garden_03_open.png | Bin 42725 -> 0 bytes assets/gardens/gardens/garden_04_open.png | Bin 45746 -> 0 bytes assets/gardens/gardens/garden_05_open.png | Bin 41502 -> 0 bytes .../gardens/gardens/garden_05_open.png.import | 40 --- assets/gardens/gardens/garden_06_open.png | Bin 45547 -> 0 bytes .../gardens/gardens/garden_06_open.png.import | 40 --- assets/gardens/gardens/garden_07_open.png | Bin 42612 -> 0 bytes .../gardens/gardens/garden_07_open.png.import | 40 --- assets/gardens/gardens/garden_08_open.png | Bin 38031 -> 0 bytes assets/gardens/gardens/garden_09_open.png | Bin 50839 -> 0 bytes .../gardens/gardens/garden_09_open.png.import | 40 --- assets/gardens/gardens/garden_10_open.png | Bin 46977 -> 0 bytes .../gardens/gardens/garden_10_open.png.import | 40 --- assets/gardens/gardens/garden_11_open.png | Bin 44270 -> 0 bytes .../gardens/gardens/garden_11_open.png.import | 40 --- assets/gardens/gardens/garden_12_open.png | Bin 38868 -> 0 bytes .../gardens/gardens/garden_12_open.png.import | 40 --- assets/gardens/gardens/garden_13_open.png | Bin 44562 -> 0 bytes .../gardens/gardens/garden_13_open.png.import | 40 --- assets/gardens/gardens/garden_14_open.png | Bin 37281 -> 0 bytes .../gardens/gardens/garden_14_open.png.import | 40 --- assets/gardens/gardens/garden_15_open.png | Bin 42444 -> 0 bytes .../gardens/gardens/garden_15_open.png.import | 40 --- assets/gardens/gardens/garden_16_open.png | Bin 51842 -> 0 bytes .../gardens/gardens/garden_16_open.png.import | 40 --- assets/gardens/gardens/garden_17_open.png | Bin 41349 -> 0 bytes assets/gardens/gardens/garden_18_open.png | Bin 41680 -> 0 bytes .../gardens/gardens/garden_18_open.png.import | 40 --- assets/gardens/gardens/garden_19_open.png | Bin 37266 -> 0 bytes .../gardens/gardens/garden_19_open.png.import | 40 --- assets/gardens/gardens/garden_20_open.png | Bin 43948 -> 0 bytes .../gardens/gardens/garden_20_open.png.import | 40 --- assets/gardens/turtle.png | Bin 0 -> 7144 bytes ...n_17_open.png.import => turtle.png.import} | 8 +- .../victory_asset_bubbles_01.png} | Bin .../victory_asset_bubbles_01.png.import} | 6 +- .../victory_asset_fish_01.png} | Bin .../victory_asset_fish_01.png.import} | 6 +- .../victory_asset_fish_02.png} | Bin .../victory_asset_fish_02.png.import} | 6 +- .../victory_asset_fragon_fly_01.png | Bin 0 -> 1825 bytes .../victory_asset_fragon_fly_01.png.import | 40 +++ .../victory_assets/victory_asset_pearl_01.png | Bin 0 -> 2332 bytes .../victory_asset_pearl_01.png.import} | 8 +- .../victory_asset_plant_01.png} | Bin .../victory_asset_plant_01.png.import} | 6 +- .../victory_asset_plant_02.png} | Bin .../victory_asset_plant_02.png.import} | 6 +- .../victory_asset_plant_03.png} | Bin .../victory_asset_plant_03.png.import} | 6 +- .../victory_asset_plant_04.png} | Bin .../victory_asset_plant_04.png.import} | 6 +- .../victory_asset_plant_05.png} | Bin .../victory_asset_plant_05.png.import} | 6 +- .../victory_assets/victory_asset_plant_06.png | Bin 0 -> 3388 bytes .../victory_asset_plant_06.png.import} | 8 +- .../victory_assets/victory_asset_plant_07.png | Bin 0 -> 3001 bytes .../victory_asset_plant_07.png.import} | 8 +- .../victory_assets/victory_asset_plant_08.png | Bin 0 -> 2494 bytes .../victory_asset_plant_08.png.import | 40 +++ .../victory_assets/victory_asset_plant_09.png | Bin 0 -> 3762 bytes .../victory_asset_plant_09.png.import | 40 +++ .../victory_assets/victory_asset_plant_10.png | Bin 0 -> 1323 bytes .../victory_asset_plant_10.png.import} | 8 +- resources/gardens/garden.gd | 36 +-- resources/gardens/garden_01.tscn | 55 ++-- resources/gardens/garden_02.tscn | 228 ++++++++-------- resources/gardens/garden_03.tscn | 246 +++++++++-------- resources/gardens/garden_04.tscn | 258 +++++++++--------- resources/gardens/garden_05.tscn | 258 +++++++++--------- resources/gardens/garden_06.tscn | 257 +++++++++-------- resources/gardens/garden_07.tscn | 257 +++++++++-------- resources/gardens/garden_08.tscn | 239 ++++++++-------- resources/gardens/garden_09.tscn | 239 ++++++++-------- resources/gardens/garden_10.tscn | 239 ++++++++-------- resources/gardens/garden_11.tscn | 239 ++++++++-------- resources/gardens/garden_12.tscn | 239 ++++++++-------- sources/gardens/gardens.gd | 2 +- 82 files changed, 1646 insertions(+), 1922 deletions(-) delete mode 100644 assets/gardens/gardens/garden_01_open.png create mode 100644 assets/gardens/gardens/garden_02.png rename assets/gardens/gardens/{garden_08_open.png.import => garden_02.png.import} (72%) delete mode 100644 assets/gardens/gardens/garden_02_open.png delete mode 100644 assets/gardens/gardens/garden_03_open.png delete mode 100644 assets/gardens/gardens/garden_04_open.png delete mode 100644 assets/gardens/gardens/garden_05_open.png delete mode 100644 assets/gardens/gardens/garden_05_open.png.import delete mode 100644 assets/gardens/gardens/garden_06_open.png delete mode 100644 assets/gardens/gardens/garden_06_open.png.import delete mode 100644 assets/gardens/gardens/garden_07_open.png delete mode 100644 assets/gardens/gardens/garden_07_open.png.import delete mode 100644 assets/gardens/gardens/garden_08_open.png delete mode 100644 assets/gardens/gardens/garden_09_open.png delete mode 100644 assets/gardens/gardens/garden_09_open.png.import delete mode 100644 assets/gardens/gardens/garden_10_open.png delete mode 100644 assets/gardens/gardens/garden_10_open.png.import delete mode 100644 assets/gardens/gardens/garden_11_open.png delete mode 100644 assets/gardens/gardens/garden_11_open.png.import delete mode 100644 assets/gardens/gardens/garden_12_open.png delete mode 100644 assets/gardens/gardens/garden_12_open.png.import delete mode 100644 assets/gardens/gardens/garden_13_open.png delete mode 100644 assets/gardens/gardens/garden_13_open.png.import delete mode 100644 assets/gardens/gardens/garden_14_open.png delete mode 100644 assets/gardens/gardens/garden_14_open.png.import delete mode 100644 assets/gardens/gardens/garden_15_open.png delete mode 100644 assets/gardens/gardens/garden_15_open.png.import delete mode 100644 assets/gardens/gardens/garden_16_open.png delete mode 100644 assets/gardens/gardens/garden_16_open.png.import delete mode 100644 assets/gardens/gardens/garden_17_open.png delete mode 100644 assets/gardens/gardens/garden_18_open.png delete mode 100644 assets/gardens/gardens/garden_18_open.png.import delete mode 100644 assets/gardens/gardens/garden_19_open.png delete mode 100644 assets/gardens/gardens/garden_19_open.png.import delete mode 100644 assets/gardens/gardens/garden_20_open.png delete mode 100644 assets/gardens/gardens/garden_20_open.png.import create mode 100644 assets/gardens/turtle.png rename assets/gardens/{gardens/garden_17_open.png.import => turtle.png.import} (72%) rename assets/gardens/{plants/garden_plant_05.png => victory_assets/victory_asset_bubbles_01.png} (100%) rename assets/gardens/{plants/garden_plant_05.png.import => victory_assets/victory_asset_bubbles_01.png.import} (72%) rename assets/gardens/{plants/garden_plant_03.png => victory_assets/victory_asset_fish_01.png} (100%) rename assets/gardens/{plants/garden_plant_03.png.import => victory_assets/victory_asset_fish_01.png.import} (72%) rename assets/gardens/{plants/garden_plant_08.png => victory_assets/victory_asset_fish_02.png} (100%) rename assets/gardens/{plants/garden_plant_08.png.import => victory_assets/victory_asset_fish_02.png.import} (72%) create mode 100644 assets/gardens/victory_assets/victory_asset_fragon_fly_01.png create mode 100644 assets/gardens/victory_assets/victory_asset_fragon_fly_01.png.import create mode 100644 assets/gardens/victory_assets/victory_asset_pearl_01.png rename assets/gardens/{gardens/garden_01_open.png.import => victory_assets/victory_asset_pearl_01.png.import} (70%) rename assets/gardens/{plants/garden_plant_01.png => victory_assets/victory_asset_plant_01.png} (100%) rename assets/gardens/{plants/garden_plant_01.png.import => victory_assets/victory_asset_plant_01.png.import} (72%) rename assets/gardens/{plants/garden_plant_02.png => victory_assets/victory_asset_plant_02.png} (100%) rename assets/gardens/{plants/garden_plant_02.png.import => victory_assets/victory_asset_plant_02.png.import} (72%) rename assets/gardens/{plants/garden_plant_04.png => victory_assets/victory_asset_plant_03.png} (100%) rename assets/gardens/{plants/garden_plant_04.png.import => victory_assets/victory_asset_plant_03.png.import} (72%) rename assets/gardens/{plants/garden_plant_06.png => victory_assets/victory_asset_plant_04.png} (100%) rename assets/gardens/{plants/garden_plant_06.png.import => victory_assets/victory_asset_plant_04.png.import} (72%) rename assets/gardens/{plants/garden_plant_07.png => victory_assets/victory_asset_plant_05.png} (100%) rename assets/gardens/{plants/garden_plant_07.png.import => victory_assets/victory_asset_plant_05.png.import} (72%) create mode 100644 assets/gardens/victory_assets/victory_asset_plant_06.png rename assets/gardens/{gardens/garden_04_open.png.import => victory_assets/victory_asset_plant_06.png.import} (70%) create mode 100644 assets/gardens/victory_assets/victory_asset_plant_07.png rename assets/gardens/{gardens/garden_02_open.png.import => victory_assets/victory_asset_plant_07.png.import} (70%) create mode 100644 assets/gardens/victory_assets/victory_asset_plant_08.png create mode 100644 assets/gardens/victory_assets/victory_asset_plant_08.png.import create mode 100644 assets/gardens/victory_assets/victory_asset_plant_09.png create mode 100644 assets/gardens/victory_assets/victory_asset_plant_09.png.import create mode 100644 assets/gardens/victory_assets/victory_asset_plant_10.png rename assets/gardens/{gardens/garden_03_open.png.import => victory_assets/victory_asset_plant_10.png.import} (70%) diff --git a/assets/gardens/gardens/garden_01_open.png b/assets/gardens/gardens/garden_01_open.png deleted file mode 100644 index dab9300885f4f82a6f4b9e292936a40119b4d243..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 47176 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 diff --git a/assets/gardens/gardens/garden_02.png b/assets/gardens/gardens/garden_02.png new file mode 100644 index 0000000000000000000000000000000000000000..aa47948918341520e0ebc5160eed6a7fd0000ae1 GIT binary patch literal 14636 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 p^y7(%_(I@ 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 Ona9!A75T*aEdGBNt3W*f diff --git a/assets/gardens/gardens/garden_03_open.png b/assets/gardens/gardens/garden_03_open.png deleted file mode 100644 index 4cc283198820403d4d50f44a9444179ef167cb91..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42725 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 AtpET3 diff --git a/assets/gardens/gardens/garden_04_open.png b/assets/gardens/gardens/garden_04_open.png deleted file mode 100644 index 6ee52f535fc6a4170a06874a8757e518fb2abb05..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45746 zcmeFYcUTnJ);CHJ5KtJE3=#xEiA_#TP?R8&X^?CaZDNx_GK!2y&_;qpl?(z(&L9ei zBqe7W8_5~T>8q}G=FH1E$LD?S{qA%Bk!KvJT6?X%_HTu~YVE4Wn(9ht$r#A+@bJ#6 zDBsY=!y{}5{w1F#2JUF?EkJ=^q)250S3ErO3)p}7cnL{#czBY_2;Dnwchqi6SvWcH z!!4c6t@ynhkicj>JgA%(5^iB<<;H4mWrJ{(xwKMUe~A@gDRW6*R1KnrRIs{-P`>YC zrE_0h*W$jNg{0*rIaxBOmlPnt!O9KJ>g8bX=qlwUa|x6y1^kV@EpUky9O7mtbLkp( zLe@KKnyd;=E>^6f{9=3-5HWF9aY=qbQE_n*ab8v-h@hwdL|8x=!Y3pwB?6HW5n}!M zb4ivA_zUV{X)UFFL-FTyz?ICUdv0z>DFFdbPfvbNVSXnU8v#K{Nl5{Skbsa7A25Q? z)!Wex?#1Wm%8nEAmz*0`t`;r`q#MG?krgW!ZtmpnCUfZ$cA~$3ey+;_`S(PQu0OE@ zP!#ZjBLxKcAp-x2$e%`l^5c_uwf}UHqaGt7J>q6l~QoAg1b4n=sG#s%i_FD^DhWl6%;_P zV!fh|aI|#tbiE1{ILY!ad;d$C)eX3tl`P#Qn@(&@n zktbxRIawmCz5gLYj89NhS5QPsL{thQ@=qE67f1H~9Zb%0I{cLyo0|l(mzK z1Kdp(;Q+U>5(9@(;99`Yujuuub zH)Meu{0M}ll#rl=q=co2C7+<6l^CC}5b&3|sHhO1wWtKd!dwDwEd&t)K~z)wC;PvN zzTsryj*S*TG%m4NI#~eX|D~3=h@=Qa(n^?5RM0{KJDWJ4q@=JYpM{`^n7M_JmAJW> z$X^rvL)gDfq~U@9@*dp&A7ij>ZwfI}pOtVOY&Aa22D0T&VDgNum@^9hTZi@+g* zLe>(3f`3i%AH@9IRLTffz+1il;l+S2gPBdo%K3lZ{fl6a05cR4?&4~NjX#-7e+A&* zDedo!h2;U`SPE`|&26$4*zmBjgbMtRyZ=(_Z_b}=h<`Wd{|*A2{C}|j_c=W8SvmeH zyl|qxQU6_ttCO{xC)~yAnhoF~|C`9iN&TN}C&fbruzP_$;{O9fxWYaD-G4rkB*8Cict>%T`L6uUV|0Z|Ni6da5m zAhiGO-oIwXjlYA9MtgT~ytohq_z@7q{{JWIKglOq4Svn~Px49De{sSb5pJ?TJ_Qv$ zar+-!*c}v?-gSUt&q`KIR8&|LDsb}lNe)efmzDjU8wel|yJGW+q&P4Y$aIqOA2|*F z!723DbRg$HC_g!I#`;HL21X(7E>QLX6{o=8CFj2d=-+wl|K=b6TGIbbsV8Lpp5z1| zzrOqp*RSz8LH!Na2|#{*`5UfZ<8y-g8?F<8{QB}YT))QW1obyuCjj~NE{)X!WAiuu+4cD*nIYIpm*9ky=efb-%U*mIv`Wvnjfc*OMH(bBQ=LGdPTqgke z_2qB4evQuw>TkGC0P^e0-*EjJpA*#IaGe0;*O$NH`ZYc$sK4Pl0m!c}f5Y`_d`?h* z!*v3XUtj))>(}_4p#FyI1R%e@{0-Ny@i{^L4c7@ketr2Hu3zJGg8Cb-6M+2s@;6++ z#^(g}H(VzG`Ss;5;UfFjN1RrUz?Ykzz$cn|KI*!_=bfw;%Gzppc=s>k;RQax!`nRu ze$V0IxkK>q=I`R+NyX#g(K?~bniTQyyku2wT+{U$UL5nR;j=M0I_wg)Q@`@+=B+^1 z+O$6|zYKQ!Sn%iFo4h;OSN4k8UJt$>C(4NXBVG9%n;QZCc><27>i1V_pFXr)sjTl} zu}h9ka&`I4pXWPX^C+pPYuv{~*eAcTU&eL9ds{fQwS+9Fzt}jUfSf4&cx9SJe7BzX zV$jzH&7fc{cU=;~n`W=h8``BaUQv7)lpFa)SutJe5$}btg8O*fUvir#x^8@Jo`5&A zXyRSfj-JSB4iMixNPoc1`lI3LC6U~S`ua#>hmT*bnc;`Q*F`x~8Bo&t^UMv&te*6+ zEx!5Xn|{Jb@#fKRfA{K_P-94X!OMBW#?q_6FQHGH zeO5i{vxZl~<_8aC&Nol^M+g_3%Yj_t)xkK~9o*rZP^2rpWJ1TeYkzQ%jd`Qw_9f)I zt^M9spe_l0c0u;=w|#b9YK%pknpt^n*^co|v7-ZZSsR|am^D+QqgBhi75BCk@#sUL z@YK_TKj6`nV+S(!N3vqpH-~q8oYGpi->yxB#wIY?F$O@IC)#!{NiB$K%N>&XQn-8 zs%KB#JtG#Dp`8cC-|I)#Co}f4YA#XuH9qMh*LtW$~$b2DN6P%77T_i2T~x z^?`3|WZEK+-RL06!H+lGam~HCI!8?Q%~Wg)qS2*U?g68mKKGZinADMBUxihbm?~YBz%(;dQU9bQGF|H;W?(4cV8ku4zMi2Tq9^Wu_OnNdr;w!Cy{p5Pa*qxo0p02{{jPccbR2G}$EaV7C%I?f4_izQ;OCw8P#6wNL= ztXGZcHy17iX+_AH#XSxFetR8$kTk5{d>r|@Ysx3J##-Njl{ZR*ZuoTWy^GF8W-0%Q8sVd%{yS^0BYuo)_Bg|GfTefzR zEHLDbr_TyWat$3&m8#toywyBYH71|yaKB@S%12z@U6;Id+O@zk@Ku&}bX>D@KU=h) zoP3B@v(H=DGm20017hI;6uB?$qGxi}W^9|Ln0#Gm^fATxuWZ+gXi@O>jW0cA65@5c z5Au7Pb=U^i=kBc+S4f7etyQg2=N3V|JDB9Gho>Z8L=+ZcqJyLdYN$78Xeg% zMHIaxC%n8f_UB4=eoD4@0Bva#`TMD)HFK1zw(%+BGfCu0L`ir_XN;$hqB&Ghmhk>t zaZ}8LlvO17QRKce@=F>!oU_Xn?>_65^?B>Jh{>+hHPlhpxwl2#yC{CGfUxs{6urb* ziBl4O#%~s+w%-9VILM1V__n|0^to%WdK0XsD>~M%*$%?&8hM-wTgxb?jJPt6D1)4y zCaFir5;C3jJ-b6NQh(bR1+enAKe6e_=-YTf*t6FFXT9J|#;8CHO-t|yI8#F}G?q18S?&(l^Rvh?hYPw#HnF0!3MbUJg z-u&L+Lw?kvpp4Zl#Jg?}{XiR9jozLc^wha|`$cDdW*mu_*WE@90vqib5-&L<6*3wh zE837U`P`zjzZ`+@bENI%WBH=OcZ-TP;|FadPir1dAyESOg{PPi*KrFj#*j9^Z^~*; z8Z^IK=Y~F-ih9)hl_(X@|9pjNxFT+9Zo5$(9^YWM&}Y6`-fteCy_rJlZ4+`Kv{#OR zgzgCl`G!09$f_w_Y8(&UGZMEBXr>SJ(TA_etV5v8r3b$1QHkSe$No zctAbrLG#^!uX8jrg!arNdDCod!-bXrUYsnGMSb`3+^>vb%h3^gG#6gP9e#Fz|45>d z?LpTPO~4VcI9UdLhhA1cU{y6p?IIB~X}Xt%t4TBzc9Q{QzB)H>P?0Q?)zk{zr$n+) zhJ-+DS4Y`=Gu{W?<|M&-HwU>e9?>KMmS({!_aOQ@-}6@LQ;dc?lAjO__4wOj^q?}< z>jN=N*NalC1KvMz9h6@;B5IL8qN+%1#rlC^MI%#%SsH~yZ(EIqfw-$Usy=(_$yxvN zgKZXA4Z5#WO*d@Q?rLAw@QAY`A^FU1=w(CRBI0F=JTC!=Z*7FOkeP}#gc5EeJs0|= zg+;u)o_W%yVHh`k(dwL73mC-Dw2pJE*j@}+a_ldNoo+2;?rR*eg-Q-i5Jo{R;)GyA zxV9hpo?pMPY@Q!j9bJua;Mq`^c)*-s`;d zA!~xAA5rf7fjo_@T*Izs!>T|rULi&F;fJ=OH!$gDvBPit90II0iBmVwV-1A_`wpAV zz%Z0`KQsbz?6u&f@rK)QgC^MruZzda6c)hVJHt>@k4Bn>x7hWony6`1X{~EocbX2{YzHP$o0@qn(W-YfU)=gJx$5ZMg z6huH$AW0%|=X?GNE0AV7hOg~Ttmvj#%;X4O)SIbi4No{@_HNK!)QZ8pj3kJ}i*3IR zPQ3Cs&L~!tgxMgRS%vKGy}o4PUGCnvKmq(Lya7CMh8Ua=(FfdK*I$ zSH|aV1Qy~e5wsAt5X2><0)tE5hDgdO?AUoG(u~$|>=Q&0rI?X6Y-)1Js}t0bF?D!R z?cG9u4pcS5E^6aWJeM%V@tLWmWg$eOBc(Ufq%)D6_--*HcV*3cqV!Jkq;@ZZylDEU zTV}PJS;$OBfD18A=K5ZT)ydgYrFzPv!H;`13%$nn$GyqS*9AoU7QP1CISntqB$Fjk z8h3hG4i8lUL2n69SuZ<)ptcDaM@_nyTl?$B^3Vn0<)PHCissT{1Igzk5HC?Ko_OvI-Q@6;`uT05SR?OUsR>Ng7OP8h@+rFEJ3-0xnES_m`7cNgsq2^UzB zeX>^DZ3AIWu8UmD7=NI33#%phMz-2S!;%o;O|hpn^j_)JDhXshQRTkEt9(yaavG-1 zI~o8me9^&VGwPpz?1tN{j(fFw3f}@|?zjO@8D8OKItA@9;phlIx7u)vxgwwCUgOP% z%doLNO&bCmbuxfODZ9(US7k>{g75_ZeP$X&qvi6@(ENc!0NyUCXOxKkvO%j1SC^zl z@Y?JT%ZK;x`butBUhO3Ae1pVCQXmD9L>Qke0phxI#m|9YF{GM~or^zRZWu@*m7+hj zGAi0#Gdzu6J6&;MN{gD=y{(?&p(-1#Xa&{$dbm=$fVuC`wzqxV=sxe=p(Ft0l9rH4 zp^L5?C2qQF^0TIx*=Okv71FI^cG{KE5z)`^-x}vIzO>UF!z+C!pV~70xRw7dRNIdT zNsaWoyE^OytlOa+qS1AEXzta%20C$+59M*-`!0V*Xjx)+M4E8>A(Q5da2uPR`a6$| zMJq@5yYcyht2i*KwF2-Bsa{(3BcC*cDquD@cnV5q!tMCRdTr+>J0d1^W0`m~BHTtj zTg^{Omo6}o+gPoFct;BJqFx~R`P`ErcFusKh*l3mbA-Ed!4pNi zs)lyrJQeI{kLab8=%}5o2o|?uo9wnAJ36y*KgEy@+k;(xYhR~L>gZ!rk*lKviDlT3 z@usDsqU2i__*le?$jsd`392U0-6@L*7|vFyryvqPU+}2ve1(U05q_r?^p+n5M)kb_ zK|#{Nkz%v(qiWMqz#5lmr*jL8D2_=>3#+ep8~4uU2lz0enK`xx`<42epDp0I5jJ(F z-(ev)HbxRnLeaL(+pviSuc^H~mASh9kAOY&N+E?kpBzJM4=1|6)0>9zse}ifn=ES( z=B~6ln>uQzR`CjbraA8Zgv8Yzq9lqWsjL08LMdzqMXmKe9_s-vtWWMb+y9+he4V#Z z6&f0yZsH-0)+&vlZ*IORjW@w+EPb_CHC$l3?yh!vSBP=D*QMe-x~My5tzH}>qHh2N z#Av1qmP#|t-m>#rRoJANQfEcSr1!auw3dA(jDJ2ycE-||&+Fb(Ms6Tf6`kpaN=o`~ zhOd;?1+FP?HidIZRX2NG2Dg&Z6#dL|SB@S{u{8^*EEEuK5i^rPf5fKs8}XJC4g67% zNHwj>HF7hYi(k4B9mWu4Xx6Z^{)&++#0Xf082QE*zI+F`W7-Pan1DnDuZplm+xId~ znfnX-x#V=5c^55>6PySNNGt!4sDGwv>snc7tz9CJa^TqG0Ti6E@V@DafR3&edZG6|HmFF**BFJu|i_$e~ z^J*+o<*KhER>}utEK*Gqtc##MBaBfcPZS#-uu+chF)xhPSelVliZxM37{jJ~vt2oF z?m?Tk^#J&P>@_C_oO7ZEGHm&kb_crrrh!Vn)(LO1ODcvpJxP{LCxbA1)!w^vDqrhz z8Y3Dusq`;&CQ<>BKt8fF5C>t-uS0dHI!YSysdT@lnYP>a`wZGyaaqM~hNjTT zN3Bd6wbVMY=H$;iBi{b5um%oi@Ysf>rYV7-BqR>~0@yV+skcb0}?=8wd7)KxuVJ@wM z_t-q;P$|}mN91{`c;M%+D?RkX3gBw=qIg;zS^n1fdK=l(FJg6MG&d_O0Y@xEw&KzD zPt!LDm_vDXGNLEq)^4FhU?JY3Gl#h>X_%RC160Y&KB=dE;} zyWU}RwATD}el5?9FRLO9$=2lE@PfLNYpkhPFRho6i>Fvc6;*ORMAF14M#EV2zTlLK zBCkq!O1SzML_m z)xmcCFfkkmQ3uhdHI$aAi5l8syMFAWntdjel??N5RGtBQ&}H-tkOW0B`+0>;TDB^v z*=krts5k2|%cOrZ58%nOfwgQtgr1?$_}dK5<*@xaVi(z*4X$EevrezMH^p2bdk3un zh2q*^%=LzKp$-Gd1U4fOK;3gIP@2$_fBjR3xRI0btta2f1|W4m_HQ-Ed8ZO3L3cMR zql5jZ3)J{j65<+bba|k2`s>wCrRnlHR9s=1;%^aG`2wL7V*DAUbC`lG3BD;_RIwef zeGo+p$-G#qb`()p>29Z*ezVBiA5}0F7Y;+Ehq(EmlxQ*TIpw;RMO!~+$(q}&lRtYs z+`Eky5fexR!ortknyj8^bo>tRcgJXHqe+Xn+Q5aDnX@lO8$_#~_0m(>pppcye$9#^ z7o!zseq}0jU8OsLcAEOYI4W=TIy+Dajg)stsyh;TpPD>pbnL)t3`0uwhG^14m?LB# zuUT5s3fJ{kzsTc2z{p&Uat7l0>zh8Cjsu0iTO3)`m|NttwPRR|c-XRHZb9<%*&ccg zc@HU!L9Kull=Q`grz$9qdPr2!%;oY=77Pb}I^RO2i@J=g#R6Lyo42ilyLxmR>C9Oq zL$4%#)Qwcqq)%S8h?N(y97{Lg5!?jkI~;u?(ovxGj0~XZ-z)fmD~-fbQfRx%5~4-$EEW&&A_vU z@c5fzd@riiY=UfxE8LZj*Y0=6$tQPtaqQ7GFWd&|L&7r{jc=byI6Cy<7Y!wb9Yr*d+;Q}j}pQ5gjTqWb@FxG5(0Su3_sbT8B+Att~Xh--w9U;(Oy+rYl zMf|!7Dm_9h;?_hS+Vo)yfi6L7L_=u?id-rSy75Xw$yOO* z8NC9GKxx~}Jc2h`kJ^tC=;kMTL^dE)N4aO&9OuHKvnq;)qJ^@j|19CicYzo1uG}{% zfKso!VStA%LzP6b)zcMimOc`sm?s2JG--8`?zGZ>NpANN0bJP^ttk9Fotn3u?*qTw zGjYXwVn1Jf9RP@YE3?KrB8|k`LSpg-h~AqqQj8J|62WUI{TciTh_K3VN29Sr+|1#9 zyw)DxHXze4{{3a;B z{rVvYczpc2mybG*NP*t z16IOM_M>@XoUlS^Vg2J8_4ugnBuB1vS(uK>#TKCcHSUQn(G00PTdf&ieUSSMTm076 z1}f=SDQPIi=QYNJ3t(hp*Q`d(h$96m+ABCZ9N^<2ZT8C~-r!)qFtwS-_;rXHtK-j^ zg7c~bO5zgdBp$7u*XNo{H%CopL2S5Ec{hyjny~}M=uTIfNNX%+fZF-;h)e_~b$F@d z2?#NV$kJ4dzTxPwgsTs$``!I2^PvK$;oP1K*X-(-=dVK0aFvuE0$r1s&v7l^CCwfI ztseS&oLq=Ka#v5gVoTaDOJ<^b{usar-36s{qeMF?t;AE!WGzB<;rq&HWb^h7ANun2 zIi7adVZOiSd)Ely`9OsSEk?~u0_C5aF)F(43~!Ee3LuprkhmzpGEjml84vOPpiVWN zQ8Ke@4^&d=eG)8}eTAnI*}7gF48f>5|wd%mPIQEffh`%?j48{CF0=^0-V|)o`fswnxRA-ZAAAN9==T0&}JCCEI5cU{8T z>;|0322bIPYBw|W^ug2^<+{@M<$7Mur}>i3GF^}$+hJXW=|sCNgm~|>xBEmd z4=Dm-(ebjx$SE<7b88P$GO6R3UnIG9;Z6%_&S{6<6Bo;%8z%tO!iHH zVZmxP9gND%#8CS{+G{5GOoo%}RH+sLcmQW*vQEc94CTE@;5u>9Ut`UWj zbP8WWG?TeHehpuEOs%MhZLusp8^M>my))U+N9cQQe&gwbphCJRk;AI+*ddp^NERU) zU<~5sSmpa-vLn>gX>^|MA>-;9v^r*lt@g5Zf|y^Q9(#KbbodSyo|w`mgKc8ep~@DC zKlyx3?(%V<21<%|>U>_Y$i=GMbBSeQdmh}|!l2NO(Jb2^3twsr-#ZifvaS|4jD;&2 znjPw4+AdCLy)A!-?aA0(VQhKs8Wqffm{NLK$Lw-tl29`hUtRPHBAB%>4e(y95|a};e^ zVfzH-qM#r>Dvl_wU8O1}%3Z3aLPGT^p8Ol|OozZS+LEJ@2n9g-1OuN7De7_hgjs@h z6T3GX2qP4SW&9Sz)TmZXBrtJU|J+A0?~J!@xrYf5kl>RL#xXoCajnu-CJIxc55>|w zm!D42N7Q&LCr5uadbRJLJwg}ZmKQ>=J(@hV+{^|nsH1d*#`~J!9;B7DL5?tLy0X{Y~Sr4%E>!u5>0VM!%LfAUaazPDlG8gs;ey`2{MhAFjFh5m~WEPKbY z{uE`dV#^=0q&1MYQ5^>4u=uzuWXqT!0jvNcZfNq_Z8+J-l`?{Vt}}OG!WL0C)^e$#?H)>hbKmL zaKoL6fXTG)Pzb41{I#9R`qNVQHGtSX-#@dw);qh&=kD^JF|fr^>rKWSZ+nc(Lj#bi z`W0Ij9PeO))j#0eMqSYCIhU!ljc3OLKtFD~xqPANop`3$MLRF)2!Fz1P zBE}fp@Y7aoTLUO_bWjIk{62YztL^DqIE@x;FqenCl|uq@rl`KuNzUc4_yB zEcMN*H<~2;hMi9Q2iay;tP+aQcc=$En+9kf<7c<>jN*al0vcIUD%7&-J3>tYMNMHa zR0z1v#ylimYhtd1;HvLkOYR~F(05VkR&4#iYk*s2c<~&E(-k1z z=rK=0R#e$@=$ZAcTNlZE3xhs2Vi&JsBtFBXzjN<$sGvdQ=b`tOaBQPHy(2~51xe20 zw7L{)ZGh8-{A^uTNE(ChX|MRlKY8uzn5r}U-{wlAKJ$=ziqkt(L-b8-K)`7VB)B}Y zr=nQ1Xlt0}DLB*e$z3H{KydipN)rUYE-Ddr@o#*|Y&_Ee-n~l6fIierC4+WCd+~kf zv0!oF2i;0BMV?wUylZCDYr5Fz8v%MycSp6he~4R_$j(ymS;eA2l51hbpg~Y&Y@>+N z#{|1%s~m&|ZyUo`o?|_(n?gz$Zvr({%(22ZpQvU9Cv)u-1>LR6J>q_+d?b0zClQ)g z5d8uOcz0MbNLpb#)ou4uljn<1P}=D;0}P-(OGPcTX&;^(NWU$2ZnuCh5AP-xe8wge zj-?uT)Py~ZiwZhoEou`|nOjf#nFC8eh?gSeKJ7Esl%e@Kg}6fKE820mR}09WR@jLN z#t?Q1#_V2cACNB)0fW!**|(YrycLI4F>Xqs7 zvpLjosAfqhYW6Gc|Rk~g~Uz~N(k`!(QaQL{$9IdFgmhn_5v);tVpB~3FlX|uf)%yE5edGp6hNpJzV~-_%1l)1^i>I5w{XO zPNK2ZBmMv)?+lBVJi77GR%OF<6yn$-K_x-0Z%v7MoMy01Wa}-YN3?8w-X5);hTWyp z>G?XQc8ORBm+vz8XvQ0D+Sf+#KalFYhn))X=&}ZpEZ%4n#G@F}6PD=EMr9_#07~5L zK5+Zg;+*a+PA)td%g99+0qUlJn09`uK*sznOu70_d{2mxJyHajzXrl*>}A~dsOy@i zS=wMs<0zWO==(z|F8U~t@5$mw?(wNrq*8)s5k&v4^oT(-wysjyc#X$AZ2O_*mCsA> z#T#(PhB7g-0ShpxRYp5G_60DlLzEJnG9aF3?Cr=uur;V*t6P9CJrJ4=JAQUax&k^P zG?rm!ZzD}D(e(gJLroWn$i1}vz?HYT4~rNqDWw?xv-jSls;hp!jr7RboV^MX>?q&? z2{B$cJFXYwmn-!$Z8n?imC??_D&4_x;@#&YSnN1DoDmcn?7MWm$t{AnlZTlC8Y$VS}3jwY77ZA)#KdiF(1HPhZTLRuz zG*$96=G(_>o5SGe?Ph;u#oyB@@(;f4v@3dwTipOp2CRpwk}J+C6S?}2O~t^uFyXp0~#u*v?i z5#0i2nCuc00;_pRAc_SMZd!^A@#f+@9Io(dO#{zPX<*xo`J45|4keJN3bR~zmMjE` z>`o>coglo4<)hI$D$P}=*sNR&*LOXld9SX%M})lGq{7S!O3n6rQ9HNZpX*qE^Nwxq zNJdn_^tv`k8O-0sZ+i5AX0m(Hkyh>~jcULr5C=+L7HThX?OXeXw2WK1E3Ku|aA)XV zHVK$8_$u52?u6H+CQLk=E?9^i+I4uG?sxy3<1*HpIF|18&8qe7?F(gX3wx$p%#@$w zNPSTCUIANzqG-ltR1WuROk-v4j}x*~s2;QSHa)eG-^PnNi?ydAa&q$NLJpI9i1+Z` zSol0IpX-p|diVI*@AgAjp&TzA%~}(?zejHT$gb+> z30&#+kXpS=3GN!_@g@ZuQX3u1+OLl8jU{!wL2Y&BF6S^~8_}qA6|DoAY>jYkmekOe zp6Ia`9d81cpFA};ouS0-Ub#;XFn=yTzF1ji?Yp)3)s#&KCnp)M)_}0cVKF0BsBn9}(Q*78uTxB>LRjs=jQ1zKl`UvHVYq@TPOjWFRsQh~88x_iBjI z@q+&BT0Nzg@)u zHobcDll29;$3&EbAS2&HA71@KHkd$4a$}9TxXH|5a9Yrz%z4nj<@X|51wv}1ng*<2 zL(1VL+Nldt+D`26e#-ss(XjG|wRucNisfawiL5|IPByHgqDo@O>d$OWG}vSw`YdIe z6O~(J?VnrgPwWq{wCK;FX%;~4|%kQV|n}HmJU9Y^RdugZ7hTr*`uegHG?|zIe z6;Wk8HTUMpT~*&Tj(mSLju{7Cz(E6+LJ0LssBiK2ZiugIw3 zOD5l#=jSPHb$>`06z~HNw{RmZw+W?@Rb}+Y%_GMujyJ8uEO-U0IO0;nMN&D*vplMs zbFl-nf&;({B^nCH7#)}6GEi?a>fM-vH5Q_{{F&{qo}z}u0U1qHaIKaOAl&!hcj~Nr}EI zw3NT9wBET&_OyE@&JE}E5;lMY+Fcki-<^A;@Z~r&Isj{bRM`k~tH#%1p1|k<%))ls z@Y^lQs&y8H`P~LtW&+TEmfZDFGh821-?Y(cFy`;ls?GN*?%#Npio`jr2igX8p9qNo z&JTjhwkXS4WAtI6xCfdNzg9w{g#fmNw;y%QOpFRc4~ag#dYa{R3JjXEkr%C$`7P&l z{EBMSDJx_16juu7Q&C=cIBE~`Waw-xrSkAIJHz+^3qW(lCZpI7$2?xyKO-xV;LD*h ztiKGRztF!SXvQ)>Ms2!$4rlz7+~p9HHOi-U18*SZo2KNIUNV#ALDF8Qal)^TR^RJV zoA0pOyj(pW=04s@YPTH-I%e@uJgJ--v9eKgzS#=?^kdKS{yjf^!r|suKaJ9(>Og@v zP5O&~X%FF{QZ>29tl|FgR}rfqScvCYI;CPEm3fZb%r5%g4yuQ5rGEx|{a{3_*;(UK zVxWWh96G(HoK|-VI(~?42&fEaPF;f?>JYHp*=&UBCdP)25gZ%*m38t1zZ@Q9SM>?B z$IMmQNUR23;=-rghT!}#OuY$|&$Pv~ICHi=8^i0pVn3-yVaXxL=!u$rtn(k-*j;IN4c(0iKQJ z*Y>~dTwm$~&PxmD?zhWl4+!W8nC6p!Z+Rv7!45S%SDX6w4orCBGaasEe}0!!Gd6}> zR1nJ&x1T;-w5;xH<_4VhSZ%#{8T7jDGCTHdGjlJo)s()S0~5j0<9!G$)cdD#1iCVt zm%KB|Wyf?UxDK3%H2#XYYJr&-4SqqcdV4yad3_)C?@7n!rpXXsV@hS@oxrMP?wz^( zETfchakA`%oUe99o5wNFLvgvn$iIy7EJ^+kt|g^DwKWU=+$vAK9TPMgGa+aA>LN_|G7$DrIq@-OIWlKEC1Zz~sZVN%`Nu@5-Q90n(@d`g!u z{MesCE?ngI;#>01a7!eIq^As^J$OpHoy!^QVEO$t^Q=GjE)Uxc%yni4z3BkIs_zE( ze~{=eP_mC*kog0IK)gI@3v-dF_?t2~*s(5?_`K8*+!4cKY%o1D`hZqlU!CxJY)}`25L1vCr@L zG{r=Z=!^ZYXYzSVZxWD{tx7k1fHHy8Ge+37Ico3>l2;%!Wc6Ea@oSfQ0Oj}nsL)_6 z9l=<-``E-iYA(;Bgv4k6jgm6f(uHKbQ#x|bv0b6X&R5{{dU|{X2&&u z2wdz6;lvuaJ6*8RwTkz+1L&wbTDMtit#)$zCn6asNkFQ#w=(P)*{D)&7C&NIyuUg* zo6#G}aNq@H0F_G|tDH?y#ZXu8lU5mMyc9SRdpq?Gmnv@c;pmKV@X;6tAn5r#35 zZqi4c0)^_KvZA5SAC3*}=@rYt^*+hL=6#y&)UhqaZxXw(yuGg(2qY$ zG3UbEqjwLxmgnUbtvx>%8riq0)DBx<+iR#2tCjru6orMszWl`0GhvXL2j6(3aBEi# za#DR?;OHvScqX0y72~)rGbQMJkIDA+huOI!OosLf_A1F<=hgV1uGa?Md?d%N;QW-j z+mbVUXSje@Y1F2ZOc;6Y3=7|STft|r^%VTtusq-yp=SnUW=v!M$on=%D<8wtV9HE~ zmCX@WoPD1c+0=OyT_+Uhd64plm(sJ;?QC$J=ax149(Vu`ai^wT9+cm|0h(7#91RWO zUtH|(aHdMllo(_Oi_cT?-w`=)i;XB9{6CyNCQ4)Z@lyozi)NF+Jdf!Q`uS{e97al*_t6m*+s8L#8f9vXC)5tMVi8wib%xYRsXIH1L+>uGlml z`~2bA$Ws)nUvP}u4$}KUGQFdjnwV~13zB1*2K-1NutjH{*Bi|}N-Hs=N4}w1iuZUm z)9rv_wS$=%#Qu{@d4Y3%^40dSU=9~|hU57lu(-|b_0$bB8llO6T=1eqhJ-%CPS1BA z-Wkn}v@>VJ3%T2<;N7g4?@;uDWI;FLNiDf`sJPIM_EIBrQ?SDz49kem| zZ~}|kIs{#@Ps5AhaBm*IpL9-zux)yK9#e&QmWq=_3O^ zkt4MF@TreHeF8?rXS2u&=+c?N*xoo|ovTGHk$y2kcz& zy=MAiHAm4fP`+6{7ChGITbzFs)l2`A?@zxMe)kR^AY?{{_uN#;lhjSL`&e{;1TZ8K z+{Ox~X@B&3zw?rk(}KW$ff%owl*xB@h4}%p<;i!rwbT)8=#L~H=>%Jukoan5L&If)Fp^(^|4Ok zQ!^7Y`ES(E-?n+}l?K-O-2@)f-|DVb?Dj`n_28do$=v(!%7>sc9^4L}OihkdMOChR zzBV0^>*cB{^B&h`463?2Z^Sdg+s=5~#`X4!W1s2ub0qswWD)mooEjfA+d8A4-)?7@zB0;gEhtsaIuzlOHPwte2 zI|le5<&(!q|CW31_;)zi=^>vih`BGHF<2ovHxPMIq``@Hv;)_q?4+g~bxA0cRo^RR zx6xU8z)^n>r^5EK+6WZpA*V~A0n&ewCTb$}0u2^RaJwk&9}z`DY-iY|8CPDT{81XZ1%p3un$#sA52pnM}71J z```$5Sl=Oo@41(rorTFBOsjRlGYr@RAC8VJwx#!s0b^0f1~;2i_j*U-vS+G1fY%iP zlHG2bAJ9vhKD|-Ev0ZXZuPwInD>^ejl1^c*6ELKH^%!t_FMSfvrOAKf;Ye zz4cEW72AGr!t)dXI}-`j-JVK@WAqhO8s2it{8Dkb4|sO3{VQCIsp3HyB^@ReuUsuKLHS;}d&+Z`=SN>n zx))_l_Cx@l?uyJIWw)*BI)QJAOsGo=JD-*$xf=vVl# z06dg@v}2P`m8v+wT+ZHxYJ1;U8rQgAHG%re`5WJ?z}}4r zZA7Kfvd{i{*pAfd5dk@l|G~G!`zuu@f}xCH3EA*4@fi<29;uOe&~zcM0FN!1;e^R1Xv&gwjf>jF`f^yWK(!uW>w ze8z;MtvDH(erZmoay6(<{790NySQkm=C1UdFo@R|)7`oI^N^>1WUS6_CEbjNvq9d^ z`D#dU6u5QWX534>*Zj5!c!;7K9Kb$U{lLkC)w9@e+2z>3RkcX}18r?6SnXOH4s6p@_pJ`$ck)z3;Y@5l{|-|4C@)*; z0q$`VVNJfFUBlrcdaCZUcaaL{2H`Z*TCNYhW0?A-OwGZACXuv|A(bNij#fpm))F?3 zXS5>A!x)DNaCs-;1fQXqe&*+0YOFt*M}#{WOK5FO>ZH=U7KpEIkeL(;e)wbk4k93} zx@9YMx!($_bwWpDc(G++Lc=+?Bpsv~E+^9SwA1swXq>Ms$(5t5+W$6X3u0~*Qn|`J z4f9~=y?{H2vd)KylW%bEb59b1$9pQp>7Db^g;b^vEnbNgV9X}j8SB}`P$!M%I&zFQ z_}7>)F^{?{xebgdb^^xvB>? zeiNSY>$~esd^^2i%Oe52JPmq?Ri#;TV-2x7StUb7F%FH}_kd1=7=JeM6)yW(H^15M#YJ7~qydE-ET-DHC|$%za}`jcz8p*_QKm2@vxzL}KTU6#+_ zzZY!=cF{6B)ktj!CFTZ(rMqxo>nz+KwtP6m+dnFa^F^J7;bAYz;%NW;N>>#}f-NC% z(@zkB(LNhJ{l(|zRzmg5#?l58oTW2wOW0w6s)O;2r9-kXq>9WOS3w|jk}7i`;x;c0 z?b@jHaR;Mnsl7Dp?Xb@M(ye)3^t)-$^>y^(TY)#;u=713H~ABcvrG;0I0ydr&b?CR z&X#7-Cwiu#+KJ?@15)e;KD3P0AV_fyLsW6VUZq&X-zh`@V#!S87K2fWNfa{;9h2^^ z@H#~=N%4Ji zepK77{7}1~C*0moabBn^QJ z(*t(}H5G*i7xKjHH?#aw<2xA0-=3Kf(1`~fRV_#_bfV_frmAz2YqGJ80eI9i2YD?$ zJ$*6X=}!DWtGBZ+4vhDrZk6cifWa(YhlQ#0*MsuG+x@Vw6o5P z>{O?GMUmz|vF$b0zaARb1m;jF>gjJKx);my_4>;b`P$!jHikU$7U{uhRF9(70%<@wRZ9yW3TE1#oNHe7c(Rx@;tDfBp>OVlp8wzB-H_ zYizsh=8zp#_OkjfPGS6~UHfI1EZJR9L@E7FtAGFqxUIG&1qyUW+i?X!Ny= zOF}(da;PP2UznFdkCH{<9NdtR$gRnly)lye9boli|EiBTaF&3gh1SWuh5Zwt=~2W` zDek=j2l9=}X;WW}_A64>6Bgaab@aa_(ts=T2ykiMuu)gnk7@mA5KUagCt5@5Jw#9MP zdQNmZ6Mvsga_Hmlds}psO4()v}(q1TdDP~N@p2P=y{($`qB;exh z@(oYU?R>HLp{kW);|IlsSj4+?=kxY=3XDe=F17cty4SV&fOlD|)y2!J9XeZ%DX!#;q+~<=N0ZJwp$+YVwnE_e5a&OUv~uwU51Tc}#in zfty%2+1#i1mfIwc_qCYdrcU_8708!05n!0=W!fZH1TCXwc9{;fnFf;14;bOLB`c~W z6IF!I56Qi0k)fV%>rV-ACl3e>clsmRVP@DH*{x#4nmd~NuWU6&y8|5F-Jx6hIy0ve z3DJ0*$6eWr!_+5xKFzW#t75tKl8>$NSz|@7Y+S-}l&;SmZz4NGQJvfSgD$WQw>53a z_nm79;aSVsbNSOd!FVwV*NNTlK3iy-)76KOYS$^TajnH|myY{}=qq~n?pAopyN2nS zpc%nFM@e;Z?!`ev&yHJuRpU3Zlq(wl0C6ifW?X+C!$h@=;cM@iI&cXDQSeZ~XW#ij zTy;UO=-U?m2Pll6)0kut_fl7hD}ipGQLJ7CdMjB0;7L*}D8s!S#GftoE|D+0y{cTASlc)=3^_AWhmS1TiZne+;K zxA@IO-1$j5AB}c_W#?RMnE4F~hQ3D`eMzx-+rf)DuGC1!AY5WDd&SP>HsxOWnXthx z32r+)dIu>sS&iFX9j`Vq4tz75OW{r2(!F}ujUjy1#ryx%blrhefA3#ZHkB2Ugk;N( zGP4pgF4nXT&A08COPjAKB}2iL%PP5!u`Cysz)?-+S&k=Q+=KJp!aA?3@PREjl_h32K+~q1&WC@N4C6 zQGP?fuNz6HR;JE-E03pyVdvDnp4zq-EyijxPQ@ zU0Ehl=j;qC2r6VE&35;5p8r=r!_lBQiE({i1Q*h5yEwoS~-Jl^7?t&l3nWmj`e^ei_T;o>w-Kq#^;2w9wA)Z$j_uzO-YtQv@1dY z*_aPBT-Wq)<%izb`0mTSyk3UkVti+DFXimFviaZ3~-?@8?_>*<_s5rp)B-&yEhM> z3P=9zA!ucvsqys$@A#{Y#gfU3aK7IDeF?g_lJ)1$Ah#=Sm$d)Q;8?T%U;g)DudlB1 z=>95-mt(63}&Hut1WjG$%Ml@uEqwxLGr z3E{le!#6*l=?k^E<1y#5X3ug`+Xm5^2zh2$K~O^E}50?5HVSWm|WKdSs

&C`M8H2-XANrvSSD&5`N8q1y=2lF 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 diff --git a/assets/gardens/gardens/garden_05_open.png.import b/assets/gardens/gardens/garden_05_open.png.import deleted file mode 100644 index aff2baff..00000000 --- a/assets/gardens/gardens/garden_05_open.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://blg1nxeno6cwl" -path="res://.godot/imported/garden_05_open.png-ff5ee3f0e878fa03a8dea0ef133ca5ba.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://assets/gardens/gardens/garden_05_open.png" -dest_files=["res://.godot/imported/garden_05_open.png-ff5ee3f0e878fa03a8dea0ef133ca5ba.ctex"] - -[params] - -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/uastc_level=0 -compress/rdo_quality_loss=0.0 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/channel_remap/red=0 -process/channel_remap/green=1 -process/channel_remap/blue=2 -process/channel_remap/alpha=3 -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 diff --git a/assets/gardens/gardens/garden_06_open.png b/assets/gardens/gardens/garden_06_open.png deleted file mode 100644 index 0759c00410d809c06b2d2a9e103ebc11ec0964ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45547 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 diff --git a/assets/gardens/gardens/garden_06_open.png.import b/assets/gardens/gardens/garden_06_open.png.import deleted file mode 100644 index 7ddb38dd..00000000 --- a/assets/gardens/gardens/garden_06_open.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://dimvsnhfd8y8q" -path="res://.godot/imported/garden_06_open.png-13105f591491c2be9fb6cc46e6c1a2d6.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://assets/gardens/gardens/garden_06_open.png" -dest_files=["res://.godot/imported/garden_06_open.png-13105f591491c2be9fb6cc46e6c1a2d6.ctex"] - -[params] - -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/uastc_level=0 -compress/rdo_quality_loss=0.0 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/channel_remap/red=0 -process/channel_remap/green=1 -process/channel_remap/blue=2 -process/channel_remap/alpha=3 -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 diff --git a/assets/gardens/gardens/garden_07_open.png b/assets/gardens/gardens/garden_07_open.png deleted file mode 100644 index 6a27ece784e2e5187e530fb621522da776996b69..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42612 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 b+o>>DwwSA5Ea@45l!m!Dx;xw>o=E>6a3nRD diff --git a/assets/gardens/gardens/garden_09_open.png b/assets/gardens/gardens/garden_09_open.png deleted file mode 100644 index a331e54594703ea0bf56c4817ad13aac4a76dc5f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 50839 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Μ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 z z=a&?oCFiYt_#3b0!y^-Ffi>vJN^!1V?N`yn>+Rk7nN{E(7`Xun7N zD-$b=Nwos=@^**IuHy@&sY00anKUnl71^FAkUi1|(1)tb(=)btfI&6H2N-ggzHN3%?D4&U^(th6xnD3h_+Xh-MYFSKn5+Eh;-KJS#5BLhbf3 zZX_qp52kMTj@pN^UzXP$)|ttWuYszS0fq@NaGMa3X|kSmZ3|nGlc#}gIWN((L1R|D zkICK8NIN%{&W&AB5I-RgfssNPO*eJ)2EP_~O6l{eWK-R3lJo`pL1+F1 z$I|gnO!X_LZU@bJEBc;vSBGalIrtFkv>?_Q%|vuiy}EK{x#GzUzQ_Fw$nJkMHskoSX{vDbo*(yfZWUMUqc^Z37cmamE39@bKzCJx7;EUQ1l4Qgh~e zWqg@*-X?Nai~giIkKb6Bh~%q7WR4k-3!yoP$k|TcQ~@x-0%%kL!XTuECaCQiwxW<| z5XEvm)g~U0!V6+d1*Iguz2wCZ^P%iqMO%Yfb`I47xm0Gl+QitO(FA*I@G7;r0kk&B z0)QMq+6D5jKN;4Rk}!F%o}1(55t=H%4J;=-d6T3xukiEy*k{Jk3nb5?-uwKy_F{>b z4}qQvI#0Fl>DNC&*k@9rZDO8{;r!K{Ty0^<(LjmeL-RB@`z$608=9T$_vGt`&@CEK z&e(P1hWh@|3Y6@VRh-3NR!xv}sN&y~nwap2+Z@3a#2Oy#yB<0(l6DANoTTh>z6bzN zrVJ$iS|5T}*PVk!B`)l7=thOQKd`zcy$V1+J}rf)6?)@oD%8X`gL?z7PO!(>f4Tc*rPblrdE!y$9YOI zs5I;Q`{U`Sjv<;$zw3Sf1NLu{*#(i(rbvCeOjf`_uj`NbPM-sX16w> zh(}H2(Q#PI&3t1IUSV1$p+WLjLGl!{GK()_HQp2&1Y3VbzPh}$=U6sZEj}HLzu*r< zt$t)bIH&!vdveoFUxie41=UzU&5%1*a1*p$Gh@CC!h&%yq84F%|64Qz5O})!xvX|T@iSTf=E*u^i8L1qpt{f8T4_DRE(SfU|!PV4Y zpa(20Iyl@j3Kkr;dy~jN=$QD1d55CV;i!;cX&PNmuaJmv0~r|_qksPVxvn7eKN$sw z{fQkw5gz4ovJMM3Jq;lE6Vm@UGR!_2?F&ER8x|4~>g{WK8Z2e^ ze_DMw%I`1X{0k*o%YU7_Zxrgk45PJd4x_8WriAptT6K*>eLcfNLhVCBP8x1%ne9Iy zlr}b|Yn8NuBP!S@Br_Vx4CQG;o!dTYZ}ReiN!Iy&l_FmF|j zeO}&bzFJ=UH2%TpZ^ZtMkxeKH_&v{)f9peAiw|I?;j8JZ?xp1k)6($sh3)gxP=|T? zd1}CXv~*Pcv{kgU_IdgKgT;R!^KY!oQDHz^qyMJGK$q#B&Cd7KzrOuP!$}m~L!muG z!+dG>XCU(r1N^5;`=`gEjiKAIuBSK6w;6iV%){45AO0_I|C-i6NB%hs_3z^R-yqne z|F_})ok!#e-{4=F*Cr`?um4UYEW|H7(lgX|zdz8B|Hbk*ss8J*t>pFLw7uXY>i+{l zgn6F+e@O@Rt^QpYRO!_w_M^|3iWQ@#24z+@?JL)w2F!t^aO` z`n1hS7g#aSC{McesOrQ2?cHCTH~Tx$tnp+7y}y>43iyGm(*FK)=-->S4t4(Z(7!it z9s1YEqrs?fL$yD-ZF&8-QM4U&)4kh)V9(cZpQfg|rapY@>#ZYfQBl4polH=`4~NnG ziK>bk;6)#`wdp?&b^dFpj{3ih{9DVPBR8e>x5$ichMR9e+y_EV_&;OLf3whkI~|(E80}3n0IK{0-Ny@!8V)8?G&Y{QB`XT))O=OY3jAwgB?$$KP=M8lNq# zzv0>f$gdxN!}V)?wzU3+YYQO1e*6vBukqQ^`Wvn-fc*OLH(bBQXG`mExV8ZD>&M@4 z{TiPwt-s;g0?4l)f5Y`_e73ayhHDETzkd7;*RS!}()t^&Er9&`@i$z*#%D|GZ@9Jq z^6SUnaQzyeEv>)d+5*V0AAiI3Ykan}{)TG{AisY64cD*n+0yzOt}TH4`tdhhzs6@v z>uf$gdxN2^Z&IUvc^dgHJaj!8e-QL}KrQ?>nWv z&5u|?AZKJDkoY7BWQ_{`orORmR3MNq#~~2iD-eiq2-f52K?o$48)>rNK5F#qhv)*I zqtVoF17Wux`ZI0c@9cY6Ahl_ceJ^KXyuxAoF)eO-FUWh zq9(QFu*Sh0@~4`^hy8B0R4qiuVeEOhRW`yS-`rVm^{DOTHc)@_W}rD@aqVN+Li4E= z8|+ZhS0nr9jL`7uU4k=4E4v&I%yU1MjJ>5k*vH7#uJlBI@*=Lb@LY8g=6yBuXRUR; zhC%0e^O@SjD`MmpHMYYwqq$aT*QjUl!{K`Y6a9;Rf`!LD- z*oPTy6LoDv6{Zmh@u~psjPvEZAG?w>Pw~t=!E0XQ4gbvQ;r*1T-Hwk{MQA_H^+UU+ zwtlJ=%kUPXx+ITRJR>&g>qR|M(~5$9!Cx_zc)iPyt?OxZ(!^-;ghwu6U|ghiz;);A z%1L7Ejtia=&v6fG3vp-DbV)952Bc_<#ie3{Pxao5`G-!wm<(uFW@wpKYI%i*AWcGp z@By8rYqt;aN=kmXCNZY|u)SD@G(fP?%)!~jk29%flg~}^abTD!{J0Rox7(Iw*bp|n z;~3rtYGfUT(02>IAL{OCy+#|mF$IJWH!gTSO4;z6=NZUrNWw^cAjGMSVM=*Nl|^17 zSYMckPzqgjP9_n?(BL+pCSvPbG34xkog~yu7!>vQLD%HKou{U@J2tRRax;?~co)dn`<0*SO7axTZ ze|nLel~u{BFYx|8ezxy>4QpSN`1SFw{-o5cd{A83Zy`eA_AQl}o?2`Oo{{3FwlR45 z5kszB9&|>K=Tyl`yyGEmI%8T7lU5zx@)&MRmOKg+)(vFqy2L$Go#gkT!OzEX& zPlCgKXT*t(Dlw!iT zZjs$)_sz>My`EG{KV`!6aW+qKZenZS>#P1!$9ZtUo%@GiX?NG6Pm2X#d#GRp z{b?S@Rm~P>L1e|2ha%NTme|pWrS}{wtii_h7<*o(mEBD|bvBib zoWzLg4zgDTq zu2Di8;L)7JoXTy*XB)hFZbz&QwD8pp5FHZPe5bV9;q1z+k6B|_NjAq}oyP{i3b-lQ zvMJkmVm3g-Jxeq(RTQI;;#Ip9Yoo^9&*h)NxDR? zVXiDFk`;p->Q7TVw-TE$5wDjcZjCv)Kv@Z^T~Ezb)n>1C%hQ* zI5UNV#EMQmpR+l1g>^9SCDA{7>?%HZ1Z`I$mc0Jbo!@-rV$TPKF__|X7C9H+(B8GP zkCh~l^pyF}$yPNnpij2Dv1eS69EQHjjabpVmBH#le@_A^VcpTpgpK7xM?+zq4&O9r!YiIz_Y=-ksrroVG%( z=r+v}VTPK6#Vu@O2Kda8X-nrQzRQ^c<%J3Gq!>G!h3{aTeHPIb#x0M(u{ln)A;eZ||mTmvlO#pVhB)?G^0P@6!%KGv1KL~d%t`Xf@qDOXisFp(kJc0$r7(A zFm|4$pIf^KIwMAEH1Ue!tsT=!+<2xhEZ-^-1;=5WfFg#!S-1^FwM^j=Y|R3( z$`EG76WW^VF^N5GO#Y0HrA;9gbS)36I>sQSaJklO33B{=f`xaa!0|epk1F`acB)Bn zp4rsFg(^C7$ZOd+iFgb*DWH81t3u<{QWVYsiy!)&SW6MLK793zDJ!5@|S)Z}Tusbls@}BOf=(ka!x8{ztp)2qKBkEHm<8D9nshZguh8 zhI|YYNg8eUXNPC{&mhFX>KH}*0&5)VS|4N;x+Y3=!Sny49Zr-VR^V#YN_+r0>$Dx! zf-ozLS7%b@jpC{s_vK;+8VU?6{hfsQW6R>R$2d_H5%DQU)&wp)=6v-d<Pmu#=&J!#ofxt2+#*AT zVEE5gx^k8Ubqlh+B3`X7@Vb!Y^6jdDbfT6?@qk(JF;eqoI-g?}{90*~VGIw{^v&lj zsLRbk8e~P>d-j#@>PmE}*6b9;YvaS(DMBUzv(wrN416+cyLfD5u6$$M)J0a7TVr{6 z?J+(@y!_C2`SsN zHrAOx^IZvl&AGYMG@G^%R3ej6^)%{k(XbtQ(kB1@0AlP?GKS%!QT@h2VOA(@DM#Mx zk(o_8bAUh5cR||4>BqlfiZfX{*Bi{R=~G~QKj(C+`o4SReam6y$4QoV^_F(|?-36+ zr5k5J*v#Vhvif$#f+0nepfF^?XlhQQz$ ztGYuk(dJhvdmZsPD!h+Jcqymsj)Xd1H#=spP!v=5o7SHmbf8qTzuUgu?+*)CmN+?e zWWnuo^Yd&yd0dFKl0q-p?sr>gQPns_aVE3js2m}!66w}h;~u(B36HhE0yjW(m!5j#;_?*$)f~h&q6}V zmiA)<&oUU%{8`yy_8MWL>TyikE>w0VJPFn;-yIom<_vTjgcZ4WjV0@nd-T+sYgn@H zJ?Sc_vWs@xM^?w}%Ai=%cI|slt{0a9X{Sx*o^F?gO?;c4F@G%h0=+ywkx5s$G@<3x z2-~*@)&#@fEZ|>N z+0@3%36r!<+V@AJ&S0kMjzl9=ygi}mg}9u9HHXi{Y>#59dv?Q|zJ$xx8U{1GLf>2b z{3RBlO}Xc@HCDQ6@ZpJzkjQ#zx|0bqC!Unqy# z%dv1`7qoGC=Sui`OcDOfGYlO*{L*QnN0*!JL<(N75A;uXV6ya}$Sqw!4tK?SV2n9XHJL zCy6$L49XWKC$e2%Z7yH#AydJQ9`Q?!`pwJHWoA2&uR_UO+J@K=26<_^G-57H zKJ7H!besWKnME%o=j?t|aTHr~g$$qbG-y^LI`3sWTR>Ni#xEBH3}(owfnDOY%j`19 zV@<4s(<|jmch2Q(qFg4le0)R&`({^kV3bE2H0Wm&M+-}gf>2Z?OEyir(jRax$0tuS znH}Rtj%M&WX3CpReHXC?u8P)Jy7L^Rzql!K_FH(SIQAY>*Gv3!Y|QR6V{eFXq>Hs- zM0sYv#p46@hXOSv;-jW$WG zN}q9M{u-nSMaeT~F?XjW=t1~c;zB%WJ#&l4d+{&*k8E&PEDuK)nV}0xe`4>M7cxmF z=2XTM;y<=)Dg6QLYWzqeH`_YTp#bmkdkNKJ2^~5P#@O5&rR_Lbk{Vj>`~xSN=-STb ziv*VJlZ(5+Sr}cD-F9w_cG7yn+iui7rVNh~KvgQ2=^d%$%@dj&52LVSjME4J(F=en81tgu*X&><2=0 zc`J~>6c0Da?BZ{IOSe$VC-~ZZa~k>z*c9ET9$1%rDw7lb##b~uQP_cIW*!#>Yh-PY zt$vt{kLUW3DqH!pF#AN*HXI0s7%{-_l%+SvJC9=iXN<*ZhO6NR={vR6T*~86b9?s_DYjTSJNp_T9w}(_jW=0f ziRGv{Zr-?P7Mx~vGSrHQi$k|#M2NbH8Nz2}Y1^}lA(4kKwdX_iIjEJD&EjE@R%leK zku7OXZL)=dsHPW()i7mMq(~hTBC#q1PYTjF!LdclnPnZRcOL@GhqfnUn)XABSr!8J z(>4+mqh1U&6G9pD0!_tS_%F=G%tgSwP!GdlxVHm2Zt%=oPwNNv+xJIaY=fe-e^52JbO0Of%vKlbfQqs?!*zvb<&C<;9D@axv4NLy$e|s~ zCZS)5kEwxYi?V3(jL_*B_LZAUN5FP6+R^;!Ak^c=fEzaz;GXyTMuzLYECY8V0t9&5 z(ThKObq%)}SX+03Y!52D`rba+BCuqohY`A3v1ALM2deh*TY|a6-S(6j^gi@;pejjJ z6E=!V$%77;TaR?VyXN$K=lO{(o9Cc*azTV48%+K>KRkew6^#8<#VXg>^vdDwDdle5 z>32}1-pn^Bo7q&h2)QTJ9N2)`_Z+*QZ=MZ~r#RuA@ZXZbN~{a*usJ<06xkMWOQPLZ zF`B7(S%)4uw&Q}NVy`&-yB!Saaw+cc6svDS?I5A3eHa82BINh6UY5skh5KRSnHvSh zDPk_%$RV%7V~i`MOU{XQ2{euJA%?({+D2Hm7Tu&QGj|*Y0!gUU9z%wuGw9qVD5Pu6cuf)&(BqGShU8Cs{-;JI0tUZ1PtAu zGzyDWt-E$U3knM))sEePQrY$SNgg0#W~JWcCaY$0tyey3K^sB&pv@`3m6l~Mm*aWc zh2wML7eV;0M#{`%EFUEW+)aL@79F>9T^3my0U@IB?##sx#KAhHxU!Q*e$K8>2Tbwm zM{P4zMxSm^5Hi7Puuk6$+!m8RX~>KTq3I_gw2@oNV9vbKW#@Y7ffXIms2dw~P}Iro zem#s*x4KK!q9#fjXsJM^j24SV!@h^3d$__sJ2{_ey_j(qlyBnP?x+oj1*F8*ql>11 z;!)X;2o8poc);e7JXAp*8|kL&JF=naS?TinL zWiE%J#x~rt^~IV_br>^Jd=7(|wQ)ytTufW5d@7+J`aId6zxu8;wk%g$_V|Ff{=#Br zt}&ovSw!wUe55gA6_$0`F5wk0>B^&trSUd`1s23{uv~6R8m6Xu|A_#HcY^`7Y6F_6 zs01#ME4oy6!n_j(Y_&5wFt)H%pgqExYfLOd?Pa+Z(r>>DA8xK$U9rTvRE665OHhZx zwbStpo8*Moh2tNmSFbE|W{)LIb_0DqGPmJdXH!9t3P@@3Ck_xU(rnD5Opx2~;K4g@ zj8NL}%no zEq_|!z?xA!RH#{msNu(Oom_n6${Y|Y#&k#h zXh}ebzkE)ZU`@yZAQVk%i=O?C#3!`#!DyDuwwrt&8Ecqu(`28kR8)Z-Sr(a$xiFc_ zTx`|EMKl0L@=B7NBF|o7R`q7RfUUY7lx5uB*1qQ=F{9OpR-oNZl+1K1-H!Zbp->yk z#<<$J6ZDwUXhsmD@f!HuVEehLLJ}m+7&adB)f!^?2}O=3YBDb}EwIGA4mBUrV4uc{iaX{{s;h+eQQG0={`dF@zIsP~`g(BaPPE z)fJtb?yCBE7FanQ(l9eOC7_a9foDLeZZyCgdoP`_M;u;Jua?9GLQsuL93o}$q4z{( zp+xSjLFWOtgblq>ICALp-gZWKS!di!f)a4hIXlU2gElZe3P;P~=;rGl*fI$|>fz`Z zBfk`R5H96k!XsKU72odPNq%!g=j$zg-v6<9Tu5lj5epFa-pc~4$RW6bB_}25{f_^Bg969eBopr4llpIC#lAKHM78&@CE37 znd!XzM<$Yahe3jlq6`woLs`Dwbg|84Z1;77cH+h{ZX`DM$*J~@gdF024EA+BzK!sa z@mq=&%Aa zMOrRAiH9>qvQdUZ&5s;ANOl86j>h-=h_3+t9Gm;XDjox|W~KCongf>S24X{VYuD=#z@$&HTXFOewqqI{Lx0{XnCrNNg{G%7_2?Sf5i)do z+YW0Mq^w|8-*HwI7R& z_8x4Cp0_Es>@GL;>?P32`2|NG(KJm4xX3=XPv$dy?-c?Xue#z-!rhTrjb{YJ$eo6a z%(q9yZ3tBvG+OW+=6XJYLgnaK_N{{bQ|4wH0D=u7=12b-LuWnx3ms-)15Ki;$x;uw z`W&4b=ybCA?!7dsW?4*i z2-M?ZI2@fUTnj}8d|Qhl-9q?9NuRfgqE><_c_E*Rl&F%b$_vl2T4b8>7ko8TLLTWI znCq5YCPjre*|07)D$u+<8vP>P6}9_TIp-7cKqvg34B)*rb`hi$cotE*1qTUkbRZW0 zI5&h>qXdMEOG}^C&%m>SxV5bNA!HC0}m< zy28q-lk#!&*oqI3M{j4x4= ziw67}libVBJ(Pe7W^58ueXOoKIq(qc>Si}ih2x=2uGbsq~fK`o$H*&+-Y&iL==CGz@afF*wpqEoZGw?psXqcu0^?Zx`ig!ic(~) zf{Ag zKdnMubbkA7b!6hg!$hee&kf<$(+QwlBu3_Xoml!apyJ#KZ6$0)6R0|r6>?LDFX%kx zKktov9O0am8PvDJTZR-J#uqEb?+|i;*-M{kFV|1+2nKS7!VZL-9Z(z4yE?JZjtN#K z`8N;Uc*jwlD3QNM8fhs?R?Jwgdc?}LE+I^`rA@PG**1i6cvvl#6{x~WENQFb3J%&-6g>-i+>-A%NF;D|_A^SVr5=-*Qt=;o_ulpJQWcHcM#V_iLml_} zJAs``Lz&QK-w(pturwmQMQMV@f_SJ-hpd`B?Cr*EIs-IRVsN6tt3vI;r&66 zyfO)1iV=$S+G~rXvm2Q`hM7xG6p+}_Z4~bW;ma&>46U)9dFrfg*OUgC!y$gxXLZfx zQD%u$6=~lCqU&!y_3>@T`ip=hHgBm5^5?tOxtQgWHZT`RkvrE@{X0pC*V2R@Dv#f6u_@g~fH-Oy+Wf|tlO9{R*e zeRA}`n=km{?ltBOXBw0YvDY3zs7x_0z060~@CYYvo^>H4jQ1zHqFR6K{ZZg$&RyY& zl0t7IMgY~BPDF6$v0ru(T^B1MID;S?tKqrA3xb(b?U99rim0w6Oya6ZRU_vhaVH)K z7dU&X4nzBo#)Q+%m^vBkeK=_vf3@W24k5GoH&?x-_F`slgPk39#56R?x)bqoYI`EJ z5p)CQ&2P(f4jAo}2)a%xZ&DollZOI2VmA!3$7I%9YisZs%wg6WdG~(c`NGfGigK0a z?#+r_z+Uc(4gv9FeloGR`_9z~rn~uq3Mbc6UEOzPaZ{Y*4NV$V0%n_Q`5FnXieP#- z_mItsTR^x_S2OwgIWDYu$pSN7Z#5LoMjbu>#exzr%Ta5ukQaJTE;9TcsM%XxW_*br z=r3=TjAAwlel2yIp&H_M>a|DyGZ3eRNxk8U4~QfVB*!NBivbZ1-CIdvm$a@I(w^fi zJZrX54qQ286918s!N$~Re_C2tJI}|%CIGCf2M*CM@{u5hr|se>5#ty+{}{wI{eof| zwx4y9Cl48eC2iv`;32a{r9RDi{eeg_th~&+v2bw+ExFJIPBO%NG42I*l1eetO?qTV~N(4`YV8rLCNa@IY9iOZ1Y9z#CdZfW3crk-0mrura2!hVZ0-@E)3k zyQFB@D{JLS%&alB?X`Bt{d(smclz{mS@t&s|dnNGYkacji-aAQx>|+ZL)yi>Qrnvx>@klLhh-xD#`Fn|QVE*Gfw z^s^?11@uP(%mqcs-p^!iv78y(5p@CN8Bo+W(hsi>!N4H-_yYC`6mW5qs^i6Q|@eDdm zn&T;@G!r_ERLPcicqq9>6MI=-^#yYmglGZ?bLGih`XLv4Lf8!plFX<)j}4i0(jG9F z2XRw;3rz=`m;vHP}fOYRE+Z<66TgvgcFPXS_qV4rZe6jo8S67NcZV;64+ilcn zeS%qVXTimaMQ7g1dEB^dxoQrJj84h1HOp0S4px>u0>@_h5o+2ql~P`R!e?fFe|2R~ z?1kj-YVY2IL=Bp5i?+4@n18-BA(~4DRF?-_nA0=A8ck;w9Gu!^c=8AUhr1pV+H!() zqT_@56|RsSxh^}&Kk)$t)=J;2yC-!(9st;=&XzD-_IAS8dMC3D5|%Fi6m(q6a}gky zpR$z}ovEHm$Nj#Leo96tFD7LB|59-i^oqwH-NB9e9d>ShrtFtef-Qf+UEA)e~H-wpzgr9RT z7X6MNS3QY3SI>A^m{AdwR**-oVG)74JW?n2n!TEmuUUqtpCYd22BaTit0&xb*6BVA z@(Qer2!(H^?;9n5YzK*l+i`u-NfcF`h*9?z&|u{7O_=kail+JCvbU@l^I(^^OL2)4 z0iFgdPUka8InVZzB4LTS&Iz|{--apIwSZU|8PLpY#sJ@~{VL*GnJPDha8w&s5kIqE ziI{bc?Ti=Lzw>uya+2&i>|p0L{BYx_w=UMsC4CJZS0`$RMnFvuDJYArFq!ffX&nnN z_ufwS{wQ;zxu2PzVT4%ywXT-NB459JseW`KuNfP8SZkfhU(}KnW0im_bz9hh6QPHX z`L+zIUGHbUzlw)Lvm}nc9Wvj|MR|JkXX7FH_^%DRVnzO-GK0(~)_AB08hqp$V;~7| zpon<~pXresW3XXNybYj4fwTkXb2o_$oNU^}-RTYw7B6eTx=vvvw9CXV!T3znk z9UUq02YFQ~MdJoOg#Xo%p7@<(@2OrLBD9s*&D<|v$`CEEK)*4ixGvkcgtDr_3gd@T z`dx~)p@nHaL!&UZ<3v+r^|Y);ooAZvJ1ES+jNBN`X{&R|aC(pyS0i7I!IcasiINEU zC=Mf`<3gdVWd8%VT4x+Q=E|?v0QJdvhni8i^acq5PLX|l%pV=M}<|qVO38w{1xwrg>uS@ud zkwcMXT`?`<8j|}8(jViglCRuHkV5F2x9({?R4%)2x&v&6SG#8k3CF-RuVtejIpK{9 zCvTlY2$cx2erJHff{8X=@Ft%HMbFbx=IN$7;rz#NCQqS3>iwtE`5wyTZo zF6a6@N|vv?_Pp979so|ovG=S9ZJj^ksg|Ie1XfFkY7?5iQfM@_!t8&Hhqj&gQ!ppn zn;j0Qkpln7e64D>XD<4>BMRvAz1{VplHI$%+E}n+(ow{Ur9)V{Az@G7vjJ7meL~tj zM7Ri9(>ehG_z}tpl?zs2`lFSPW&1AuXsvSX+2sp+QsA2{WISAj8XZYe=c#2leF}J2 zST_fTxxOQ3MsriXN_Z*X0htgg=} zW)POkYA_lm!h<4-a8^uEE%V+?*`_L5LNkQ@OqCRdj58Q!yUp#IwaNkbs5PH~hA=Fc5ZkPO% zX~|)Nl6bn_T6fN7i*I^37YAH~?su}=t10E}>(GyL@SxrDfq`O~4gB5djP71E0~#{d zExW9Dsj>C8E9YHa3k)d&oUXt+PVKw?3T;?dMdx&@17qL+2T*4Gg*G4Ju$SawFWY9Z4MLBmE$5y)tf+WJed~pzZ6z(r3n`@i8=uE^|0fjs9q| zM9o+B&>&fgu~9Qj2M^-fjF9du)u%3A0>W`AugjmD-yY0F?nyKkOKh|I*?4LtL_1}2 zry~Z4_lTv0lPKk;oV>01_l(I;afvu{%mL@#7nYg+&5i)J$``Tk%`@P0QPFFHDw%0N zyYV3$8v6V-er{y(Jt3xCkcTRFv z2O=jau2z^)<1!9$+w{tp2~P&m1=kJzku@nmA-|5;RuAqC4TnLAuf8%$bhd#4?Af;7 z@WA!20+)vco`Ed^3L-0cER(mvB2rt|QFYPo1&vngsOIHR68ZV{{!E-CD;zUI~y3zaY-D22u7V#?tml>`jZQAm&KMI3HCF znD}C$9K-VU>Z#Q1f={%49o#2i9M!_#VO9@6WC8>~bO4iZYfO4wzYFBQP}IeiXAcy= zw<^Ci?wbh50OzpldK=%VJ>^Qoy_}8>3N$=EQ%)^MM>+TAToq%*_;>c;Yu{G!8x&b} zs!F~F+y=Dj;;@PMYZ)D7yz~7g&=T&9Xui}lepsj7>p8yGVXoRYQ*EHC z6}tz_%I#@f;g8lk-{l>ioKc7^SOJG!F3{v-Q%9jGQ4kRAVfVfCw_Y%xYP5Hqv0=qD ze%-l`ZR&{R!O(md3=9w2MHZG6A~Lh}`hepAURMTERo1}TD0cVMkY(;-C39=|KcZ+eX z&=DT$|8cjpi_5zx?b^|pD?6fU+g!xSZ{l{`VB{I-$4Ajj3ktI)RS;Pd7he*(?9Dsd zxG65DS-cD`MQ4CZJL=lBWt%oS&VKuRu9PF-ZW}DAE%#0G9tw`3{Teqd0v`Ib+FVND zeK{c;9(`o?(EKF@hZ>d-etLPyvpqk1Q+;$ep-%R=9b z3>>Zf{LVv*74`lat2xPl%C!)P}l6k128y_6zdnpDAb8B-^QcBr(nn+N~@oN`L*!%ju%K?a|@U4&T1TiQ0XfKrD!su$2=`nQ2uG z(51BlaXyU0x}Oo%F|;%E38s%v<}SpyNL@ky*(@FME6LQJYYkmN3DjzJBQ`TCFb{|A z`v6uK@t0|FB@|UXzrT3cUi)!BR(l>m6=bCZ>ApSlJs@!hT^yoe=UWbjdbZo8dJ?tB zfl8;X(mlUOS%35B^)Q=yMynfx`onCGyiIBkO2ep8Qk3t5hJD63&P(MfH8ouO1s(53 z^8{dYSEuz}SUm1h%2*Fv#(LC5TrUfH{O$Iq|64$07 zulm`e)XCG2_BX;^2 z$?Ncv6f0;R6Djy+e9?AIY<(;r@3^w6nU4?QIe1oFfgkp9 zfX5J29`n41MTwZMK+b81ZLG$PAN^@o#@NjvP~c75+`*w4S<97qOqrAFzyF?VYrh63 z$B6&p=yb%U+%DE*2>kd)hXcKpfgHKc411YdQ}Ltp{U=|oyK-dWtCDM0l~M{fC8vVz zs($*U$tH%CJXAPz&6U-opON5&Q6t&JL-zV~A~}T5(Nb7s{+AejBJ1ABKPDr2IRlVM zZH~FQ)5Zp_Cg1Yg73tQ6HRoNdp4h>`cRO(Bn9xbXS4Wts!09-B8I+2>z#<)OfR;$3 zc?;A`0`oXDYL6#zcpD3K^e(&QZ6o^`4gCcC_6j0R5~EJ`?mG=07f3w*8a8|nN)xB0 z(yqN)Y|0w6Xbt%=V9Ebx^>l=@_U)R_nc?V3k2Eo|9+!|OG7QtXSJd4McWp1g2^!== zc-F4CNBcnToQR~`g9M~r2t>7yzpRV+XbK6Tdf^Wb?BVJR^VS* zTjj(udJa5oy$M20_x&!3d~^6bM?vuuw5%K&4Z^<|yC_%OP*4BfC$eu3wW;2AIT zCJwL6oq?~*FjJ35K;e;PbUNF7GTdaMHPPX$T);nIh>;Z|YXhEB=i6W0IR}1o*OOX4Fd+eszQG3M!)TFNVY*a)gQ@9ER>G}-O`ke* z>N;J&hZK&u&VKLcFBcc(_;{xJ&a6vfP@XF3&}GSi0Us&&HJW0IT4@u$yqqYn{`5o% zpvy`%6|fb(pd*=2(R_%m*g)2{)6!kJW3*nDT~x+w78k`^L|RHy6KO+<%zOYq=SnCG|XiIb{@5K2g2Hm*Lh*;VXy8;fGRlm|zx`J4r)B+u@ugF4B@Znb-?x79s}PUy878_;BH6W_nOK#>gMPq_&r)n4hB(&q{nDyg0}-R|&Ek*1OP;SBOw`uUTM4&E0NF;|N}8W^sF zgATSxCYrjv!X^cDewSGb4`1WsQj^6YKHprHx8dcA0u^SOx3O|w8BdxlZ$~rz_4&2w<;#FEmU+SpZUkvFWjQ+Ms=kIEmb@=cj9Xps^s;5#OC7dkeH zIyqu zdA-xr!8`H&8k`zyp*+WZfSUc1IMDuw6^%F&LQcRtyqrS7p89<8QFc6R zRGOU0lwA3e>G5?u5LCr%UIzTk`#P5*HP>gHfYv~iRcDsk;OznyN)&>(A} zl~f(&uh7*25%C|zxA5b|!1qh97jTZfxk+0|*`3c7uVhGFek_=zQc8{>xpy@6rP9&)J2$U^1qV?8D zdI}$$`PMwHc%*yddc6@;D@~^;OG3<-P@sjQ-2ZJXCOnrSN?B$gWE90)rxO(SjxbRQ3&rP@j(G#@>d~yOMW6)^hES!D5EP zI+^%@eO0s`unZ;s*rK7If{V3^Yu0DlFdK=OLKJ4E;=po~A`wDAyTX<|wWd~Q7)}e0 zedv4BfiJFdc}xX27ca3CnVu4+rR!y;!nQd%P6OUII!)~@hi>D?S6I`|4NXwm=Yyp272GT=GA_2UC8h2_*%3p26tUSmJY$@GSW--%$K4K1q&vUcf+aVr*PBHAc+mGx zap0u#8&nI8r8#sc%#ydo#^Iyz`BjH7C%r@jEVjUd_jFz0;phVTu7S-}&4dwKA7U|m zM_m&$Nn%v|_}hJ=hKQwR0rBJNG&3Jk`+OH~yLaG4vb;;W(7oXiL@>chguxf4m1;O1 zE=$XTk)jFbl*aDY5UPZ{TN|U1t<(IQZdNoEg5|2@?aF8gzJDiyGyHRt<#Kb1;u>Ar z>1weCEaC8T|PDqdx_YCsgQw%TIu6sWru@bA&^x&pGbU2>+;t0}io1 zKU#T%AnDv(1uh+e1wQL28X=PXl3&g2BzLKiR^Pu?;3(`F`IEaKL-ts0-?up3)`2}# z@111Jpn-mqP&u^THCky7`%JO+a8=GiaT8r=UL@pJ zM0iA*c&jnbLE)2WPPLMwP0V{v9RD`gvo##`j4Z**|MfsFPM>;>dHv#B z-(q?Qm(LXOB*`)H=%0NQPVV#R4-Ll%8_xZtl)ia!%1s3>Emp+4iA}&YB@>4tw=-ip z?T4u#qqyt32N9qA-nKb!Q#wbuSWKp7>Wf~L_KLm2BOc<5Cv>N75LDYO=#d0=RE*LP z8Z3tyul}T!v7Wh?lsUnf)~%YY|Bjx_A_E=;`Y$QrzvX(F;4n(#N0)>*`Q}3yUJ`FD zh%a{Y7Dv7w$Mb=_VC=e=E_T2$RnepVpvjUw++J1UnUjOj$L_8`t~N7V`}C1d}|eziIDQCrBww$Rcmq z++pnx6Brlf2X#mqh^WvUME68s<^#xh=xa<*A_kfnM&BE;atMmql+FmDsF{(Q`f3|F zXM=yN=QC~pF56>H={Be*mOQ-JmL6bma~G+WnbL8S-ZYy9R(8*6pe2DtQEd%JT@V<1 zw%M{rz-WqiWnxyOVA^dwN0OYQ{^$W+dvC(YW=l`DwSrGCqiU(!SgC3qgN5D3+ZIl$ z(-dK7yC3y<g%TJ4IR5&PgQQt~hX5VzAr-Pz{$=?$m-XQ-O@rfJ ztkgc=AanEJ{Sk)|bQQl0wW*Z&Sg1};;ra>lB8E69Eov#vMP>QY0%oY2rb_*>s}q%t z1GBs&xEIl1r1pkSs2jN3wrTXEmrg`MyY)C@o&_i!0cWv!4J^_6xSCuy00{Qp)iHB< z9e84?xVn28zPR_nZK^v%g;OYFr@O_{obbxoV}s!9 z2f%&wv-Sw_Tzn*i>P`ATJw10I)bIcH-ZNWvM#_$ih9o2@d-buBnJwdvGb#xuB&0&6 ztnBUXR64U%_P8sfvW~>z-2I-r^Zot%e%{aXn$PPQukp;?!_2L##^cs?P7hrr&wO~( zSGUGtO_re$=@`W%i0?i7f7~sCXkHz1o17oB#)7P7%j;^a^TWM$51jj^Ga)C^{gd)%{@rtz7cIJg|Vu5NdfAF8R7EjzuDqju=L1BP^!!c4t(Q-_se59G=|Z% z?G8Q^%7>C6cTPVK$3OeoXTSsQGF*Gk_lV>aH>&62N4Kx}+6$?23>v~lfdQh*uG_ukq@X5WD-h|vOQe+l)$`N~<}#ng!Zn|s(+ ze2`;WZI|ePQSerqdv-vJR%r;qsf5|WB`okH(P%FZCcr+hmqUc?qrL3Jk7bO_i2Q@_Q3N# zRi7OG8kU;obU%=VIN|!A6b*Zp~|Tdb!8_ zPZfVmqT*~wD9Ofgsk|$|xZg1#$%ugUfxVxyeQ}CJOC&PWL3~f@@DjpqEV;`mb91#+ z@9a>4&3HWT4r7@$(^xtSv1cQuU&Wx_3E7dsY1OSriRYnZ>-*pShKfX#V&-Ph`Gg}dYJBC?38CnQ4@bt| z@sjA?Ayz#Tr^Ki$tY^8&mY$|hOjsoTLqq0XRR1&=vA>U;`T+4k}7zn{(j2o3;Ot(I_I8+;~+Oqah?>pDf3CB8;oO|G(|NY#!p zT1#!GbugWDR7J}vXyh@$Chv5w;3VTPW9ld)7&p?_ z*Dk`)qK8$^_QCxNv`S&({C`)hZ@W`}xE5+9Dp{iWwZ0G1{4G$KgSL5#NMZ5Sx14ML zj5{M^A|iLK|ICvYoVCKwUZlj|7$2Z-+w@uk>>c?M=umElu$cxmFnv=n(v;JKH+bNUIR z8+T>NIL3V}0BgO`xcc9ZJ)EAW{ab}CH&6XWsvCp7OF zyETXX79wi3mQ%NQ@R!p2Qn_eW0VA#3$P%A=h#l1PaD{mi&1w@J5Wf4l%y6=%uu$sD zoHkr+YL84_**#&Ch4BErCIKUDb8L5eEA2tDGp&97KMIbvIV2VCO3gTBPo4*gGI-ya zm6DkcAXkLk@wfRwRxa}xrhH;yil3k0AN3V-MU+bsM7WZvd-4(|wH#x~Dye-8+5L#E za6FP-?;BMkpR}!%OdF^$E5as-fpdKd-A=87A$JGK4j%I-UGu}*ERveXU|9R&KTcg7Xs< zODkel{8Is>fw_>A1lZK75IwY3zW)wusZyoDyM?y86?&=q$4sE)zx6zen$5<-@iuZ# zIoez^pRb!3sej7u1|x?wSLiwrh>t^$neoTH>_n0-?cjYg3$t5ZP*lvER$vW;0S*hA z5$yR_eETUjS8ITn`_(f~n4UD#hbgg-E1JtVwh~-VX$voyaEdwaI@lW6G1l#D&jArO zDe1B3x%7&141tHYzAh4tACmpucpSf!+Pf>L6y{QBG&@J(?}&GW)NAoc$NqDPx=qLN z!34c-XwR{x3W|={bCE=*6)&;FAX@nc2~lim6Hh24xn5W3y`m?hA6H?uvlpc+ik;KU zfuX3h$+?=+TpRjR^TQ(W&fLsn@16s;*sq?sRuoe@;sb|-#tnqgW07OMo!_!p6?O-INz{6qG z6o@ifu7=HpkA@!M)cZqi%**ZbeDb}c_^jrd3L(mq3)*QONxfJD5fVYRi>H|I^DW(9 zf*ffu`V98Mj}&5 zFi*o?x^>C1=J6_a9`twWMXQ|Oey&mG<>;sft9K!Fd@Xral$kTa)hbah{$&7He!FPR z9cl>e3;**KND)v^i8HSW0EMRq&ubP`h+$jFox3#0Ev$S-;4yJuM7)w5m3C=81_|( zA%mL8*Uob0=}OYrr&=Ac--15~9#B~7#Fo2%0cQ!9I$WlooX$?!Utk-OT7Vr;mq9tT zY>u_-28Vo5ur}Fhb=JQ$KJYjrF2`($^Ay6nwF(V)zoa3^8B=(>bKYKWO-c=g3gy+)(^MqRz|D~MY$hGY< z>}>1(eB1mT=h#dtL<==(%+Qy#n|V=T?aFxN#TXk+H z>^9}71J4^9tPmGt?SDr-bD28@rA+xELIeJXyyLYsDWJjR%mc7C%H$ZQoe#-jariSx z-S>~Mcr7$oI{c}!7?D*aJM}@hqOzWH5>4o_ZYy)V`df;z9;w@}ubhsrFe9*kcJQa* zk>_}pA|t0&S|Hc-Bo+K62q%5`ZN_s2yfGT{s4sl$ZJ=)Do*lEasnauQEE zoWzl+M-Fq@N0n+)xY~af*6t>LezSmt@O@$f7?hyr_ zQy*oIOiO1XaM#idIDsHX&~`yKXZZs5*RM_5(A#eH98w~$(n% zsb=$_gD(=bj{i{!P&%5EQ~15(Ht^ZGoy0?Q z;Us49phI3%L7nqb{b{3Pp@t*ni@#PjV?pqtk(kjmFqpdnR0LW^nx3MfDk~|<;0Zqvdw9&`-s)VN_oA{r-zOvY zexu9>wJj8(XPn0Oyc<*=z2eZ`36}0K>>Kxi`84W@1pe_OvG^ZIXzAM~_P}ZFXO-gk z@!1hnu5-vq>`fQ2O|?h(Pt04mT@_6@fe0flY7kd}C1d`3AH+!ozk z6z8#8L+9pzgg2ye){=V|t^a9T4rDcq;b3*&cSfT<#ey~0+9&g?3kGDafOY6y$hF^f zx=8irQ(%+%AC8p31)(q>enBP4U(Q9U$q+9rIzB(jtn8kNvRAF5u1!+h5k~>IZw5$DIP-e>h)bwqcJLlU)Y~vb-pb9K}a=ik6F+* z-Pm^%FuHZf(sUf8XL3Q`O1P;haR1z%GAZCt4q|B+5Ti|j+(e`zbk5nH3Zh0!+;Ok= zd!T{aUvOe^aH4)yhdKAE1_Y{DA)103aaxq;J3WE{a{y-Wa2G>yk$Y1 zcP#Q_1CqK-30>vgb}vvm!D#Dx9Pgph>v=&QzM*xVyu=jn*G@Wz8-6(NvQ=Ev4Qk7) zockiXZsuox#mU0YRn}6(QOb{gUVcNnHmLq&SM}tOy&B=<=w@pj;;2CSAw1WTd1=gk zAt!Mr!T?u?F0990dFGix)vAK)6IjfHL1xlfsivs@zV7U}u|4XPampq*$^`^1Z?_w4 zwRK)3wq0}cKD2qy`!YP)A=4Rco;70VSLUO~~QYm&M&H zTY7`0L<*{+87$iwB9U`0ICV!4Gadabwn zd5Ajbg{o-={QOH|<@vx=}uUU33#aJ&P@3Xj2@QsWfkJc1DDJMJ-%CobmpGX%C}J(+!=pruTLvx3nt1gG0P)! zyY}382Hb9PX=Nh?_5MnYLKQtNUp!OH2jf4Z1*UrnXt5V34>tvTDV@Jh9QoaS7U$l` zqAqE&;8|?E!JoA3aJU+4Z`m&D6}7%4+BCP<-ke+936BZfj>%3ZP;{uFL!(9V1pQWZ zh?Vqyt&%f+K?gm)V1bHkE7&AtxfCa7G{Xl^G_0?TrdcLDMebKNQPEOKidR~>keJbY z7V#pG2Km-})R}Vo3D29s+7r*VZVEt6$BCM-W=DSttUPCbU&k1AJK%ltaZIQX?Zp##e@{&Q0)J+(AbZ1B*?DOzq3Cwu0Ws1Xcr0(&c z*Sh6+ty%<55i9fmqw^yF$$0eG=|~dY;c9qYOlO`O#Z)a^B)Z7b>jZfJd`n}|VyK&A zQAzeGlQYBb*thg{)AiRLBx53uZ&CL9BYYOy3I+0s3oX4Q4J5ds@n@%8D>RgC_j~R1 z3-35@782B_5-f3ShgibfA~__N&1hz>=KU+|R^Bh-68A8m_L0+PXb;4f1ZlQEnA2}b z#&l>57b-Q8-R}VUQCO!sJFyWowU{J!dp|X!Z>~K?Wh&oTt13QfO#Npw=d(H<&5DJ*86-RXLGWPT{F8h}67lX@V*tD z1ma^Hb83ZgZ-X2SUNrOYaCY}&TIGTxQPiDsx}0M{{5DO(^$U1~*AlN)qAeovwN-~5 zC*(c4Y1$$N@6KJKU5s|C{23(R695XY0GN?RfxdOzCiz6rMuQ&Hh&D%j4Wu>+eQ0Dt zLV~u|<>>4BcZ*Zo>2(_dDJ+>h#k+FuA?|j9eY}~AQ*4p*A|9H#LnT2`?(>c2UzEle zYetz}4+Jy+<#&|z&3y9M*noIW1(Aj~OK{KisjG4?)5?ETU=6ZI#a^%EMTiUSw2z4O zqoOKKXU@~1n#eeUdv;e9k1@U;c3RJO@{iaU)aCI-R7^&=oEa;B<>@D^tHKhPtnc-fQ_Ll|oOdb9z_haDp^lr*5JKOP@b z35?EfG_j37jg|`3r2N?Am`C$5UWHX2&x^GE-?xe5GeLgC?Sm+>y528xJ7Kwp&{g5f z5&r#j;gQjNoXwf@lc|T_Z$6(IXj)MdPC%db4PV5!tWsx&P?f64=Qo_6F#H8YOR`kM zJlSE%^(XJ8_qskb`PZh4vRRh+&qvf@bo`p89B=-1E_ptJ!>?=zVs15256<={-Ea2% zCFnGAz6902qhHt(DJ#lk*~}&XxxLidxrN{tIHw+}me~s+&&=G6@p#BZW8IfJ#Wy|R zLy_$7(3zK0L@61zzm9r2k|mrDe$+dfhNJjl%TLyINf5RC&G}y&qW3u|3oD<=@~b`f zmx&z5W%THxp;pw7{HJsh^wHgu4HTiDX>LDp#@LERvr_StrkD}uN)RQQ0RB=RZ&qB1 zDWOH^(hm*H&m?D1tp1Z97gQ`hr!47ks4`-MtK<`;F1gej=m{g0U6hu#KUdG5KYvN` zY~ASM|N7!&Oqk}%aj!$ZQH-(|uEZgD7*nxENA6d~s$>7MgGPO5{@)ri<%9VnG{g$T zz3YFj6bXnBmMlRUw~UvNLHN;q|1Ghho*&pbiG7avu*OXt;A=5Rof8Yh6>_XG6TZY# z0-dzZ2;J9iS)oHjU6j1oNKP37ka)jFXOdnHoUKmv;gqUSiLS&_5YiH9E$Ko^J!7Ac zAhz94|HCm1a{I_V6ikLO-1&3M?#$gjX-hsK*(wK=?@kg?z~O@rUeh;8>%D+8r-c8R z-#TeV&@Ch|my$rqDJwIoh6M^B^A-x^a z*aAxa2Pn5eR42O?C8CUQSNo;OS|DnHloxn|ge;vdn0Gz=%Z`sF!Py6a>F!Lic;@N(~*X3L4J`qQfHq?=T-Gn^Q@ zIbft8t~{TPe{)5*rP|iv1mAd5+yof|Z5#l@V*DL;=9(y6M@Q29=4*VHcLI;otS1OXvR^Qv*P zj3hEM&HH~TiY0jB+(CLdk#sEz%aEjggev6zqe)U`(6@W)X`oa>`Jm|K7n{cpCnj2u zm`*1EBW)geKybf077`}}Ty+%TsFnZ1{d}DGOO%j*z53bc_aZow`A|2&nJCLJq2zBC zI}>T)J57oO%bMvX7bV)?+$kIh@!l-7{G^3f@9sC-lQP)^xou?poV<)>@Y=L3Epwj? zi{@9UQfs)GBo)kZz(m@>nP9FTemhdPX)G5o4q{xfmC3#iOyu4pGWd;;$Zmhbk00IT zzg=`Qp(MtDMBm+W48p+#Ml(WhKYM)$1b&OUVVF{Zx$8S@S;&4-NW8Prsce_orB723FJepP zyICJv;O(g#n2h_gBy6)Aacw+W6W`oZ12s^H`xHx+QQ<}~BDk7h3WLNBc!vzH;6kYq z`rUUc4dUMxvM`95ld*YTjWKV9zXJ6z$dK~Q@Ag4lVxE9IDCajroBv@FTz*eHAfsPa z5n+C<%T}~ybF@)MP3y=iME3-92kSVwtS8{*md|@tmm*Dqhi!e2#71y4_jil}>s&dx z`Va75jAE>@y{&Aa3)gkQ6Aog+32p}Bg%ZRs`xK~tY=U=<+<&>y6&t%oXyUDtF!mAJ zir)FayGb@aBj3DH|61XYA;H=TzyemLuljewV~(Ktk$B1u*7gxAsr@&|v~s-ZQ{C3u zGFRqG1GV?U8hpVW^{_|PQSeLlMM8eN^-V7l$9YMt93aI@#@0<*~U(|OO!1hVRu-5Z3MFEC#lpZ39(%;UK8eL}9Po$gtoz~?`5 zpdY8dAD8nFG5t~(MiOwL`Q%7c_HAX(HKyd)m_I4%Fxy;Z(9r1?A-uX_M#EynF|C6U zBUk+dW3%$`pp7F$$43_55N&H^0|d4p7t^M)JMQ(tR3DP%-*}Bqg4pah*d4H1qyNJ= z(11zxTkdH+Sp5;ze-ztwtF&+I#jwlP4U0k~M8C%v@fO-n*B$YPvbZ-|ny7W8#f(n^ z)YtrJN`myob0xZNXp={-xSkkvJf|ku&&F7IhdZ$(`R=m?C@OXOR@%;h^0go zn1Od%x@rm;Qbu_&FTsFzs!oIuaoxPT8uLzI&3Y4Lf{@kDuQE=RzX^!m-(t1^sRqoP z#dFf|Y^T|j>u8iD1X40*w4WTJCfu6L!gPg!j*XVV)Rdu7zj5@kf&WCL{w;&=k>bk_ zBK|n|ejNRBJD|LAHt$E(H|@InSG8XJmjRWLrd2sBb5!_KE(71$Ppd`sCF_KDQ9-E| z$CrwV`u7`0gBgdsOX9nH*XP!EPY?f%l>|7MdzxI8Z8=W2y>$Y={M+3Y`9eP>pH3=@ zYPz{_=Z`vH&%yKsN~*R@yPs&!8%R>?U2mQJ2Mu^mzkv@nWFI zO6;Sf7z4ra!X8YGp?#v4c8dL&5iyoJ_58x+uHkRLs(ohb5zGba-X{JN%8DlhV?vYC zC?V%^8MSK-2f;dm+uJAb{!(zrI&}Rzh^n`pGNv5ZL|KszYx9FX%YN7qg0_>sc62a`9om{l zj{k-~J%deS(B-W)PJ6rOe~ppgAN+?DTe>NkRAC2-tC+(R%$Y;k+~3-Yl&#I3JN2W6 z{>I&TdKZk->C=A7xzvC>Jvf&yyq%H(KFQ05H*nsR4W@Ue2Kfu+}oAI zgkxl)%u@fi3Yz-ESpcN07K--5)P7n=H^ebyRO}*eNfQ3ueR1 z%*C>k)N@qFjU3ua0Ck?fKX9hJr5j=}TJ5CljTGEZB)uls%5jWg-w;K^)I&Yw(Ni~D zp7g!C=tDPCr9_6|_u@?!=UhJwza7GrtpB6t-CLY21{Hv3@rLNuQbO9^sqf<*nmqK# zNZ?c?FY5Rf?tDuvV0E8LC?TUEXVpOXdct6TS4c2*nV7J?G1d}8FE`EH!5ht=;tdLX z0UbTxZ`e5Kp85Wq7(x5#Ec1D+iolSv|XDj8olBfWJR0d|3uA*MyWcmHX>;5#uaIDspadm9@J>i&XXte=-m_U?zW{jCp< z7XCLCsrRGiHc5fCMF_kRkiZ7949!X*n-?v~O^)1&iQ&1g%(9L7pk(e7rQpY$6S%cW zAB9{oioTScl-h$eHkOdsOkN2S%rHQqUN~M1F-5(Fno<;F#NoPghYGik5%TVAQvhx( zSs-_PG+}5UmBbp*AVb!Sj}O)aNN@SNw61>L=OjK6#~P2rk)$^vPN=2ODKSg(FI*nK zhEdb{xy@g6^+i5lYFH0a|2VP|Xwj7cEvyDKWUflI6m4D%+(?Vzft5B+cOl(#E+D1@ z{%!`~Ig|FQDCr_LI$6kd`lv5AzA?!GKrVbram6Thja^TVTvH0UmlC)i8%`R3!_=T} zY2why_58#zHwu0lq`yZpdRi3z~yCbEABuH0v|pQg?Q#23v{*MqD=iKLHNn zlP#IVR8ZC->X^$TbY>+*_YUliIuqgzA9eo`rz?g%m!xYD`OetONxWJc_=l6WnYTj@ zTbC^5L`nJC7vI~*pD*r%yx1DqX_CFLQ*ne)uDBDA;lng1?#|MYR~x@f`ENQUuWfg8 z0*h&;n8dixH=V#+Sc3@Ex2(x zu9mX%9Lagp!5+Qt(8s|9@v{z}YY=0tt~@9@i-jRBP#OD=Ba6U_d-rbpJqK}QHi|Bw z4A-SpB$>hu516h9Bl~Yh=KGjIJ_52Fq4@EKEy%Op-&^F$^Tu`E)XT+`G8C#k0GMc@ zU!3W2ZTw(yF-YR=@E45wYIYZP>uUXk75rH!C9wIj+WFR-9;1nl?Wh)SRSv3%#tTd zQ{gVEr*Y6<6W@PC*V=L9?nMWy9s|Ci%Xq%p4{yj5j zIOek4+xkpy??TP`4<+!*1|>4U$Das=nt0bFUH+et=HuWm=&%yPb7JvQ(vsKaqUBos z3G!dGe-HFi{?=jt+zWNC2K2MH*&a00xl2c%Q3$48Bwl4s1R%?@;irpmP09T%i&kas zz=4`!2xBN=_K_zjhZvsGrflqbB)8kma37S4&TRg^2VTS=l)sCYX*=rN(Y5_Ij?JA$ zhnjyHeHNlK(2w$FASI$E@9n(>|7~E2lf#9qLw)l#e4~K|j%4vo_9IG8+hDuBrIto| zcPjYX0|RmSAJfle9O94V%ZJmwdkB;?WGV-wc}L>F6S4do;44@mLR|F zP}j+U+~b(dnfXxPEs|4PJiVDKZ3WE{F~RC!bm08;AJ)%r8eAJ{AZzTCGJVALiA8!x z$05YLTCyy0#n;jJ3k>MI0btigLGoM4f?2Lp+-etgBWt%mzC{*le}gr4M9idpA> zR@@$l?K0qZV=iKk>p_88jjm{yz=&e%Z5|79=KE}VdvqE;2l$ERiwa$hRzdF~0@(k< z49{2caaz~86I^~YSe;&Q!~bK;80T!F9ABxvWbvvi%+xCs)} z;i>hq(jwA$No2Q0bPy``7~$IwGLG*jpSgx<#L$Nv4WZ{U1_)-{Pg9ChVynOC#uj%x zCnJx%*7XSN8Q9=YBP)~bX~rA{K=JJ_#v=6LP-m#|U7=Te9V%ZP$AE;FnS3&|RgRRt4$ zgdv!jj>9LEImKA!aRJgGG1iIzVjK9)YXhB4>P}>0z_tg5DKBtgtZV{EoAXz5wxpu2 zvkKD)U&V9aUZ0ef(~MC=)~k|5su#E>A4OmC0OQ2A zd}OjhLJ2U<++QLj9`z4#l(wdCo|7RzTbvmaNS+p+Cl_{zoO!;R|3-fNb=*Dn{W0KO z*{f}a5Vep%IkRs@$4fU~{=)e)WGn!yDXRG#60bAxJVXuV!XD711n{1mN=JK6{BgT@ z>Ba?=|7(I!N?3(BogP1!M}AwAK0I0I?hDvkNhGscRp%>A(t-Iv(0(?# zYZ^sgY_3hT+PRKLm`}y(2v9#mWeY^`( zNqQga#E+5jKCx14DEwRp9`I>3>N9h+Dz>D)AW2K7p7J*{6hwn4<-P z0z~jYMrGi`dujxI&YJW-3-gDy^kgh+CLJ^Rr!Q_=f5BC);PlGJh;Ldnx&c70ED7Of z+5$#}2XT2;MJ9#$`DfgI3nc;!t-q!!XW?cny97e~kEx;`E&wOih(j0jy0k;KS{F*% z9h=|GQr2t=JVPV%+F6`CBR3+qZ>yoLMc(tq!@%nYJ(r=?63z^$Z0**^C{ww7MwgZY z|4uc4j@3$&jbc(^qJMo)Q4xwTKH2U$7YV8gz!kC@5xSaqAM;uFsnfbl(S|7yu@EM- zfCbsUWDUwiod*&&R#bfuc*Z#Dw*aL}8COaSqGM&Lha==pc(kdGi#S@v{9)q`C<2sm z&Y90ACr+0w?4r=)Wp5z#weKNDNCJnE2>Q#!uq9KB)ipOO-05e5&&g)OzbBko*-ml# z339AdLs2a6YB5qB5Mo$tR(C?tgA1e_43upuC-u`GKYHqu3W(*?f0h(85n>UJx6_(_ zBq3QJF9UvGZI5MHL!-<}LoaE$xTw_Joexd&%QFMmB&o56X|_~{x1<=Y_36Ogp;2Vn z^#mSGNx4Q$d}h^Caq7JwZ9bn1jrh`WptydIRb^X?G2r^3bEWq2cttUGaG(6963fKx zYzdmRWeIx)alw$2oWkB|{q#N)v|v-TT~}~h47pP=Es!z=?X9{GER$B`=}S0HwmFZx zJGRl6nQAin${AkKYhHAUWCFD|XE~4q9*nuI<+#<$g;MW@guHGj{kP+~LwRAUoc$CB zEjv^tQHAx1Ri(sO;{~;R)@MAp}I_yTlAq|mMhNIAM_DVpo>%q?735yLLjT2(C4r4lHi#G5Pf#E zRu$$=tDAL&z4!bABX}w2INcD_o*Hm({@irxejv2ty)bk!h>^%R4nIDi2smwZ%O5J1 zD5j}ob4ngo!0S?!Ye6?8r#G$v?6X4B!BE&1+$)Bu*)$}~ZcPAo+Lrvx8`i!c}K76aYSD>w@p2YrZh$XtK8~|)abidYp0^vqat4<4{ z@1#?}1?c|QR?62*-^?GUk#o-crR`($&|_#n-qTWgT)}Kva#n=pA5Cv(7A=Jsr!5N& zG+I@fHl+_LU(sKl$p=EzdKyTx){p7B*fr@-V}+iFUvz_~gvp$e(EG5QBjrgy(kzA<6FvAKV(fL#J z3!T2Wn?cdJbX%n&0a#H<$YqAFs`+w$}jhyD2B*kciw1W2UPjCfN#Is zV5~KQ7uI7J1EiUt7+msSsHXYQJ%G8NoY}cxA0RAi!O!ib8xj~B4_34xgYhs%F?-;Z zflA=#B=RdBBR6$NBOko3WbT?X_ypy6nBF%*tH@)i7=097fZ(Vx1pEJL;dbl#IR@3| z*jbJ>@2n33k`Fv+(QN4oWR?8c^Jey4=}f*jmw0}P2;$VWp@*0_Of<&BLcyH>_^;sd z+PuC^jszj(S&ZT}A#mD=4;VL!wWM(TXeINgFOD59)>PAaO|RQYndw#N#5DMqj76F6 zcC=iScaJNgNxnF#Ox;O58@)S$eE_v(eQ6slgsxAN{T(z9HZoCS&@_!`J$SFCqc}3& z@v#|rZOZJ|!_D=f_n;J-y!oW(J7;>0MB27}-C-sl-?M(w?DITd%`Y=tes;nT_S@!E z$@~Dz!-i+@hC(&DzpO&vQ3vI9kGziJJakkq9Z~wON*M*52dYNO5hJd9>~NisXeKl7 z6P?$d=A$_n7m=|0T>P?I zq^;R0x^oQ;uGTP&G9@B}NEzBqXrd7PEcM4Nxd717dZCYC@wCrRx zol4@u)`q6C#gYHCQ{)kK96~t(_gse|);hpxN#+x)FMDlSR6zdBKL#!fJ$=mGm8BD@ z(LvXIyh5)6+uTbR*jCTvG}U!G7Ul%s29FSAIRBcB>OPrcO3ThFS()OUt@^x<&A}ZW z(U@7qafZX`0$KmyPb(%myP~o<-}8h;5(9*sL@ZTued&9>7otTk-$glc+?GSWLu??< zSbxdNpD*xP`ir`NIqKov6fKwP@D#^`y!0Y=E?&<6>GnqCtjzG=4DuRa9y_5oH^YPT zSeNFjV{Du<|IDU$I;S*IR#xx6P%m)JF^F4)vLV@Hi|JNpp8OgT&r&#>HMd)O4zXw{ zNhf4h`v3)pnoiuXMeTuiEGq|4sR8FW94}Mw{peF_+#JPrdeR_r+M@j&?Ic65LXiNv zUgMO=<56c{k6TP>=NFVPN*H@6@fE8Ooa=#FxbVkVj_60ImzC3Iy6}5Iyfn29RcJ|^ZTFF_P4u8gf3(b_&!pE*Do6a`knHm~SE0(N^RFw)bKM=*LE*e; z1PswO3#pNJxTLWIZU%%t=^O+sN+%u5K3%w`#@g!>%5g>JG1nswF3!hiG&*-QAFf6S zXd#~Gx%LFD`<8Niaa|y?dN5}3Rt|ZcQ6J#mN;jrw@CBs{5;LeNMH zx4m;>RVT^$pO-tI$!ax++Y1A+XA0t%H3V;(h6tRv7;-k!mp@?DaJvE8lUPwuM90Bo zDXUjK7Lyh3tJv^+$XPES6D1uTi;Cvh7$!t5ZzaXjrJ(rbU~*#h?VUb+s+{9lI3=X= zvkP@Rzq~dXIW zY|w&LqW0Efh6Qx%zjvA@K9@M!6+U)cPYde-myM-uV6v3g16!sifiJI|D&UHLzde-5 zAq~%|GcdT3we}#D|I?}_f75RoTN%AviS|;do3x(`QC*R*Fb7^wpo%PcTM7Aft2>`C ziEc;ccK0oqoG*Es*Kjf3)QEY!7QQERg|3O`^x5W~@-4~rceCyl`%%lw2|AH`?cnOK dl4MMC+%ezpDY2^*yrE8GZhHBA^;wUk{{u*JGim?; diff --git a/assets/gardens/gardens/garden_10_open.png.import b/assets/gardens/gardens/garden_10_open.png.import deleted file mode 100644 index 6634e8e6..00000000 --- a/assets/gardens/gardens/garden_10_open.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://bryk735xd5r8j" -path="res://.godot/imported/garden_10_open.png-6df2b29b42d9313fb097ea589603ef68.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://assets/gardens/gardens/garden_10_open.png" -dest_files=["res://.godot/imported/garden_10_open.png-6df2b29b42d9313fb097ea589603ef68.ctex"] - -[params] - -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/uastc_level=0 -compress/rdo_quality_loss=0.0 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/channel_remap/red=0 -process/channel_remap/green=1 -process/channel_remap/blue=2 -process/channel_remap/alpha=3 -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 diff --git a/assets/gardens/gardens/garden_11_open.png b/assets/gardens/gardens/garden_11_open.png deleted file mode 100644 index d53f2246212217868101d837041bf77220237aa9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44270 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 AFaQ7m diff --git a/assets/gardens/gardens/garden_13_open.png.import b/assets/gardens/gardens/garden_13_open.png.import deleted file mode 100644 index 19a34adf..00000000 --- a/assets/gardens/gardens/garden_13_open.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://bv2riha86d4ac" -path="res://.godot/imported/garden_13_open.png-2f4b311fd8fdd52939d886204f85f5f1.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://assets/gardens/gardens/garden_13_open.png" -dest_files=["res://.godot/imported/garden_13_open.png-2f4b311fd8fdd52939d886204f85f5f1.ctex"] - -[params] - -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/uastc_level=0 -compress/rdo_quality_loss=0.0 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/channel_remap/red=0 -process/channel_remap/green=1 -process/channel_remap/blue=2 -process/channel_remap/alpha=3 -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 diff --git a/assets/gardens/gardens/garden_14_open.png b/assets/gardens/gardens/garden_14_open.png deleted file mode 100644 index 782bf9188442b23e867b9744f31617e8e856668b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37281 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 fz($V4ErD}u0d{$Hcbx$FN2K#koZ diff --git a/assets/gardens/gardens/garden_14_open.png.import b/assets/gardens/gardens/garden_14_open.png.import deleted file mode 100644 index 523370d8..00000000 --- a/assets/gardens/gardens/garden_14_open.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://cr76law5eivwm" -path="res://.godot/imported/garden_14_open.png-a684fe2a5f05b9b7fd22838d53791afb.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://assets/gardens/gardens/garden_14_open.png" -dest_files=["res://.godot/imported/garden_14_open.png-a684fe2a5f05b9b7fd22838d53791afb.ctex"] - -[params] - -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/uastc_level=0 -compress/rdo_quality_loss=0.0 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/channel_remap/red=0 -process/channel_remap/green=1 -process/channel_remap/blue=2 -process/channel_remap/alpha=3 -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 diff --git a/assets/gardens/gardens/garden_15_open.png b/assets/gardens/gardens/garden_15_open.png deleted file mode 100644 index dae75fe931e8daad436d6224d0721a1658fcc24f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42444 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 G5&r|;p4Wc> diff --git a/assets/gardens/gardens/garden_15_open.png.import b/assets/gardens/gardens/garden_15_open.png.import deleted file mode 100644 index 4cab13da..00000000 --- a/assets/gardens/gardens/garden_15_open.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://cj6ois0siu3p0" -path="res://.godot/imported/garden_15_open.png-afb8688cb9957b71d459db3640d2b0b8.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://assets/gardens/gardens/garden_15_open.png" -dest_files=["res://.godot/imported/garden_15_open.png-afb8688cb9957b71d459db3640d2b0b8.ctex"] - -[params] - -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/uastc_level=0 -compress/rdo_quality_loss=0.0 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/channel_remap/red=0 -process/channel_remap/green=1 -process/channel_remap/blue=2 -process/channel_remap/alpha=3 -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 diff --git a/assets/gardens/gardens/garden_16_open.png b/assets/gardens/gardens/garden_16_open.png deleted file mode 100644 index a053a7ec3be64209de04e175a60e3b772bcd5c88..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 51842 zcmeFYcT`i`);CNMkggzIR3Lx?q4%mFNa)ggF9rw%r1vO-QbgjBUgQW!ktU(H2!bL_ z=}icVNGFQ)_U;7FJ?G)x>v+cZz2Er$(Q%Hl*Ia9s-z;mcwKos+bZ$^nuu>2Z5Ku$Z zuj>;KoN6N=AZ|NN3XC-CbXNiYki*r@ZW9nt(&PRoBuL9(CLoYmgBqIpm}+auI(Wha z?HoProdg45a9}n8fxJ=x+|I$x$>);2lMB>Cfpe{)h4T{BQGwG$LR(lHuHtkHsvhL+ zWDuld=n&-QAmhlXq(~tjAPX>nIr-RK3V^wL+?EYc;KcKl1%Ad23vph;Pw{b6;Jk(t zc*#^-?~;nAx6>sFK}oQKu%y%_DH%Z#2`MRYDS=C(!Xgqv!eT;V!eCJ`S#e=manVaZ z|8Oc&06)olJ37niUswAn4tP@FyyfEqmlYE7_xBg{7ZddKb`cVhk&zJ+78Mc|1p_m{ zw*x(V>;k|Zx4Dj){Ke2V3i*UsM4*GGYq6DR0je}38pga1pA$L*ik z0VoOu*ujNF1cinE(;`QQf31Q0db{IQb94}La(99`dHCE0)`|Sbb?{rBKAyL4dHxrX z|04fa!GKS+wf`miKk5sE{YTNaeN_Db2!2BPA6MQs41_xg={w!_^!0XdQuPB&;rdV3 z`#_!lcFzCcgrodd-JJrU|797Da=Z*53dbIj2W*v9@piKF@$@$I^mJD|jxxQ!AiSia zf{&_8mrbA^j-LLvugD9XT=KWS|K{d&-Ok5J5r{`Au&@|dRN7EPR8|!DPl{hyR90B{ zA54yCp5USF=?HZW{09$7u!w}Ah`6k{gsiB@KY9FP=1Cqv{y5tC*!{1#{B!O<_&7Sq zI(vG|^bcnLCP>#C3e-J2_kYa6+2RNYlaZE?6t|a>0NY7P+kqXO#T~&i;$qTZ zF;ROFDLV-%QDGq1 z?=t*vIeGjly^dMoXZ?33w>_PG{O!D*uDJja^1sRaW3K;m*-7^DLb$!a9s2))BW~OI z{l9a=|1PWkpSj^bR;d5~-0*i4JKVDKaB*@}6#6TG{~Gw;dG6Ss|1-1x%GQ6+M0woi zBnxCQ5K(sc>=BU{`nR#aB_Gc>#bu+rFMd8y4uC&GBDlYQF8wF@l&wW`8f0kp%V>ygdBMe^7p|JoeTpxK04_>&M@4{TiPW)ZcKO0OZ$?zv22dJ}0QZ z;W`1xuOENI^=o`iP=CX90+3%n{)X$<_?)2rhU)|%zkd7;*RSz8LH!Na2|#}R_#3WY z<8y-g8?F<8{QB`XT))QW1obyuCjj~N<8Qcrjn4_{Z@5kX^6SUnaQzye6V%^uodD$5 zkH6viH9jY(zu`Io$gdxN!}V)?PEdctbpnuIKmLa6*Z7>E{)X!WAisY64cD*nIYIpm z*9ky={rDTMU*mIv`Wvnjfc*OLH(bBQ=LGdPTqgke_2X~2evQuw>TkGC0P^d{-*EjJ zpA*#IaGe0;*N?y9`ZYc$sK4Pl0m!c(e+d`G-@nD_^ z*Crqc;wB)7xJy8=a|HamKtSLtOhB+`OF$r-LO{UeiL_}~BOrK04Y_{JFkpQ7qkqP% znbq3S$X-axkb<2ZeFOSs*Goq|gi~jI1m%51+&)1W5g(s5*ZoV^n)pZs^NX45EU$x3 zYn-8qa0GF&TnAAg&pj%quU`xa3pearUVdq(?62#)wIq|Uo{~y4WVCj>XmRi0hs@XX z_1<7XHtusOzQ&?(Wt$w5Acjo)a0~moe7*7(>g5z|Gsry5woW(otbTbov+1hXrju=< zZ2X_kZ;|k`ERaAx%%kqSM@Sy+7(Kem5IpfVS60QB&#Wo@J;Kbk1N~6(?$CrT>y-jN zq`ghL@DF?2`k?gnwRF*!mg{>pmIj+nhero6+kTf9C`67wk5AASbWQ)|O=rgf6~&Rc z9aP#;qj4s;Z1BsV>4Al&ThKG}4Cb;VhS3~$)w|mkPq!4q&m*AGBB~KAB#|6;=Iddu z1Z$$9i1B)u*n9b;j#!A1Bo2g$r4r=*8Of;r(xp8;UA7QA0oW zLPFTL>x_ighVM>K^P@xd^Gpv+uT>3A#%iP|G>!Qj_8^Sg-8c5gjKlqUZch%7c1*Ec zmY((dS|b^rL6#+zc}MXg`b{VaR?>|fAs#y8hT z7Km+hpSB6usk5Jd-o6;D#ve7bR(y5ik>f^FNLcnjY!j?ClI8Pa@b(KPs9nKbV!F$u z#-2;IQbVss{v2C$TU7s$s+8pS_I`@rE!g3qrSIFVvZ*jviA*#_Jk9b8mI2q|GS#Xy zf0|~}&Dd4)(2XibGJ_xnk~oCU-J!z*^U!JN`rdmJvL1?fv({2`J6bN#a={gTvI}j9 z?1tS&&*)|oCy6`6x>FP?=|>qH!X@R%4j>50UhalX8Q-Q-wOL8@+8A|7QTjHwmYuxc z00ai@{(ILK7oM?ur(ZGm>^7bjGZ!iSjDEaZ!aYBQ(Lz3clS-Xn3_V)hd`ufkCOM#cTd~A9RC`9 zfmTaQ56Ijs;x}i3v@I55lbOvcH0``f5|wt*pSnq`e*vnOc>r@&;}w zDdpYEnBV{rrK6N=-tLQA8m)1OnG$)oKWu?ToRr%3w?lo;ufd4h7NwWYnT0-_Lmw2_ zJEbU-Cv#N4l;u77|7tNc? zJ*Urgg{sjRiwaw@GnpxjOqi5g^6L?UGqVt7POT5e`$k<*;`uO)Tio*e9*fC3XZxda zfu*qB$3SGHcDET464JC@?^q#a2DEri3+5Mc-pd?U#n1GK@s@dQXQBl92~b z&>cLQ_yZ-a#`P!{_SpwBJEZ*nlr*I@x%BOg16zs=q70qIqSWveMcXUuWj%{qSsLC? zRATJNVwKw)%N0a3nFO0leg62It?b?9TRUXIKFpQQWN^Xj%2uJxpJ-C-4mx=*^huMr zBDI8@VN#Kz0i2`!RLI%wEtQzyY+LK=7S4wU*#wHz%ipeCf*?U=RF89eE}_Z0V+{!X z$_~Q`N*i{~n_uo$xQS%{;Y9=gwD`4`up?rx7*ciG)>1Iu}cV?Yv?jE{DL?}O02D^sn zBg{5Cm>h`^Dm(m`!lZgoRSkk5t53z+AyH8@nS8!7Hey63&du*;#W88qMhZXd1(6&VL`E0lT)_4-Q{&iT>C^4?t-a_Q-O}zRhXlV%_Md z9qEq7+`S4RQK6Ku7&r$OGFREF*cDRrk(Xbqm_+ z!hI1sP0}*awLgzB*7R|eUKr}PoHZuEt8B!>1_HfptIlK;4q3%xZ%kqH> z%)PHjQE@A^;o7k2>TX6Bg-Qq^56ITdoIEWL_6E>zOgu5g-8G3wz|MzkfSo?%zHm3F z4ne8+Q(-;0_uXQxd0t`@tAoia=ph6@gUsz0&6K8AKl~OdQBj(LUXLZqKB8CeI_y5G zn9`@U2_+)fAde|Kdzgv+K&aT>cy*Iyu1kt`*==rF6!2(?93Y`Oy(5H&39U1?C!E>S zi1DrB36DN=7I9dBnIAGn%!x+ zt$~S)G)V26s^?qh=glIwyb_sHkxpz>GIVEH-D;T*dn4qN(1N$spN}NY=+I__eW2?e z()=hDVV<*1wBB>1q_#b%exFf*`X`8G-RSA7#n7k;68J{2u;x63{mrN;v@At`0uW~56>xf!V;i%sR&5ys}E z3AOB>UQcyeb8Nnm3b?^Xgs~08E~MGLHCz83(IS>z;md%bnoIAqp{@JW9RF5 z4oQin4~aZv;xz}!Qb)+|7P7^#$-IyGRSdK-9Hw@|{LD1lr z03c1`bM3{IDSflD^wJ8BGM(|MLT2)*v#x0JM-?P*^ZGu$9Ohm)o#0toy}RrEEY>Pj zVuucU5gbCWUBh?Cu+21A*{SH_16V%s+4d&#VaMu_9|c@{PPNQUWIFEf#iN0Kn$_v5 z$EIUQ)EONj9SYyi1W(SGLbi41Ose*6U$u}<5$^M^^IO+X;#8spd<1haDZf7NgJJD< zfm?CIjl9d}tM2a5b+|=mNS~K|=2kW5)TG(Z6GWXMoc$`u7c)#4<%f->={~>5gi+|; z;tm#C*WRO@dZ;M~WQ-(jtX==6?2Oz~LQR;W+frKb%K15xa}O22RDy>V1fTy-vO_&#XX;u<;qDnOl1*1+6G?9WMA&h3V^yo;Po7u}V#E7lD0I}j= zq#Z&Fuye+g>ak>vK`K*CFKH?LBCs|y5zaGn4)a>0l=V{bOOepFJOw0*kyWM=)1ABe zayQ59ZHv+NsdawyX7&JHY?y6KSqlLAoA`EN=&SSI-l*3hcXx{kfKnuLu#wV-m5u&X z50<$%=wbVHQMqG>>Ry{=^ZbJpP|1$l79sHrDT0l_pCczR)bM}|>w%FV-tfabLx-R1 z*18F3=KyH;uw{vGgb;{)ncUvqkk7jYh{upp!i@Jcz02>ulsX77$!PTdY0e`8 zmZh`Wt8l6Bn`pV1Almg}(`MRO2SB@}4*L{ThajIB!=uEV7p3%~(;0`m-7W!{gmu>n zib;DTGeVw5Nf01bwE0~WAv$|@5OGe$VTr7lo_aJ4r9hayo>_6uB5Ynj#+&Z zS4H|zA=xBr?J(C=nTx|+pH5lNW)lnbg^-T@KnEwU$pRK81L=P1$Bqp>=Et34vQk;J z1mgDTk-XZlw`MBRgtwwsCww~}(`+pRl`fjNB^Nrw`o8SL<6wagM@;Q4TeBajty4dN zySLc)(jEZS&`LJeZoHqDI$1x3HMMV1maNwLRj*oR-Rot6)-g!$sZ!RbdB(c(pUTF# zA(R`3eic&ra7Os>nP#_*rnNSNltCk70LwbRu?7;f@TfHc<)lMn9PZY9DuYfs@Tm=D zEdzYz&JuWJIV0Ckx%8Ac9g)`jAa{~jy?-(YTG>QPy_^%k{0xZ$<{f$i!RG7T2H9XU_9pE#BIY&nZjHQfx~e{T#A&Ez zzoZHTar=H4Qot{ZUBo{l^Mqq|=Nk!5TvqUE-tfv&ouL+sJrxb5qj z$R;4t5Y{S~vSv7KOxwmEec=x|oIalm=S*%k>%WCXOn~-2_LV86NPnYm{^(f5 z(WZhG5(ML6Z1a)!BN(ButijZy!3ef{^=hoV*ODUmGX}mOUVBUX&3 z!9G_zCAp2r6$lb_Umyzhnb_2pz>nC4sHXUnF?dpT)_pGhBX7k%PCA7%(yT!(} zYiCw9zqLoUkne{^ho3s^Y6Z%$Y!)Cg)P-o8Xi~AWhggb0ht(VFdNVob3_q|_q6Gcq z&+2$!G3dJpU4zB~j2U7ic%B1jWyoUfEV@qB61K;yd)%CP7(Yps;t3Cbi@cElG*n6A=%W#&=*s?~j< zBV}BWp2LW|+n~EZ9cYMIiDWX6zl*(TfGd5S_M<$HhKSz`agHt!`!=DiB7&=iOS?ko zL%IMPp#~QgBLUN6885sEv8i}YEJW6POCA_6F{7F|MbYe~+;Rgm{A4mHb*yPW+q07V zCEgxseYT^XvTDCg6iyz}eG3?^0MNfg;UU@YnK~$C5aPo6{FUnMmUm{hfC9m;)E>s2 zJq5c)7;cU}B5R8Mns4er204ki6I-FSMy}P6u4>j2eAlLT);z<<*bIO~BOS2(2Nfci zZdE2yH$Q*`+lbbr%;&-RKf1k~S~hYil1A>vq95erlTW44$x|5z0LkZEFDMYJ9xmMe z=2G9C-Ac}jqO8DZpg>f~<3Kxpg2$ZxmPKQstaX~jW4`akYyeE%;Elf6B`cu}aZXnPaZg=wo!f8vX@ z@{f1&_tqrO1HvNO%Ow;Ji_*2`X$e;=v|4nyBh5eZc5~v83z7@yX6W_6nj+s2l@VnT z%PV2Cfr#kebQW1op+Qk#>PfadXFZ4~<$vVuP?Zzg@B&rxGhYZlwuD2M;81eVK&6Rr zK8g!i;UKbn`J6z4#9k@-F58M6We0Ifqz@@hh&@GyaeTBupUd|alJ87`q0~J_=dOT?~4iinBg_utfc1(W^4?#fvfW3RqgzcU>@edGWoI;1HPHE=QXa}u+)TY-5-p=@-jzmdFaMjkTgwY0YV|XD`nX`F_ zhV+Mk9*l~Ilv3tJV{5d7dk7aorW9b%BB8xpQ@z%?c(;mOV((1+kxDJ15U3L{+Ty*I zER6t6N>ICZc2gDdB9V>+5Q){Kv35*#eU!f#AdW1E8yCrIKVWGMZuu%3#3f2*sec|l{Ya?p_LHR@^U`R-{ zlgNt*$i^Dg28FrxwOao2S@$*?`ZKX>JV}49y&1kf=f^)5LJv5)%;OLLnNT1 z+UrLXj8dvkfT?FM=w8^qAq}2=Gw|IQIimcLzqa)%GFP=GGsdolvrz!3t^P&Za&oxy z$OA*~L(s;ZJjGyMtT0C0ArS->fsNUldSPq4r8EMpThk${_Q^m#LYqK!3y=11njcbc zJH%L|#DE~NPMVBuvK;U##>0ZVCi-oU26MnFHoFa`mnNmNH&jEbNL{ z4cbs^Rl54I<}FQ`@)byb$0(}3eCW=|lgnXT*eEpn*Yr7y(~kkHKFOlypTI{n_KLrx zH96!ey+qP$1L?m}1&y_H*pTDh$P&LmyyK&@NW~or{kLCzAJ;*NFZ3QfkY9GE0Gr^R8EU_TS4NqVyA*(MTcU!dqOCInpv=}l-3ad%o zE0~bL4Ux5{G^3Kk<|`U1_!Vv?GguBu1>)3oi9Szj^IRg#t}uVi4a^G z6CY_pyhUhYrjGQ1P>PBPH24`F6{{&!yc|v6#ho-`1>t1ohq5!7Xkr9=FXLknbhVZ- z%Xs=xnM9-sP2t`+J20uAm10`GtCDpC0ol0WGwO61=;T%d`daIakl_?{RV}!*Lk{1- znA7iif=!O*uO3jqi{4BFvleU5wZ-Vc*URA-l6ERKfVGBa$_IOyu*vak1S%u#FC~?sHCG7yRl_rkEI^V~3 z$FU&$bR$~;1srA)qK=d--k20y_Cwn+2(VNF`k_c7xm#7Dv8#k(@t?$15Ua-6wPfE>{L@Gr|)8h&so$95@ zM@cT+jnvyTKy3iu@zNh~2)KKfK+`B(4?5y&45T(Pw~W4*dY>Ij8k0>pWq4}7*yS9M zf*B6xJmfiv7w2cg7;!Q|R)~ozYzHD}QO~#Of{CsMQqo#(T;G&X#j8zZKfjm@A0!Vs zwF)kpmL5()dJZqb9|D_|q<;Db=`_Ymg*IU6F=qUv(jB!u0qVgmp^d|-oLwQtF_A|Gl`OsLU3w;EOB+o{fNo*2bVgFR)>Rq$}!T!r+6y}gqHS};ZF zo!4QzY#u<>40Lh8c4|vP1&>GU4%|s5t`TN{^nbWjwcFtx2vajH8oS%E=>H>45SWI1 z7`?LtQLnwN@9BFadf2+T-rCo4i zqr6KUXx^VuOMDg{&t&zz@fpVnb(!MU-~+I{2-YKJkA1rqI5X!NkqVY=P(9i-Xa+Ve zV22VXtM=otJj$Eoq+?V z77)x6R%l#{s0wUdA@+{5C=#VmV}?b-&Q3j`F4@}tI5f*a{;$t-;& zG$8%M?*(PRFJf*Z+*onDQ0~f=Go_icsvO}{1#T%1KrnV#o&*gncXehw0LT9h>2!@{ zr9WBN(@9k=WOawzo+2p?s)_1cT|7MkhYi$7nq;xCOCs2)U?~W=F;BN>(6^a+OL_*H2o_{$2Miv8^+I;^82xnae5Qxq~I zh9KxVw5bhvFDk_fT;c!)p_}7JpiI9~o{%SCy@qHJ)7VISo zG1r2HlWw{^#mIlg+bALZfm5mZS^m-a?P`znNR(;W2PWs)*0^(ZcHJt#a^$dDtuZFA zYbcv>v51rt5}UKK%D=qIKjJxPWXS`ZuYu~}rWLME=_w#REe=}Pb|cP2gsEVzAG5DA zI)%xI9O2nGir^=#6}^Fcm{7gDb3jFlVvXNdkCh5G!fJn(D@O4`((E z4Po}pObQBo+n?ON<`}AHcvC-fb@p)w@(=cCsUU|5LBp=!Xf8))8i@1;uw zIAEU3`f=Xf;r5Q${cu77X++&GJ)2W8xD_2{rSss8&>Z+f|^X~59+6{;~6-nF= zPZonUt$=`X5D&zyuR~>G&TFj2*(Md2 zc!0uBNbi8Rsoey9)yiKz+~8GT+IK(gX$ z>rrGQLv0>Hz2C_#viPSEaw(75A;g*l1*G1m=QQ33O7aG}ti*Q%h{sgdk%GV_7+xFI znQQTlXKQ_>s3Ed%e~yibHBSo9XlqIY=h~_FFKRwJi+A8~_4V-ns|Tuyk7Jnc=fZk^ z&h}D$T6OfHpyuI_r->RTlnuD)#^F3McdER!!SZ0}(UDn1@B_$rR@ptA#<{SZ2n`cUkiQpbDTc{o*pTcFtoO; zXpgKeiW;!R*WzMjD~Hs>?;u?P8o|6ja>0N35X7z*2}*DsRH7Oj0^f&>YnXFi6vI2D zKZk<3pkcLO%;I#7=vjz`DzTy`J|J>6`7U*)ssykPs>F0FIg11S>DU*o$Jq@E%^c!J zYJzmr2bcX>zW^FYR;hhyI}XZvc@nL8B?bL5L2n8AM3k9?ZJ7uTb7bk;#g1M7TZK|L zGr}>?kf>BtC~Vt3*nV#GyuQU;R2!BgB+Z&1@%Z*uKh5ik^r;z z^?v6MNqasC>-c>Ga-)cjE=(LNi&+HF6uU)YBYJGp2fo@K?={c!1#+@u%Kd-3F*L`K zh~PZgUy)&%-+KX>d}X*sSGKBzgd)|YZ63fWjqj~7DFn-W3I*T0eA z^BPnVzu&4J9#(AbJ(ioRI>4vJA2M|rryayC=QRD|6#Zh!qx7`D6lCHeV!4(c8C`jUsGP0O$oJ%SJ|ccd!h<@jNl3m0`5wjB>ywm{`#GoQ zwAl9tcgmQfak@d97$#9S%g!&<00|9!R`uuQMT6t`1i=P7FZ(uqS@a}0Y#DOX)#&eN zJk*LHfAmSL17EJjPm>rT5&KSWbyM!=#`m9oQJwIUrwVuOw_uJIqwX^K1uYTC(gK=v z*YMlg@iJLK#aJc!N;$#~Z;9**6`9&qCf5Y18ME^OGy=_)C4jov1)y zBn1k!2E(@A;igaY5g1o@$rZ~PC<<@&9mOrrRW-QU`q4aq0d544QR9!`Ppf9Ra92M- z1vj1XgG^Zt##5^ReWp=6$I4^0Nt`Nf84BG?)A-_TO?^G^LdI2$H5#RRF65OdP9P-q z#bdX)AIX9PEya`j=KW`HF;$b3jgO4aQfBVElvm^TcJqM8nW4L%Di&|>8NUXxXH`El zmVWOyOi{AfhKaq8V*~wWq^`O5`CI~+*H2xR>N8!XX5*t-n|H_c2ucqHx0pATDt|kz z3+1+2U22a*s8~D?9X(bdUEBOZ7FOOi8LD0{;4rj|ytsD>%7gdRcu1>1v0TI+0Y53{ z0@8fDUg_vs#mFtZ=IMhUBU(swyxA^6k_XLOxyPBvFN)(kvVLcyPOGH(GM3`(nd)66 z%}^1BZl%~Lt>*RmB>df4~IUJ*TuwI5{ zio;z+AW`?0HM(LW) z!1<)#_}uq%tubjv*Qh47SNQKjhv>Vk9oYV7-ufEs?y3tCd(&y4F+ zK~T4@G9ja*#{^C?TH}lzU4bvd-v;2JvM?jm><*J|>Y$vMCF@ep1(z`Zt@9r6sukCG zfuQ_Lk>nf14X$7M2n6m!EG*p4C4V@K{X~g-Wdk&@i$S)^;n>o&Lz@()*OuZ}VA}D( z1i{Fl1bpX>tiC(MVy{$NnSVt4iAn?-3s@@3wiEG_7)v8ybaa?m_1zxxj)xPbkX+-! z{3u)mAGG~``Uph5#a$-iE`S7Hd8uhfGWaGQ4-o3(ISy!z=PWn+0YGC1UlDvB8e?CE zudvAKXCQx%SNe?UbL~8bH(I7*(__YyX_DYH-xG?Wf0tQ;>$IiOEE~sZl5y zs}EUrhTp88vf(bdK#)hXI>qUWLg`Vc9TfBx1InKvWU2s9Nz?QW;|izDxCLniQ z8HmwT!*87Zsx+w_b4EOQ+PU#pN(=H9!9T~_x$6#GuXPt|X{29&*2Yl%N#!SD#3GYp z(;je2dTVW2eDWR%iTI*Im(ROKyrf-O$m(d3_25h?dhmK~`;c*e?Y^Y&v(Rph6g)i{ z3}q7k-hbz@mWsLMXY#5ec=Kwdsv>y?)DaJrRXvC)uH9z2WHLS_8g<{?sP@lc{_Ik$ z4*oC+v`ySQrJ3DXq8>{}AC33EV9NxiqZxFobMS*ff zCEl{gKMf+AV4Y}S`_PBi#(&EG$&jli=w`hQ;UQ3r-t^UmH!B?4kvHDXO;5w?d}ECX zaiv)7H3;^?%ae_EiIS4JfHuCV>k9% z4^CSUdlTA|F@!WAAF9swyy_0uEgQk_ehzpz7Dn^Fu%MfOoR@|f16Loaq3=iWBF*U` z-{moK@yg@OU<8*d_U7??XnbVO%|04m{%V0kUz53%%Q)6jcoiw$n=|^a;l83Qc6v}T9!GtRcdcTW~=u6!+>#% zM*j!b8#~J(u^;dZQJWO=vvRV5!#Q0bFaqNCtf%PqxfN}+;%B_w(9FoaQ-`lFSu zeTR0Y}PG3Wx;5|~!f+^8}1hCTbqk-_f4;cZQc zy^xJv*yYU{M5w^ojA~A+G)Y4*fsz4hyEwcZ>=#MS?UZm%f3V`YVwLl)7`DKi1-Hv> zIfyi`m=eHa;q}LCS<#{-I#^4k-u?6Hc(}W+}o%2VaS3=w4EQ%5Mv$fpOJ9ZtK^q>F4JNW5U5eUb~-ozI_!b&2Q3##IhK+)<-= zx)qMtCAH+kpZoijZ(-9jL+T&9Akr5!2|lk@nejkg74y}VB_6}h%$LIuUT<01cg7mR zAjVqxx=>)ex})sNXw44a)0<@z?St3x>X=_5Z}1=f!9r3~TBN($gO2N59BV`!ppxw4 z$8Qt_CH!P(8sx3U+b1Ym-;`M0;N@bIK4wW`10LsB4t-p4EYK8q<-Rd^hm0xdH7c}< z^M$HKC~H&OvCZaMkPG6BEmXpC0g6H}A%}Ulz~HjGAs3{3ZXGKjplWKrxn8*IUbcUY z#8{L$uKI~r-peRmK1JEq;3zm^0*i+Q6~G5X$ZXN>JZih)$t(Mm>SRfA(_%@9h$1LRNq@1nai-x8%w~X_+`8kk? z2OO-L?;Z-PXnP~7U=k#pO0*)y2VH2-L*#Mq9iqW)@mpcprphU(m3Yl^RD zfIED~@2b#Ol*I7Q+`Fq4x;BcMDNgW*Db*;if+rF!AO1YhM((lVFOnd!B@vuTlsl(q z6SS{ed}JOEnp_QzH^xU!4_Bur*_1I>(j^MY?{;Rmo*~fXrl+_y-eSpU4L`w~Lee?L zy<;-z{g)>xEiGTaIRG&kAt0uk512pW-vQpP_S>I%IVDxv+0r~`6+8>lH<_q zacB-_p4Oka($pHK)?*UE@~}FtqNr?yem+lSoEIS$|8pAG;FeZOQ^|*LUJ^0o_B$!n zQC{pqDZ5pM2e-L_FAQ<|j9=%oyU`QIwyh^*{W80wS?hkoeJCaKbE>7CAAwWqAKOy! zP>);ghVYDvQFs_&uL(p#W0|*5UREBpryVx@wOsFc^W@=~rGJ3r9A2F5Roy&)`F>zp zS&#eV&{o;kmGGwpCdz`suEzjmgKF4jbn}0Z`8jG!a`YRmZf( z`;UUW-^R;%`K3s%Nnf};+>p1JsRqWe?&nGNdnbC3+TiN6^-z)fkCBwY`~laz_Bc-t@GKo(XDN_cE`8ER{G6rkSdIzdlMvc?+H>+b zZ(U`&W$ee#cUXlwafS7|P#!AITvNjzTl(ilFeYjNWZj31_E)shU6%b~Hax^)SQ>{P zJjTTe2uA&+{O;Jrm8=ydmx5FPjsfQAc(&p)p=~-ivf?;=cNj9BV84?1FFOtc!N_P+ zyy&jCXM59A%o~qawIOuIf(P4@oFXzzwM8?~nlK7-Hzc-(&K^r(XGjqaehp;A%$Kwe zMV6w4_lApN;$52-g%FhSz$ZjN3sds!v}#yGfraVmfj`~AcEl6BPZe#KkC%f<8pr~i zG3N%}bGi++kyb;E4*N%sgCYoN8O~ezd^K&wrC`+?0?tiBt4U&fJ@SvY&tZeB&sHUJ zm6|WtC*C5gq7Jt|=UMb_DGqmk56FBT@yG@WA9>X&Y<`u^nkv2T3_tK~Fdmef04RrY zyxp5tuotOa+*NwxUV-|ChZjaY_m3x-Noj0X63Kc2aCB@BNy=PM+R6qZ#(~&3G#h`Z z1A-aVEuB`f=?=Sh=Yq@qg>5$A4RgT$B*n%E!vzQYYfIqk2%}cIN*n9aF|sXDMSr3A zx$`3IE}v1beT`1e?pxtNUzl+G9XfDfE-@|i;;5OFOZ-ofHyC%O#$0``%3kRBym42hLTDu~XG#QJr;~WR zx4Q8^l{kbKuJ;Yh9_)#l(hWqhxxD%IGM~io%i7c4Dt??oknvqs%PWKQ&ruD1qICXe z21wcbdyF40v0wh4JhbR#N{M>~2^=2zBRW1RD~SBKVL|;~%?)(EFA2-R=UMTS$AuVS z{euz; zN*M$CuYUAD3}@1IJ)m~6I+$9IUrzAc(`sE&DRoFbK4^uW@<17euIW{Vr#TCsDQOTf zODS3^j%XO=K88#PF-98H4V?Btqg1o)}%aUX=?vZO=$Q!sZBn{yyrRI`0YG>u9Iu43igMUu=aptKToF;oj~7XA2v45h?5Z`5x>g+`ow4PxxRjQ=+NZ zFXVpG)_OyUlPd|7<#QxaptNW4iRE3_c-zJMbQBXh%Gb@^o}&fBJBUG}o>@h={xka#=^%CW*1L8PssoB({cH|@}_ z=yF=le0h~l1-4{y3~jP<%)sYr;#$i4aCb*FmS~!Rl<{*z14oy)(<9d^y6`a3UFBXb zSfDSQk>H0dH1!};Xxaj1%28PVm-IZ{hxR5VA-Z)G`13BPWU+JActh@S+Q)WrAL$N= z&Aw(Lqp)6C*=!S9Y8-|Ki+nD9Az`Lh#U^lHBY@~NRJ`8uvv-eVCuWXc)jI3vr6`2y zN(8o6&3bHxS}U&FK;|mh2lWC(6hEktjR;b8YhA+djkZcdQSn^K&%CR$-5|Z@a__ ziw1wmHC8m3b@j`}8(yFC2z`;ThD1>Oj8%Va<=RL0tsR3*dAXUHzb2fMV(GsiR=m42 zw6c+Rw}T@cd*@lZCeS4wuh&YT-FJB97N;D|`us^xK#PrRYXj@#;BM(LSv-C}h_XsitL2OzI1}kaXoe+A})kY{zq) z3X3Lm+R`^&Kphn;@lCMty~9qLJ}6eN0r+Mf$SSKO#zWfKO|g#9UYdbXsWnjuX+T)3 z3VR2hy5K#@H#?#d9x2xL$GX&lXy;wpOO01%hW(CvrF!|wPZO7f-n1hp##6MXju1?U z_TyCb*-;D7f9_%PLnystQ^N9d++Kg%91L5*v45uA-5=kZ=XRYdRa1Z7(kfhCmPC_Y z&yfA%Q`w3JKGS_vi4xpVlv?(CuEgbIZ0%ypKgXFnlJ*%LlW)2Y5Wb&C3OHW|!_L+E z|HRT>$_-nfb7+#e!oOA5XmG_TXpw1@T?M(PnBP<**ZV?;jROUq z*9AwKYHaNE@tJT5Pg=)6VE;PHT1mX)@s3WYe8p6ZTK64s3??=j<@OH2>$Y=kRR_N2%{@85*TI03Xl`H#<98d> z6rQoX8D3kPfMrtupq2L0YHE7r3tVa8rsTF6WG_CkP*HSZw3w)^(XJkTfA46@h(CO2 zKB1#z4IfPXcAXNe`{ud|wQ>#4Zd*TKeW7#1!Fuo}NPtkeBNM()%WXSrOR<&B*vCF8 z=ibE{4VDfr!l;mhUs%lXtH5)SJx@Y4D0DM$>`*eS^Lll@R{_|3;YH9*^9!!*CU_Lt zOCPaSV>S6%!eXup2)H*XHuu!^O(AJtMCARDqJmqzDLH0D6w1A#vj;6(ea+rklj0T5 zRy|k1O(hXJ^LDxVOZoBbV078ad?l~WfQN$iv%2unB;*9_6=1yAJJ3EqyvXXfHqw|- zY(762q}XY~h^Lo0x?42V?%cccoLj!X6yF;_qKk=ud)vT*!vyr6w&T)hJ=^@n^G)(n z-~<89+GEe3J}2W&nWuU9GgX_U{|+GA8j5uG$k1}d|k4|tFFv_hs+Gyn$@TP z&$2qMs1L7Gj<^qnKf~;4JFK%!NSeu-wqNAgFl?|q#_$0RYBtz^@W+B!fG__R%|v$x zta8WV+ZMWozW3$Cac(D`j-%fds_rd*Uc&O0N78xEP)y0HJ)3(cumRr^17E)oDX)&U za&0<&pI~Uzn&x@3?s>>GvG8pQl{i9Z@^a}XAHMBR)*Ti^7bW9+pc%u}MGnnwbk_YC zMCt0W7jE#uzw6{5HSldo05i^4kL5P=9isGUQ9l{ntfw{d&x}fDZJ(EhWyW+lvG;K^2y{#S0xY8+WT@m$3!J{y(qXo8LU(bhkHVpa7$Be5P5$YFS#Pd++Y zi^)OXKI&AD$$L-S&aP9qD4n55zDB6y&y4TTa-Zq9$4x%RkVI9;#I;q2&hJ>hI-=e% zjYb^1j*pypzs!0kx;FJNU)Whri2g+oO=0#ut@9MeL2~({W5MC);Bjm&l=Mz457U@B zY?_8IfOfWw?!vqtzU_tF;Gg*_yHfTXl^`B#M+uwU9D4UDL4B1{K;}GNNdJfV&MR^$ ziq8EeVQ)1zz||s~@0av9b~Oay(m$1y(4&P7WlL!XoAp&srMTwA2aj(~2^L4F9nAHn zSz$nG$L6A9-uH*W!g++Ir#rmsX6;#BCc>T)VHfYz5Y%|9|Kw!^pHe@t-55LaO^}8>Gs`6Z-9@UaHh!e82Q6y$tbfHy*t|z*F86x^5I@1 zuAS-R&yPR-fXFf;bT{7hP%65x#@bDa38c1iP$*Vc8Xr0omO~yb{*w=DK`^Zm ztu-WgSG?kq-}!ho>;}=f{Q;^hC3I*8JO17r`B0S*yfJ^!X|v+?xUA0d`!-9-b?a62 zP>*|i%)r;;I0TGIq|)AB)UgS?)5V>Toe{oTsWsy*zFVxmdh7VSwP1R0T&y_E4Wp3n z6;iA9o#OxWblrhey>C1u*^xa<7n#|66d9N7nJuB4z4yvRk#&Xa$ z$V%Dkch0%KKYu#!eBRG9-{*a<=S~Qat@eH#dx$prkC(Omre|N0PmC)A;_FX3g;`>A z!k4~&C|d(o8UfqqY%mg>Q~z39*`H<|l{?RsyZK}NLR-K0@1Q)bTs^hLr%nId&A?T# zXrB0Nnca`pRc{yz>z-nrx=d~PZ!w%wyLL9QZcb~~MFUC0J5)*keGg5M;Wr2|T9P%i z7mMqIkm*cX%!}yoHs0XT4?!s^L(Em0OQ7c^ zZ8IUUSWTMm`kLs>4lOr5FE#cQE2Aolk<4FNnlSc0!m+V}o4uc?$n-cZr_GOZ#D;RT zEgnLb^{~>gD|4ce0S12*hK)lcx0;vJJFJ1gBIm~Du+Q}YAY%fYs#c<*W))Fe~)C+dq0-4ev{MMWH?LGkOJi3 z0mGnc5`HWWe`yGq+EyxLc^rojB;8z7kHxzAOM)$I&aAF&Y<7528JTHk7SOxBs>{X4%4!DD^Fn` z1+5z`daeEo+D?A%v*LTP_j=s}B+^n!bj6llKBdh?KW4FE2ZR&yt^<^S+gkAEBXPo z_m8lOmH7WM-wq!(ZKYCr@~`@URNUT#k*0I(?(O{Q^K?vh-O=@iyd zw?bzkhr-V+^F{4R8c=Q=tTY)(;JKrsx5KgDA{EKx5>nMB5aC7t#*cP^g9ExcL5(Sd z(l;-4JlLFlk-89qBx)!R?n7VBt$&jVDznNzzEzl&97+B^UO;C~6ze;Dkc6L(;L6-hO(JYV09Jcd<|0h$8oQ1RHjr zv6)u_U;H3dcJu8vucFqQxRfg=O5DbJpmZUY9N4#23kwv326mqqIeHFP#Ohp*K3DX; z;Tm)u3aG#x*fO(!*yoePXR|vGdE$3JeE9?~NYFsbd13!TGL-TN}+d#J=bT_XukH-VQR8SaMJ z7hGJFZvMJgTw_@7S|+pi!|sPyz@e!8{-~Z$;k5SULboKSvHL;*C-qWK#!H?4`p^(^ zrW~(srEC*I+Lq0I=jVTIaBOzZD}kCa(y?r{>WD?{P5Rnz47obz`r8Wg!5q-FKLDkU zWR9=FPt}4yzeA-aeq(k9btlt%vL27&ohw#R|4FKA(aB%(0OyMPXGEfC={_cg`Iocy&GaPBB4>hrlJZS| z`FZn~kQ^Fji04m`-VymRfDcLYf2_QlIN8g54ml$?clkAG2A)%;II&?ua$Qp8x_6@I3qdx^E= z%k{5N))%ZaZNxlx6LBp8a352+c(Z#G{Ea@w{)eO&#YWzfS+xNqoucKztOT7uR+WOv zB96mo2Y7Fdq)k=QX}i^0aHX^Ug{ZAIyd67-teI62gT=d~K*h6b>jZ(B8v;nMJ3Nr&=`}Iu9lc)S7|wK@gd7VOa7-W>aCp@-ztf;i<0cNAB0ZY@zpgn z2zSyv#NkRw(Jgmyc>ulw z1McNZa3i<#ikgF)WcS=$@lGSguPU9IM-||ai(yr-=X-`g^6jtB+NLz)1I#vg_Rcu8 zkz9xG5*zO-e{3;Z9ZHF|x>OzwXswouK zqV`bTfouIK&db^RG66wJtH3?@tf!I2oPICa|K~NZoJr~x-x}QBER~aXWLn)j;Lt-} z*?N26)M29mJSzuj6@vs~V<78RIQ@BK>>RQwyz!@hD#%Fl==TkAL1IYmc)r}z^Okg0K9F?hz71$!I985AM)nUsM_k2SdPRp~>n)hP43_6FGgZrPeo0;FD>nO^cv0`BL3G$J0z~6D9 zhJM2U$3@lkg;MkZd7&lIZjbHUg>O^QD1TU*`g$hFrJJ^nPej^rI^!eD>{C3k!z5e~gU-~x zeTIH!ivz85vor4D)K}JOvW{vJdYUfSSc(BZVQ=N3n`P~1-QLRNcc{`r0{@>r%Jm`h z{{N9u?LaI#Lt(atnq{EAfN!eERG-{(!eCfs!)otY+JBNN&qINMyyQ!~a|A&WQ0T7A zyiti-plCqolq;9zDON+SKDoSCMzu`c98#rK=jO3nDy#jlx1A-@Qf<`!KcvMzV5Mc25| zr|sDfvM0p;B(rDH*T(AatZ=tFUU(&{)YfPg5$z^GNo9Nh!``iXziR2L1Nke;Bbw49 zv5?Tk^D?1kU0q_vQ<_5Z)k*KC?JbG9StZp|oV{?BzF-=a_iO$7GZYg|^jl{VlMz$j zY!q6GpZ7h!2vNYD&AVhnmz}$t$SC2!%LIakeW2}+1RX+lt;?T!)gEJY!gQyxGWoRlAPBgj>`#BZO=bq3D-&6TG=`0c|h{@&U77p`th=h zP3$AJU`f}gcJcoh!3+l_6KL5@P@_@3GxTUetgb*~&!C^Bp(MXNjh#Og8%~OHdeiFg zrcC%W%B=} zVd5RbQNA#8mq=;pMz_XajGt}a&2uWW5SsC0tqHQJ-uBbm!8XFv->27pg&AD@Y`Rrf zjActPfI zr`zwdL{H-q&su(-xnr?S1luhYo`hE|smB<@={DHRv)T0jBvCsP1twics=nd*%!iDu zA5#DLFxI&417%bAjc)H%|A_%!D2&9Vp9XbZ7&NONz{j5iniKn+?b%9AA&@<5f%%zk zX^jfW(B|a$KLmdwTx0+F>qUoXd}I@~k6b0P^-^1WdBWSpXS!y30YdW>T<#OqZ z9+7}8%u|%Jv`NS(b9$v|5w}jkQ1u2g^Y=G6-g~QmBS(Bv-LPox(+zxU*d@PU-$q`-@dx$7VM+*~O2-l&{p-YYv)ofH`$&lG(0#ghb;;9oc-4Rf z$0-+7!PY!5L_42$~rrI`ttOP~PppAFlQ&sIFs;Z&~m8+4|_tlm1;KePAKAyjUbH z@P-eh^|QlSYiax8EuJ0kI7LC;xxh`!31X8r97BP~p6kKyo`*qLfQ6o~Bs1bz&aSY^ z3_R&B_e#1O!6~w4N4n{Nf!M4gbx!QtOgCcY0jFYJKoAZmg9O}T%od_=RgiSkpTsL40? zSoUmve+EaYn1o_2X8eC+n4gEDNR2?UXkh9lRj(lu-vg->LNS=(AlHfM3i+ehGIK9?cl;Qi+d1hBP98J9J47 zPKI&R`^AYqcZL=jkW*kL}(i2?2jA9Do2j;`{gT7-SGU*(x zJ@=hxtVvS%0rAbd#j~%rZ?#tu`%qwS_?vEbTw2~-=kZDV*f(CqJ^xjJ@9Uc!TdRn@ zOfJ7?@33K(+MMh_Blh?9z)>vnQw@vkRkQOus;~DhE!!J}uuN-0E&zJtZ79yBAXPzu zRZDu803Xt|^0f1HVidJsQ}4xjAU*u+S9yoViyo2;KZ`qEFB-rL(|V0H6{dPFku&I# z{2t+rMBKCurhY;G?g)>uW)Lg#Cs`<4Yl_Rv4Bo2%i%??PdoT=CvqdeC9@Dq>%v|Jx ziIsgr5r}mhi6C$`20v$uS!;0w@-6vQ@)~;d2seEglp)-S4j&}2Ff))xT*Jj5lerS zjQ$SMK8d>cB1$!lo=4Zz^8tBr&vpj5Hwgo~cp>6X;@Tg%mZnTceLeT!1s?j<7S~aG zky|~5-e|#`f(@qMO1ZuSKfJ)&|g3)$EUV zw=`{(ZIsDQPEikk=1MMM^HnhUGKca7of>vbQ%e=!U^NC*)-I+;NAXeicZ}q{(!OtH zKtzUTjH{YoI$5lojuh^!{)s=4y0?V*bD(_%`{E*Bws){)EkOenmk$7W&$sMS*3qcN zE+aPng~|8of0n`8M`}zmTw7^!E#N`ZjJQ$#T6^%VUD;&mIdtnEL0}d8-&h8T>^AOCOQtzasUElwM@p-|`wrQ{hjg<-=Gs z|BQ2B)3P}zHA|Pevs^_$5>>5r`565%QpSGDcVE5?t+kfsP4T9Y!N4`_F;`^{Mr~zA zFsoFBwRQ;{UdFx6a`(?8tQm#SlgJqGT5&}K!-#;qhMIL|{cK-!?pOEv04cc^e4luKwb+R)gKti&e1oiAQE$i(8KeKwU1L=X*Et z6drW(Jg(X|vY2tb*SF`C-U1_WLjP!hB#GakusF(aH0Lfo^hgd)oKLAR^Y}fz;%=ui z_<8E=EsL_PWrr36_IpfT=+E>Z>1~+RPuDiUVDqHMrOHjpQQJkR2Ouw0f&_QN&-X|4 z?LFlC0l#Wc*wrSzlbh{c2gp2w&0$$3*)>m#F{D;= z$V~=pz8a}At+!p+JHkqmSGeB)R{M!&J(Vnfe-!{;LmX|BwEC$9Bx+&fz+#4ZA%E{K zN2f2ZV;HzU?9@EitkFFrUdCE~)nTY9Zw4bkT*Dm>oAKUEOm%PZ8~~5%Kw=>}%}DE4 zsm--9KtaVwBC;92^*>bd2<*n3p3lSv-zypTDdvG18{OI;n9JLm%u=1vEGTT%1ie&ACXyra#p8R#C*bP`^_otNGH2lvguMt0e zd5>48^0Ia%t@gcZ_{zm<_I7*RgQv$fTl80$tiJGedP zL3Ok4x*Xf|LyBPFl%~_(g{4u zP}25c6JI5YW=ANNg?@KEn&o={srBZSNZZ%d+~k@TQw0GEZ(OiZ4!*2sr%lfonUrCr z9eBb+1wQM~8#$K(FGyTOGgIS&IaS6~z5_=evq{qKs=L0&DOveE7d!vrnSIA5p(DaL z5?=ED^C6x@z1G%7_D$%f2SfI|@r#^!1RvSoL_?!W*Y>&Rn|`nm!mk$>v(nWQt;eK6 zpM@SUWb_~|oz>JZ-F1J_gk^M!sYd}@ zn~hIHUyyR=&{ODytL5#S8@FraF!gu z?tQJW+&#JHrM2}r8SCU?VoUQp#;v{T7z}%UfxU0!s;;e!eUR^smodhgFN~hYyQ2FU zM&p`hdJbaX-a4qXmtK;NZiu6$r!O|g$M+`2wEEjXog-dwDXBQvijsBkZea=TAc8NR z47#EhAm0 z4gQmS)oKx-TK-pszb&h-r*|SIqf+Y9AgziJ8|8;VokirQ!`O^O)(%O@%C}D{M6{vau3ZF^jNxAY9mN$1+CpoXk5loA2@59Rk zp-2Yi--`1V&Jn8i@wI~}p;(eP#>gRPCTlD?LS>8iP6Gp zHjQ6Gbq9D`99*j$*<5dk3%(j{Wh<`r!ubV&5?a8L?yEU3&%oH7l5rWDUG8sa`ttQs zUl18q)VOhpZhk-jF20NWsBqKJm3})~+ed9}qx}ljkkWW=irh5(b14WuwXmG9{OyBy zF9BRe3*sk{F(T*h#BEbC(w#7;wqet?KYvAi_9+4%E%dTuCty%%Gc-T*@yZ64uEOg` zc-;NQpPYGU#^wG#J~5VHbZgWn!3)3&)ZbjqD;^{*Zn7jMzZ&Sb7!O$;A~dME&L+5; z33p7?dR@D{Y5o3H7O}U-naeN0&7ry<|2&$~PO(O%92D99nbKz6GTI8xTWaNF(wYVe zYXD75M)7~Ud=h$q*^wJWw$n1oG#fDAKe!>_A_VqFC(|5+&!<_V3^(D+u=zhCd+HJ| z1%PrsAmxbC@%jYdJX<0i9(X=vyT$E;FQG7b^)yj%Id>Z%+YmJ;RK8xs(gYTC5;Lk0 zI{KcFR&)c?6&F7WB6dMka4wv|SP71lwl!Zt6SDtnNL=hbf5G`RF7xfdTB+9^oM7(SYZ8F5Gw()n^isg9Uk>KT`Zk??dH z`3F1c$Z*O%y2xeTO*%%X)(ueM${(0mk8?Y(eSwgGbb-I!L9vz4R|V>u?sVP;7KYmC>un&g*>zbB zkihy2lejeVf7%sIGP<)ys~A4DlnH`lWPS<&!v03T`B&}oxcjR00Ub@DmY4P*|3}0; z-S#!i+~IQIt?l`PnF?^%Vo}L44>g_kbqT?$QYaY4q2QEiy<|G21 zmPi`+^rX-Ol=J!v%Bv?b+xLoDMo?LbXVI>d0s@c)n|@mn*mEOcm)8JU(=}iFj(bR1 z!a)K}j_?0GApd+3*fpxw$W0klSK~VLd@_D1mNfXO05p0lZzl}VgMVPxp{`QFxS&JG z$~|F)o!A2WL`eOf;H;`+@mI-|-)n!jh%LO*=Qt2FxvPKz{MQx8Hl;hq43#tO3w*|J$^LRn1_sDksHPQZq z3DKpW$l(W&A7%(Bd{}9=aM*a#wCF-R?ED@k%E9Lq1g?}6@LTH@$p(Yd)xiFl#1tcu zgH|X$fWd%E5~MUHZmx}xRX8K>{nma*14^SwxetxsF78=dQ*_C6h^CCfDtJEB;z)F41Sjz00@f7#=@(wu(0y>(a?tks-X1L&SE zpme*QXlH?9U7GDYbtxQK0@Q;9cId1Rb+ia#@eS-?A-ofD^7#RXGDOT6pt~?5pCy$7 zY})*r$S|_SsKHBrZK3n1{zeV(hKMaL-*yg~h3;uQMYG&OU=nCIEeH;rRFYl4I-#Wp0gdWLp|q8CR3yBGi7E8w*4EDB=t|LASs3!ai|yoHexq8 z9=4qC7L~9pa!{KHT0-gG_{dBfpsO&CeEHIL@a`Txy2+BA^$NdF0Z1Nnkr@t-hY~

L@@D9+sXJ5)6ly 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

Y~=q@Ev z-PvL+4p`_u&%Od47kr9+8J~sWz~QqL`2>(bF^pDU8D^HUoU!rmeNrqZe(nd-dhkaY z{T3a%?l|FS2hGd^yqm3NXC5lpPw}exmGEG787Ss~-q0uPTnnBo45-^ae-;ZO#*8@X z=Xmb##s*r=K6>l6BS}z~M^WY8B3U^d4&7|$KTHH9DY`dfxLu}2yu74AF~8<27^no` zmwi9Dh&_PQ4=8X3v`Ft+!Vh1wAn6jxiGpxb{cj9Eo7$ImX_=)Acm>JP{ukFJE5a`Z zBAt-2jM;hT>AyWX-JBZmrpe~1B1#@-R*om90^6VnfIF@D8cuaH6O6AUqaM0eet z9hgW?#(9G_A;R=YeKV5?to_KCv`(IBIO_^HWu&!zqb{})gwS>(#~ zQRS@Hk8%>U(g2k@xp1hY;NTacOF(@xfxBX22Xqr5yFM22Ck9DSmy!y#3G?f!uxwc- zE#$m6miE~TRAYeGuiSET>BhXw;4WZqnU-9I*|SUfYR^m+bu@e`{{SjhhQ40MtPxa; z=?)z9NW^7*LT}C#M7hR4yW`{QkI#V3Wb(&g;96U=DOj)t9;BaqC&J*-yB)- z{u>G}#6#rFZ3qy8IrF&ZBPL|du8A)IMD#Bc#!9)|Wxjma!$xHsF>@JeL^xEe>1eI> z*)1Q~hOq?e`pP{oA7=f11D^yJS*S(tACHb(!#l;%TZd{WkrJXZ=Y>1U3#-Xyzibny zfQT^w&<9p$l0$)cit&&pvu;OZp*fkPD8>K+RwsHXGOO8p}=-CNs5K=np}9m<_o3 zvds(dMYRcE1IAKU4@RXB5S($lCcoeXZV~~;?h;%8O-dLC=JhxzJ z;(=o%8n_o4;7u-h!Sf~mzJQ@RczUpr*qUIcXE`XB37!v1#EI*Y0je_&s{4XKA!CGJ?26_Co4NKF;xg_ZQ#vJ( zUPp8T@3x|YcUf?n2LSWNh9H@U$c7~VE%4%e4P$ey9ih!-F zcel`subI2oqWxGl#p(p&*8Y=EvOWKb0^$pEOaara`cy#-iUaerZ5bglBjed

})APn(C4hh8F+^{S7nQa43=qA@ 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 z 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 diff --git a/assets/gardens/gardens/garden_18_open.png b/assets/gardens/gardens/garden_18_open.png deleted file mode 100644 index 85355655286e9a7a890d447dabfb4329397da1a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41680 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 z zd1~O12FQ}m^od!_LY_;#<0b7y@gejI`33j4Xrd;493r-4tXScc!Es<~VN#Y$)IZu4 zEf20>dqO#N*V6|5D%SzG+(0WmWUnR*sV1ca!e@Jiol5&E*`7EflGaW&&l7xh(#WT} z;i~xndmoK$FZ?Wm#WPUP$=gr3vSk*B9`t&+tVr(Vg;n}Ng7VYXYv+}Hy|MSC1F1B8)XD~#6F8rCSW?x#3dGq$ zSM^d^Q1MXFGAM$Kk}aAWe3i@l4)fEF@X#id3?Kp?WgTkPNqOgS)$^_VMzXuBqL5Nz zI@J0r)u~pKS4^C97#nw-oY==y7RWcDmLzGGiNp-38ZHAC25z3zo%bQL>&!T7`S=?Q zj8#v}WNomvvb{^-6h1)T@REBzO)>~OjjNm^-PGNSduBa-x-l${;e7#gce}0MwIzJH zQkfxeZRscyUjRp_DA$4gm)_3K?XH!J-A|)11u+~5rR(MIdx+~0N_ay8h6MZtw~T03 z{HONNLdIr`wT?((6@6T*1?OSsoy;#?e9)JoRlRC$T@pIH$ZMU%NnFq&OyyH4jN>n6 zsTRI!V=0MPIaSCdY=GhlP?DW46||6x`4(ftUt$apaWsaH#fN zI=&awX{;rIJoa5aT{K2LV8`Le&J~d`YyINUpoQt@hc7vn&f}^xsB8jzWB)vi{q;kY zlRQlqyH?-p2*cCN@8iTzJw(5B+EHZ7P3pq@U_kZ1BUxDsaoM?eVZs{^6I_-JA>^9d ze=DeNbZg125^*t@9WhNiqi_SIaA8mm-;|6LQo5ppkvz!#{wPTLY5*s_pd< zT(-Rsd3$T?kB_js6lyT}CI(F`$$)_`(bidA+^V2s$yz<#Trv6{eWIL#YSf1-5<@;s z<9AQ~F|P9ISc=u(1G$r&GbDb@znYcMqQ2`%8%Ak~Uo|q>3%2X^TGNw)B+`gDoh21{ zl>Be_U2etM)1MO(a@4cPOvX}_;SAQmUSgb?29EuJaLJy|q2GLTD;temei(t#{t<5b zmO!{oDSDoBgR{?HEO8^3BlZ3M18nLKxc=gn#tO5iSqP)=S$2JhXa?=nkUDG z@vzLfX1UH?d$0FFlLO(-+W!6GE1Z6jhxRX(Bk%Gs%YiB1>W055`+;jb;L>d*ccYI6 zWaVnk#uPmopYgqz5?s~a#`+2`>XIiG)YGKx=6KGMgP&x%x&09_Q>rPBk69K%T36

m#hjdfX!rz*GEZH&UcM-_44konbUt;I&MwQC z?~_F8=8(DOYWkQ00#lj{P8(WqG}iIN?$q5yvLE;|Cl)DCF^w1bMp z$hD#=Z}{7sZq*5~3(VEud zbIO*vvZ_~k0zDtt_jm8MkffSx;3meVK5P5^AtH&@(u*X|w}-}Q=D6tQ zCBW`iy5scCUzez#c5`n4s32$r0xNyQ*~25B+Oo>i4;Im4o*0I{JDd6FX zoaf+?@s>A608)nzIg76<7YMUkYc?T=rrbTq`^K5R9u(&gC~%wyvmJNVdN$r z--j14Y_7RRg?@2-D0b>0_V14t^x`C_uvQN34lDUg(>Npu?NOPjnj zlPmOi%^qJNwJFy>XEuYv4gwWE1HE&`lr7_=)5) zpgQ0@7AKkLctsYe5-Mi?*gFE_upiLM zq`pK|(FvR`0?S&;nWTwRL683QuBu=~ppY^sRu0CvJ9wcED;RWPMz(fLykpc?r73UR>ju861DhDtgVbBur|BxZ zKus)&s&b$y4 zL5(hNcWYad9|phB#43vF*-*^Ptl^gloh-X1#eQKSWw+#*>jSv5$VwgK>x^Gx}$+eRur_NQTs0I|{=l-UNY3$C((5@m$UTJ$xJWqF)=8@9*mK?8_bR(DS$FMR3g~ zTv|{;Ng+UfJi`D{b_ zqn(^!ee8g3H$IAh72oyw_KO?-tp#qh-b&pC7(GOIRtQcOR1~sQZ0y7S2ngAeM(SDL zLn;q&HCo3r3xQHqQVu+Q%8^Of^g$3GA3j#01LW8D>kMM#hG9J3>6+Ng_?C0{#Z=nH z=LtPSseN;#WV0dSdMHf>#x)Ngr^}bsOW&JUn^VAImtI5{reud?hn$ZiB*yX$j~vN< zrl|d!OE=Rrta{Hzwp_LAm&D`8OZ`wNS0`&7>aE6AJDyxZG?~*I!IX!i!I!1LMyNWy zdv_={Il8EaGC!&oe-Ck8zlUdRzHo9>S*6fl?u5--w}7Kf;wRJ7c!2y_WkbP1+zt}M7zGPf+wkWSPxvp_hS~_$#lxz zles3vecbEf|XiiHimuUy?ID__ZK%kG~7!jIdBAW>gkpYrPz4XJ*p)Op~~_ z$`_9-ZMjEYM7SqBkD(*XS|5o;mSaotj%epk?5R=`G2n=jDrIjpDwO-{{h5bC8%*{y z>C`{89Fdwn0!>#ci&O|oPPc>2JCib&Gs0Dcd`YWAbOLYTXQa)O<+Sq}h0*xX&QkXR4n{3B#$8vT9xpi{vOAd z-4qnvmxFm?oMAfoq6=G2_1`XNFBfH(ua;@Y1qCR6kV`9dlueQ zcBV?Et%RwqxQur#A9<9L+O#V3XMvA2Ku=PgoWq$rXZ^bA`Sk-{Flpa9EAI73$W&WR zwi07dzKsSpJs7_fu^A69JVF6|+>|KpqM1;rx z#8A$m3uD&L{)NI)eSHh2*i2*gDxIN#thD+n0lu87@b6UT^g=sb^eG;!rd@6#puYNIFMi8GVNS#uxADYN+h9xT)162R`ZWwhC}w+?n$B>Z>;J+Vg@GUT z<>FTmx=Y;xh5p*L{;WM}%=};@^G7Q&_yQNzVQ{0~kn@8|%qaxZ4`>&`X))Tl$UWXj z7h46GLS>5;eraLDM9_gK(@GR5|GSa2@ zwBg6m>m#@4ZA0e>=9>?xDu?Cs+CH;LnoS74R3C@ifC8Ujlj-A$?`w_Z_y^_6 zv>en=ju0kg0J}}0bn25J(fsrS6iKs#$~2Q2L)nxPn#+%5TG3f@eF|~RHo1e; zL)SoB8fb08^7Js@CnnIyR@HLUe59$V*QW0RGx#2UOAKe0zmw#;k=6cy=qR(INeHDL zM=UZ>^$Cam3m*C@C8n9!k5L=@P6fBAmuMa?9p<3#l;F!g+f=rdzmsu##dvAP?i1Zp zKPWH`D120PWFQ(eU(-?lQ09`G2Rna#Bdk5Zqwwwz0)jUoItH+#+r7>&cTOUdsst2; zVLmTp@Tk)jhm0)TZwNaQfDZb1i#pFQ?hl9(lr1OdXK7mYgjVmhHCRhE-L~hgmI{r# zMPTzBDsTVptO0Se>(Np%F;^GsL%$NB{t^(E26`W#{?@B9VsV> zHzX(OEXyToTO^Y_Me6W={}?W-{1TK*!@p7}vsRy{M&gT@!DI0(bw+}{wxBb`Q-;`r zX(CtuFwF$NryQ{S0Dn4MY#Kf$;PyXz{nLnNe*>Xn1`tUnxwvFU|EQJ4!!vd4%Jx_h> zgG|gVvNkC~m5j3X{qpTcLxkbm9&I1TEaw8hJCEm6Qq*6~5gf;SvWN2yc@xuNuyZ)J zrlLpmWY1<F_ujEJz3sMVFzU*rF+zsckQ8{NHNtn@zH0l_ zj_-eMyX+D7vrK*=LG(+AOlG~_w`8i;1(oLW_i&Z|l(x|z z7a@JBk!L?Qhx+41)b{wh@qo?uEEAch@r%a`o-^%M`3R|=w%RYU*Cfbl(66fVVJ6qu$45m67fpZSEot5atGHNMQ1;Aa3)`ma5lA?3VGAI?lgVdk zgz09^MOn#if0rsn;3ph`VT|O#mcm--ng! z`!YSlKUL63Hh8*9Q0TdDY|7@i%5Ke)EZx1&St1{hFPMtAP@0Uy?Q~CBcYj+%qmZfV zUTS_vJaw*920s4zo@ofp6p1dK@Q~8<`LpYOn9(Xsrbkkk;8t?h8Pz)UZYFjl_QzYB z%#wYklyE9q0?mW`d4K!TH7wAHsR-hlal>gdi=7RqM6sd_C?w>SZM zP)kt4=n)eUEVp!X4bD0Fq?VV~rm7XMoKf-;Y^d;JsFmzNq3}F^StZ`>URoXp`Wbtr zs4!#@TYCXA?yrc1PdmCCzR7G{cbJ1M93rywx=#Dfh26tlIsnd53}KpKYow0u;^4H^ z{#Lu^9dgtgE-3`R-qA63s{^*y9yGEgWnl(em&5MH5-5D~ckI`|X(uLUC=PiRSWE~J zra@2RBrDzS2R&8$A_ZMCjz5``)^JNnVFyQkt$AHoTG&!Oeggbgx*UoW`+2cLK zT<)z^@(RyazQqHYc%wn)%=lR5_&bvs7?DV8CZ{1QzGB5jQPEq?Q_n`yl|63}64^i3 z!~YXiUN;T#hVm!P-aBD}*X!jif>3LO28{3hl^YG_#`O+aS)Fwk<`G>44cDQcKoe^& z3^}e7Zu&*2UUoy19NO0EheZ?OMfUd#g}NSUf$XSE|&wMr7^u8ZuHp=;}hdDOMA?6d({vE zVqq^iJo|6YXl0BZ?D-2kAj8)ETpCgmMBHwsd8_5#khG(pzJR7R`6-A58w1UB>d+I; zVSan>;9&t_Vu7y<5vJw?v3(w9v%Gc&mP-@VYPE#rf~U^)H646|^#gUXNvMJ=T{1IQ zdawa-p&l?yQ;>(v%|hVmliexh*+J7&<%pk440HQ^vbWWR27`Uyv$?ip&_7ZM%U?D% zJE9{Np-KCZC>ixAP}Gv*$eEDGnj4BpS*bkf8X0%rFZ(80p48ZyWjw4r-d6D0&_3d8 zI_X8@g@7M!V@86bkAOiwI4^@iS5{oiwe;XYwY&liOX9c{ z9{ne*S>LM;)c9%MI_AU9^z@|ue9b$V_8LS^Gb%nW61J;AIBjOT*%#76e2wC5V7Sc{ z*kf1rLQCQ{-$uxxT3R5cmj-cq~Y2?-Pnotn;9uJG*DY1+pR^e^vJo z7!As#XW+q5;(Ro6lIkfUI47#myawre+t1O*?_mq>)`AWjZ_`b4gg8@Pf9fH3SRP6A z6eU3kHHvsz#*6tdPHG{T@n`f7O=f@({O0nQA)i0>jMEGVphlgm2(1-&Qn+rlE#uTR zi=ZJo2e`{7 zaOtN4EZ#X7Z$GK_57b@j>;!3#&{6tUQ&;0(!c5G2R-ijXk2&$|Y^B+=V6|9Q%6Ie? zVy@?G=LvfBm@jbQR0H1J$Sclxp47MByyI|;$beRvA>K}`O)xZro ziHID6yyOIx*=SZJZJMK$6nhNe$PgKU!AvB+e_eO}FuC_xoC5(RKCth%-FE(F1$4eo z5{?;qGP!i9f^H8?(N;~^CXzBDs6S3qxQ3Z3jN-nXgP`IXK1WI!XgQx0++$CI3Z3W~tf`qTTfvM+ zDfG23?_S|0eEz(1ETkbO9itiA%JXvMAQ)kzC%68YIB4=i_KgcRPw00AFqd&!M&9?K zOC>8A?q{Y-wBdS9sCpe3hxH70SNym?+V8E2qKV?_3%yM8Ih+c#X)WMVx2MC}9E zmpBUav&Mx#rA=jC-G${5wRci)((D-q0+%X*Q>lk=p&t^JMKKk*TNnNKdiJsS;{hn6 zHlb9By}kmz?l??Y&+=d3c?ZHO}wclUCwK<)y5Ct&sm zggr+aPjX4GnLDV-Tp?&sEc}+aypXWXiJwb*zcbZRbGE}7bxopsn6Sc4bnr5%Yr-@~T zR8g;V8+iP-qkdehF|}wf8Zx{b>qdunY}r71q|M+DjnQ*l&x*KC(z!cZ^>>7Z&z!?e zPsj2?(mbhY`58ohoLRR)A>ZC^X7+p54|qTIyGJr*#p^f9sE$B>JUvYugbvKL zP^$OV;ZCMM;*sRYWq&cwbGjbsKciFU)bq|=q3Q~6eIIBn%#J1}Q#plR%^}$^2M?U9 zL6-n}f&sU>CGMN2d7N9LdZ#bSx&95LzJM_6k?OtHiq;`a`0J-!#$dLb4D|+CzNO4- zK@#CdH7D`2qKm@xn)Z!dPp!x|=W&QSDArY=uAju;y@QVnDX_?^kdBX?KvikQ(30fB zp(1!}*MRN8E^o%;2yYop?5AtqhDGk~9YxU3<|hcvobzJW$X0)P$XOd-DIg<5&nxp> zNW)*n)ET+hR~(c_e|=&WxBzDS%wRiy;8gC%pCNgLxpkg?04i7tdzyjfa@(_s zm_Z6Prw2sIWs6;VBd2Sv*Wzp+JX*{ltU)6QwB1qhz9IUqpPSXvndNlZpGz|LaFLX| zU&6ryb+Q^V@A@Hq`|@nHjgv?3AFin+=IL&?e#G|rQt9F?>o|{2>c3V#l|2u&5TUKR z+$ow(()?tR-$WA^2vNEMDd?o(x#oH2x09AH$yuAFi|T13`3T0*>AsF~`dsC7@7wag zo3VFY-(2s_l6qvnNuxiydWRpEt5Cl%>;b$#Z@Up1Z{AeK7&*UqOPPPFd3p`s=|ImP zN(pn>(=LlUzm2pkJ}8Ra)$(u*JFq;73t_gcCll|3PnS=@3$oa=t%5|qg-pGl=T+c^ z2XhSL>gtP7I=`H3bcezv--We)dQ?g2f{AcK`_c`6-X7qW1aK3OP9SEt2r9m{&naAs z5nvN2{gD0j%~_kme)i}6Iux#WHQMg|^w;flJ*+zF&tz96SaBEmyE$i0GjZI#j0Z79 z(rSwoJzZUQD4SUw=Q+uD@;cKG5%?(eQ3U>ElXQ{O1)}Z7Ca9XFbZIv^?B0FW6hUw_ zgWnW>#it8dtRu^tnaYA*o3@qDpfX5n2Pr(v~(qiD&+MUbAL1E$D70=xC`gNZ3;p5If~NknCZJ5 zwmE~jVG&&L<`aGmgs6Py+ps>P*mE@GB{gFbjY$PM)26d4W2j|OP@M!m+HdB)Okiq` zVm5XEJ~r6`d{7?uzRx5Jj`1-*m%(X3>Qi$b2V-^jDXM`o`=Df7gDbCyGrhpxc8UxG z0)E;8^EA%*H6^A*!(jVLS3?;6+cEPu`qQY+6&oUZ^@V8&`BCR-v8QJETU!>=k@F)9 zN1cB(w4l12BUnmFpQ%$EvBJcAW=mUeV2gxBoUp!9(6!wVf8XM%0VwcNQ>VRDyJls`o4u%eaVC)KJArD^neSWpf~c4trW_fJ=Q0v zQR-F{-eCuVhn@Iq-y_N^l@fDs`)sK^U;A$BKj{lefUQe@AQxc`yaZZVI(u}>vPIa> z{=S8MF^hr|OLsv~n(W{c=o|)$FS*iUsI~nv`n1k#5B;0(P9?NVl6a6HIxVkdb@2MX zBrFTdqPC6;loA7Pw9n`4w}CX0_>42cLAd5i<8U#B~FfI3%Ih4>Xw+G>El zj~aEVV+>&D=p9`1JCeOvT1R=vb%y!50(_PM(d6WBMMJjo=Y?}@!uyR6NN}GTUX*z_ zJlT2w@$C`xz0{L?-_sjt=eu7UmEkuFuFy&nbTKl8*1s+eyt~$Q-Cqf2L}OTsyD1K@ zM!otZC9_A76WIcMxKX3PFfX3!MzccBL|<2!VSR(o`ccVS%%WvX%E1yI$vjP5HQemn zPQEmP)v2C}l@*bA{jt$5a7XcW^2OKlE&r#bD-VQnYvaa@Ee1to4}-)gkzJC)M3(Ai z-}h??k?E3UEG=Ulp~cokbY;mp2s5Kdg-G^g#*(s*tY!PoJAHr6AMbhJbDs4)&pFTU z8BjvHU}zb`{dwwNGdy3(tD4h{iD-%$$h*9#pY0l1eMm^y%HAn`7PwIuB=Xf z^uBKdrp+nwK_&v#;jFBZE*bv0E{94(w7x#Vm|M#|&n`CohLf-ueh|1Gx>~MDRj@tD zTz)Zt;aQU!y|E#s^a{UI`)H83)l3Wc>?iMDmJ&Y9oN7bEYDnWJ41<%v#DnYQaJq8)K zbY@cdV&W}Vv%VL?RcDQ2nkc1*#ze7|j6!$SlQ#EfRI`ma|(rquHYoYQf`GL6%UF)+jdOkB3npixmG5+BB zP9oq!M!?6Q?j_SeIf4m8*$SUu|HVd*HO}ub<5PF%!9V#r&?NZ#K$(-Ln&BA|ly~}N zbjkzT@^)5LgA6w50bx!s2LB5suS#}cUCe&oIkf(T;E=E=X+C5rsUT6%hJSMoN;djV z&xjJt-GBZUse5TGRrginpl8@9qT&;U?YB>}21NeIVzk(e*Dc zW^;InPMv*MUGKO3eN8AB>dSvHQ>E3}tetKz20#4}ne5Kv^trrw0ET-tt;4+ix;PoK zP~n=m^!R(0+tTnOmB`@&-p2H!ISJwJG%o=t>+H*Se`1HwCHZNWmtM^MC0Czm1qIF}dS8&N_dl1brVS+@W4;**;8#o)gDt|2+F zavzNY{*w6Xjg&e9-!=seVZz(vA_piy3 zwh4Y|fl~BK3J~o+&o8h~>j0=~ROu<-oX|U^0H_(DMLWkKXLksCeNC*gnx5dd+UR1x z0kAtlVpJN*932m-=N-NX*;p^0g)b`ZzIA`0woph$DD=&da*##;>=K!r;OFpVGA10} zS`UGq2;V*n0+d840RA~Pbl-+$xV_wUJywwhNvDR|FkQ^Sb1c62@Au*!u$qB@h8GTx zky~v09t_`Ka}>5?71EQLBOG5mIy5ca^gJxQHAZ*=N%KtttnoClP?*Vyc{ zk8u*6ujf`u58F=4PmiCSZ{N1@k`FT{_W#+ApQWipngwf9Zx*bBo92SAhQ9M%B{RtYICXjWJiW*a z&!+h=bdr$dr>LRXH0WGWC7j^b)g`b#JTiqKB)dRnDJ<{wLK`<;#}A%loE`MmBMCw} zrOJHLo!-s03=dJf50GAIwVZinNS@oOj90$Fquwh!T5y`*j+8a1`}XVIjo2RdwxG0v zCRwOnLA4(ijw>F(I4)7aWjyElzXkNO?e-H4t2~(jjPze6+S2upF7F3$50=l4OwQL3 z1-~w+Kom#@a&!jqpL3N5D8t13@x3{d92rqg`PfV07Z4hQPcZ!w(3hCYeAdnqxeE)h#aC6_$)4+ zVG%VYLOVt|9%Gpa*TkCD+3giTPU>V%;6?AuA(%RKdIIt^ok6_5IBHH{NSb zqeqny_^o~0Le;}3yZ~c`H}i8WvgnywonLevAcy+&mQxQ^jrbu&(oVYYf)cH4cxoS| zzzF(PA%@c>o}_+6)W*i4kXN)&W>J*&YY^eA z+EUT}*r?u|8rp|OB+q-w0wV*xYR=p#!Le-I=B0ZBeE(U?8vAjqI6Z`6pDAgQvFUsP z@ZEmE!4e-|#6C~~CIh$KIb8I;4 zI|DC3r!&ZlL|NLN5O8L*%CEp+&igu8nZM$>jvj)Hiy54XU*nVm+ak-{is3DAmx zu3cM*)HxTMF7>1iic@SW-FgKk|3fFsY4+fbfi@*01)hubLLS zR5Yd;i-!zexcja{+g7w&%(b!vK-IS^v$Mlfy^kh55<&40sC|HGl-3dNvfd11u%s)t z19plm^cFeXS8^XAi~U<{`p)$mHV`VaE9OUB2YjU#xKp1R_m!iTSOF{EPjV+&KlZ${Vjev5Ts*NAVb3}OjurMo0~_4N&afo zhRWH>=7_5wNzE~(ka+vrozPL;l=1mv2f3&HhcW>-pGI`C@hx-MyPO4Cv|3OPN2=Q! zd8+ZDVg`OV7{Ab(_G zDaMSc@w}kQbZ8+j-DW;;MC*z_(wnWV48J?hajjpNd8%;MpCIk;~+D z6lhzSAn^2AmD!b|ouFFXFaQcd-&Me=&uQHAYAYzo4!{7#6X=qNo{qtzZ7rHUtsPOu*0^;*2ab?o;g8yBQJs+I$$v0XYO| z?ULXy{gW0MU82LOp(_Sef;{#0k_92pXJ~0j2_`Y>@cJZyj>8eE=^u@CGQb6+&%&-O zO^r01c>%0$-Slt-601SJBCn%o7crO*B8i$y``LlaX2D?BM-e!yX|?O~Y z5r2bvpi73_McW=X5j%>dfH{Rbhet%U8w@Fts?pziZ7JX4ovfeRFL&b{FrDyxVGzjRVzrQcH|EP|xmiiTe%yg%f zT-8jbs$J)n-ZjVuiifq5)#1we0a|?YG27|?^vB&aiW#Au#yx{=NjA74Mxml}RSQBC z^VV^VHdnxBpVv9CZ2h0)6N_dvQuep)6QI=-Q-&DRn_MvSM$v~ugdJG%&9AGMyMIq| zE&!TUjrJ#eC;x+`jXe_R;1xaQ9{?Zo+jwRr{06jP`IpUa9>H^5Bh)uQw&E8?8Gvii zKIc%a1+*~4>37_rggq%u)C(dXnp=99)7p~?gw7d}$jlMS!PA3j(V2@Gibeyu+_}rQ z(3mKY)l0J?u>~``K8$@imYZPrnZ`?ilSx3(0>_=rf8NiYDG2%YBT^?97*QWH>#~qu z4|OilK+)@&Ul0>gUA|P~U&@j+k$YYC>a7|;PFL@$u>-~67A~d7j+6YCG7}mqRpq~Yb99UNF0xC#*|OmUGQr)4LFkV zj7eScMCKK+^=mtCv(r%uKz&jEPu9Yhb`UBBRBfiFLCS z&pJo3V;^MzJtlk`@MzvNqH3463Y(%tc|kcy;Bn;6rF$aq9hpUugaF`{G+m-3u=aW~ z`(Kgv=A+=c+rZ~2os%kv$mp{q*|)d-jaL{H^1c-#Zp4)CTXoxEa8Iz&_dlSj80mFG-2 zF-}{;X%-zZ^0vL66>-h*%@;0VC)K4I%w*N?FLQnWs0c3f)^=KQ0`--qzx!>QOqR!s z4Q@LD`SsP}uxuLjgN;!cj%)2LTtk@&IX?oOWz}UH91(-kL%Htijp-Fh6)n1xAu^Z| zLjBAvfZqJpa&}rfM%ju0EcZ!|-AXJCUy`EM``#^PsTmd-QcqvVq&V7uUooj+bo$+x zyUe%OuUHcbH}G+`8qZmaFV>0!f7f^7nN9FwjSV@xeKRCWVpKBr2J4QYM@4k=nPIje zU1z;Rqp6CpI=79lPSwnl0b58_h4b#eKo81@aT@y<*nJNIcW<6qnZc!ce)3RP1Z6O>}2BDm;Dh zaivIQ82{}~fl;G-V&8N7TF{l%D}ta(|C*%8xocT;cWb`OY)a2$$Mrl;HMAdbdfmO{ z1r<=k`AJ@OUwvC!zo|3luN%I%;ter3nN&)5h%P$3s2`@g+8hIFEyRY-x(rUpFN_*h zTCIG0m~$LRYpdc!M5_`lW*GPU+4ome`DsYv_gU8wN=vn^0W<3DR`u>a$@&7D5C2*` zOm^gGN?jDHR3~?b7k~0(x|u30DEc^_n~T zUwwV?zRgDHBJFuyOyw0Zw`kL5Oa@K?s0|5y1b2pk>Xc#S}O*Gex8#V zGc^AF(`R;m6o$XP{qAr8&^-+2zexLDUkBfcvyn^F839A$_?dssr;i_WFqa#&xyyzd zdT2NDHKTv*wJy!aiouB}^yQ&X%HsO8j~7=Gi!FyFQuOQo>1kE=76E*=Erh>LdfX7X z+q0k%EzM`maoCU3)V)f&Qqegp+u3ep(ZHkQdpV{>q0)%th|vBl_LtLEl^1Y{*Pffv zarTssfsw&EdJidQdR$NTRpe7Kbv9^?u>zk5MJpYKeGlySmIU55@&vZ49LuxWR3tS2 z9p<^A%e;AfNIBNQvs}5jX=Zq4ekUZvo-okl)J=tJwwHP_Z@q6h^~(`N;{Zs`b9=zw z)3tuGVr|gV%-=MV#c$H?r{7kzLxD?&ZG#zV2eo*qDtzVls?5S&E^%*+@KJIWvv^dJ z9_}&_Jpn=b+I*WlU%~I0@+m|v*rX2VqKtj<_07ve>F$%!3twF2PHMxoKj#FETXJLC zUbZ=Lh`(d?8abw4EoX46^(J&Px1eEd>$Z6@K#(cQdZ7sx$_#op=2v-9CM<`wJBHGo zQyzc&hZK5blVfN&_7n!*IrhUo?R0r2FguDkS>%{c!#=2qsGGixfn=P9Ayw^RtvJ_p8fZ6>Ly%Mo)20TL1) z?SQ=?aBjhLEmaHvoM>9YWLjl88CB84;{^tPOqt? zt=95SO#kS4=G0V@demG@9jI{OrE~c##A8Ha{l(!dCidI!sREXosMrE2qW((%+JlKL z86UGPBb#kjbS}^KTyxjq)GJ$wzh8w^IBh91L3Gcje{OE~AiaE&EsUPv*YETRNShv$ zBE)*%VkU>8pB6R@Z6S8+lxQuXue7C_lJ61*teT?jnU}ur@2T*)e&{;}6!vOsDd|)d zO|X~N#&N2Ll2j0EO3DG4d~G{f%ri7mHI|LdKB-vy=AEIs07(3*kJ*Bo;Z&2DJSII1 z_6jNKOan5$pdi>BH;&FMO!_aCo_b=p-Styj%RevfJOGCaAkxZK315OE!mkl6Z!8}U zWDYd=DD9JDyDLWzeOUDPn#TYKtXw$&;v;+|0=E{k(l^yGOmigdMQgJy`rJWT0@r4d zwdzz2&o9=w*~}CiJTT@3dsU;f*WL=UhC*}(N$?ETom3XXCYQ}+ADXn$ER%HO$Zil? zr~3l5!x3s`yQP1*tLdDUBg)gK{8n{i>r`D&W_ixiP-0F8oTwjWPB!Rx##&2nRns4e z&T&5(I~!}2y8E%p*dTY~$UHc6@W_5g+_0{U)@2P9>Mu$)!+AnWHi)DPMo81%^-i6~ zb);wGrqO*CEfdxBw_4<|Tg+aOw#LXAL}Anrgx@So3znqo35}&uhfcgn4`~$l0Udfs zJMf9--!&fQN1Zlbhc7Q9KDw^|YWX_b4DF#lZ+Y08BF#W+Jvx_TX5h z&6YLr)A?8T$Mcd6l$OqBZ9#4u1&ew=Q)Ee$Cx47-#hyNe{^z!KZSq=n_V)x0uA6%w z|9lg(5M;@E>LpoH=nWU~6TujtAB-Ux=pyf&|Fm5E_WxrBwVdC?QH#zJ|3W$%2EV?P zCSZX#>YLIrs$f(7)$k?@5~q*u{-HND0^DX;X}Y2Owd32~0u%0)P*{udQQc+PHphXUDr~PR zQGKF6=xis=&pPuwc{unL^8Ez0`7MqfV-2bFtrvW|#&$|ER6^sUrmscz-H$7ZU3fWc z@|Av|mulZWg$$3NCe9t1ffmo=8_T6Cl)_^RyTavJQaU;IpYnxNv<+0QD`-yGP54s& z`7`E^zff$aCNsQ-~`7BIxXY5AKzqw*o@O+h)!toX&tg94p4 zwekw{p4TmUD)-F z|M6X>-8EPh60*M{re<3OoqK^+$Kh0cLio;6@9mUswOz#yH3|H$ZV zIg?wRryyU}_nSwGkJ;=a=oJ}G*!@89zJ7^zx0i0K@Vr)?YakIyd4L@YJ>U5liYut1 z{Xz-a@g_a`&{OpjVI*H0b9bgzufnc3VOwjZy$l?0zAO$5m96Na&Jci(92U4_Ad!tz zm`Cxzv{bQAiE1rf{LZ3h)N|hrhO6jrJzAF>n_z&^8aI1s!-y0_GAz>FMfKBYg#YSy zd&(0{jvszgBmBLb!|8St$0R0}x)`h3XZktr9i&R;i&;~=pAaZ=uo8E0v+NqS=*sAA z9fvW-n0FI7fmq4{Nv2g*6eiC(Su#r3k>wf$sU%RSm`lMhbgorL1N!T=_h;!!_Y;g} zHIAAe{!`e1&#KczYG~1(KiMVYys0RKm~fcjKM#ov>zq${sjlw)Lne-upA4w6F^tL}6-(x}Ei+hx?fji(!LBZ<>_iwGs-381uhuyJJjXqQ%+p`x-*;Bs!NkP^SR(&nEO|xo8{PMpUu_{V0$$yjv6;iQ?g@H(@+fwQvzp zlGK#%&^#GiAyoI3XVfESCT6K9dtAI;^bdW!x31tNu4yRIY*2H;b+z6wZS3F4YXw@| zUuPRZk4qr+{Dfz@>U?8QDNScqZLQJkYTIVG`gGo-psgjtT_9ViQisf?h$867fX@RL z5Q|(bc}Vk)Uf(}Uc=WuOzM<7Ec~~clda|wVo3EYpwuwV~?EIOL1_Zkf{=%P+_%NM( zBd&2G*4&P_t4;0p9j|OY?;y#qfoKM{&`^K2N0SV%diUVTE(Pbkd`8V25$Qu@*gU2{ z@IKDmJ&?asBqsT2??B-~T$aVQ6JGMqo5P22>E1!lOwEE2SMB&KMJAl;X|th1r<02x zm@tecEzDM6`SG+)%#7d1=U2Kx@zgvjr3f2$it&EG$>rt);R(L@Hued_A}y(xN!xC$ zJdVxChGx(t6CC0>Nc*v6F`2t%YxhpsvC5TQnj$U3ONAT~X2f`?Tc8*mQQOme zfI;wg`H3_yO~>$e|15E2Q0}8b;U|x>b2Cr)SzZJeeafLCEe=`wN-WIgNB=0<2$x{0 zjzX;V_3hlj$>ac1cY@$7LZb435m*uG)ZADm;mfJXxsBb!Wa^895@bJJ1}E zA#&uu)QCgo$rLpE1gE{fr9hEH_q^gP(Qi8mX7@*?sWR^Ldna^~DNAR55iZ%B&zKzG zSk9f^Jy;y?!S{!XcC60rs4V}(i;%xhkr;g!8+Rm}mrur$$5q^(=Th-L%z)k>^;!OY zoRZiDwM+5WdCg@n+>4hIWJO#= z@lUhhN^<}5dZ%Zfb*>rKt$unLPHrHd4@T?g>$Fu8p{G5@K;9OI? zYT&zH7(+-Dk2ZV&G+J( zsPxz!;c2%=;~Zj1J*7jr^bDSa|9{2i@p)y5?ITz@nzOLr_tnv3akrzdu{3!{7zPcp zT@cnQ6@_30neU}3v!=mM=(b3WRM!_2Hhw;Z8BUfX;(rAl*%o-b=9ZNRnYNFQ8;B=9 zF;}aq-FV$B@)L8mj`xLQ=T<*ah{(VFf?Oef@ej{_cv!P5T4a~DHwKW%^Q+=w+I)34 z&}&wc8lBOl<0#Ocghb-GPDlg(x^R}Za?(@Y^ULcx;cH)qp1_*E4B1w4Sg)2T7gfl|$>R5Sl z{@#TCzWN5Wc`Uae4X*)t}-?5g|36RI7Y{H;kfdsAtzY w_)wdFFW`ONU%RgMk& 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 diff --git a/assets/gardens/gardens/garden_19_open.png.import b/assets/gardens/gardens/garden_19_open.png.import deleted file mode 100644 index 969e5363..00000000 --- a/assets/gardens/gardens/garden_19_open.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://qt0xwdi4e2rl" -path="res://.godot/imported/garden_19_open.png-2ca751b5bc0547421c685471b99cec2e.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://assets/gardens/gardens/garden_19_open.png" -dest_files=["res://.godot/imported/garden_19_open.png-2ca751b5bc0547421c685471b99cec2e.ctex"] - -[params] - -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/uastc_level=0 -compress/rdo_quality_loss=0.0 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/channel_remap/red=0 -process/channel_remap/green=1 -process/channel_remap/blue=2 -process/channel_remap/alpha=3 -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 diff --git a/assets/gardens/gardens/garden_20_open.png b/assets/gardens/gardens/garden_20_open.png deleted file mode 100644 index b68ff295a35c17f9a8006adf5a1d56b4abb2202d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43948 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 diff --git a/assets/gardens/gardens/garden_20_open.png.import b/assets/gardens/gardens/garden_20_open.png.import deleted file mode 100644 index 09d51939..00000000 --- a/assets/gardens/gardens/garden_20_open.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://bme75rax1jvk6" -path="res://.godot/imported/garden_20_open.png-a1cdab8e6a30f2d98831565e2772f899.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://assets/gardens/gardens/garden_20_open.png" -dest_files=["res://.godot/imported/garden_20_open.png-a1cdab8e6a30f2d98831565e2772f899.ctex"] - -[params] - -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/uastc_level=0 -compress/rdo_quality_loss=0.0 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/channel_remap/red=0 -process/channel_remap/green=1 -process/channel_remap/blue=2 -process/channel_remap/alpha=3 -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 diff --git a/assets/gardens/turtle.png b/assets/gardens/turtle.png new file mode 100644 index 0000000000000000000000000000000000000000..51d44732ebe62e6ab46eba5574858968bb1f4d3b GIT binary patch literal 7144 zcmW-mWk6KV+lCKIcb9~8NjLJNSy@&FyMede8s; zaCW|&GdnX+UH3E5>S{{(IL~kZ0KivQ0e~h;Sy4{QJLkyQSjEuRH_+kv#zsciQ$5NB4O;>>9;!Z4wKcggwt-TpCDX`5 z*P!qy_*Z4e{GV!s0lD_G@ekSAMWR(5pZ`%##e91)3eU_Q8LdRg%FP{Np~=AG4?$2R zQN`YV5x}4!D5Kn=-IQBET07AUq1*(Mn-z0+g@Jb83GJzZqD(EnBB-6vbrb=kUslM3BHq# z6_-j0&g+NLoCyDCzdBIujUB*=J^fqApO{v8S$B`847j8(jsIadP(|&89h#lYgnKhZ z6yfy_-9Bklj1h(DxjOIaL#-b$aj{Hu^O&C(Iio=UWaRpXKHYDra*x$Py4H7l-z6tq zbNTd~TDLy$!bJDJg965OhFP6?YX`vciO&iC{jKTu?DKmy@tFLl8(oMk#w&IVrOnQC zoxj{4slY9yfv-Mx=9v)&XLI1`17k_XGNIQ#&w;?34KDx)k`RwtY;v~n^P>s6`G-Lc#YfWgr=vFj zP$wetGhfp0FZbht?)RRBA&S8Bhaj~;TOuP^SMGsdDk6NXW{{=X^B$FqQXl9Vy;J{* zArwq_=NrL(%V(&g&h-W+QqjPwgKO=wXuQ7Ym>1Rd@uI4)F_lM4M|bsb{_EM!o5m*8 z)tnW)T{QmL-$FSv%0X*sEP=26vCmN*!sT5&%o8e7*9HYKj#2wFo8GLJ2YCr>b>_N| zDWE=~Ji+<5TDCDT({xei;to+I4i8PRdQN9co+~wh{~7av!~FF1098`;!RP5K?-Rd2 zyV5}r$u*AS#}$S9e=9P{EVvd$lM6<1ZP!xk!_;0MpsE=V=jfTPU!ZZ+I_23)m_Hhc zAL7MgNTs#Y^prMC?iaD(ecy85`1y@(&&5EQKi)J+Np`~dYnEz#R=kCxNg#em8>6t1CQHl+$GYZ8(st zNr`*><8(!o&>PuY$z6c&d!|#zKs4*wrx?arE=O~T?86Rco+D7Ir(Wu|=I6dwlVC>y zjiaP4UjBp$dioP{r#c>@g+Q8eYI$Ei?xLl!(=SNF&QTkmKoYe)H{^#7N{r_F#!rgZ zUs~yV9;NTz%RE1N`mJ(Jk--fKMCsyj_=*ds3S9Ij1!5cMopWuKy_dh!_xy6`!zwkW zvX$C5{?MF5F#}6NdApicc7U4B*SkSKh|*FVTD%Z@-1MeP%c*N*lXPVH5MQ!XZCvJ8>xC*~^VvgJqujT|nyiB%30r?oJU1d`eA(9)4mU~fe@u8D zIw+w?@9NbXlY9^VbQ1M}`A*M76^}OtqTKtgq$Ad z%}C@o2_(ZtR|)P97;kg~?M7l&cCLJJ zLj_j<=X5tl9IiX17QSU|2tpn9Tvsa(nzeY8IPqJBtvGE;R)n z^%M$69^MIz0JqQtEH>$fXO86uXMfv{Z0zknnwlEU_XItjmz|#CsIwq6qFe#y(6P<^ ziMY^S{!frmd;-uZ%68g&`yb1P^Ud$4>n3Nl2>~o;C4sZO-|IYARO)&?9LmBN-ByjH zc3E`mZZrOjWCr(;I=Z0k|P(;*l|ISlw zQ|JgTzZc0Siay>V$-{y)i@y{Q?^9Yq>0&O8;i(IN1S33*ny8h$Lp1Fto4J8AZ3w^MK%ffWU$`scM4 z0YZ4M!-;FTUa*y?PYsd-E}u9pin=p)z00zTJW9$_A+Di1r>^weH>(Xo6|M&L?au}p z+J@S4nkEomf~)Yz?gaCLzp`1(o4m>5e(}ijU*NiuH+z;#N5>3$WDUgY#7{7ZjT(%> z$hhI)Dkyzg+}doePyHc^?|276%+z|5*S5QUgrx``M{_$$6mA9gKylUdOd(CLB9u@{ zn%hT==ws=VAy!F?)GfzJ3Odwwaur$JZS^)>JiD82spBLharTFuX!ikb?+UwWirxpW z=pqJ{&gPdM7HDV?w{ib$?^7FAW{qBPzgB9X32&38_PvVm2>Gjw;kf$6A&oNjwv`M+ zy=ZoOV{M9t#^(CXKM8KJ{oNAH$f96AE!v3qFGeBqNN~NKIp+-RG^2rEvAjv7%&c>$Kgy<_B3j$&cN%peP)SP;4~#<-7874H#t*e3T$hgPy|0Z^!~6TfC!eyf zCjn=m#?isT?gO@4kYmi$Pj?fDEtqe%{u2-nb;&Z7OQT+A%~~f+DDtq8GC|iRZ!sU( znvwla+M?uY@O8O465zu!gC%Yi_G6Aud;YvApkc!i zVD;Iizw2E;Ztu>pX%8&IV6&hmj?{ArhBD~n;gV?>Cy^;m8bU2wE>a^oz#^@LeRAA= z@RscoC!G0adrh#X%}>#TFLb3hj6*+|i4E_w`qN3^6IMtK9g{oB53~2H7tU7S1uzjk z#NK(ejL3cxMpcX40KzWGl0gXB9&fak>~WJ9y}1~&++SYVWsbVnJW}tR>pBt*Of?g4 zTfOVwU{}&@BkdyfQ>|m6@6BKd;Z}tFu6}CdNFaE6>>c|!j}PzZKgelaWPR(aUbm}c zDi&%eG^0vEY)KuK2D5xlYC2-(oX;x6i7kFeK8KfNx($31rs?MY=0!$|%?u_XX? zYcL%rNTVrsAmts9?i%Cyy7wx5a6k+!g#9q$as~t=G|eZT@cO%t$@1;|AEl_{qvE?! zHf`8Oy};b!`!4}#6cOu9bIUVE&}dBy8?%xtpj@nV9;CrsK8>_EdHswR;7Mir@KLaK z?&bdpK)@{DkWc;6(yu3fnYA@w`@Rb)@Sh$Qnk3x5;i zpZ0m4o%&;|^!KLVurR8Zi~G^oX=q2s)8yy)kdk*I&%=VkKK6U-Zk=RIc?|yp1f$(c z5NkgdVzk`6I?p$?{2sP+`J<|i>zIZ?2JwIj3-S=fDL^9Mt3n2}Ipy1UGmc^;#XlNbDI+i; zG_|@MU)t|Vd6CeuAFNg)87MxkO|EkZKf@n86I2y36Uo+uxuF@}UU%n;B_s+f6-8=f zJ=e@qtgft_1GTVbS>EFM9 z&p=}#cargUzW)ggXAKI?pPgM#DjiFn=(kjO71F#vZ3B%9*jW#{Voo(EE!?G+1O0GE(zhD(3rThaRt1)3@QmvC#)}Em@XkOd38}*(yBd z(*>kUJ2QM&n;P88=?w0iS=Tr9jXW|gtP#$RxHKV-6Bts~JLzZHhCw!i_w1TOPAOZy|&6cIB2-X>?C)GvQi|CUP%(+ zpP}mg4H^Aj`nH=tc(HM0#BU7*jnAYa2H_EnN#2zAC%Y~~ZEI}Rz)p#j9tIgEfPtkztOR_Xb870{vpH$UW zycb`yZQ*mr%k39jKD=4{SxvH7{O$#M9UoA2OSNw-iulItiYZA0Cg!mr9B~IcJPaw0 zTnb-!BM0;Pj*gWKKzd& zuY%c^O5P^&YXS7v6wMnxF$2|L zZ^~|wp!MyQs<#D}G)bSUI6T~KiT2^vnfyYZ)+P>9#!FNNp zyPU@D>O5qh-pxPnwdRjKa$&K$&CI(fx=10&b-cQ{UzYc8Vi8M(%kIv+2uw)hZ--LL z(JK?GY1_BR5qRN@ow_a0_?;(XG*6p~cP}9a!|^VcG+c2oas+9_wR-#j z&5@Z7O&-p_D)QS;9f_G-+U;FiV>~PNI}{v%1ZO-)A1jYjn9~^^x@A!~ zc4INQX!#R@`G-!`##wcRDYwW2RA{9Q*rfJGqG4t^PR{D8ZA=lFh1$we4Z|u9T*RN) z*II8vWHU@Oi-+ahgayeyl_b0pC(vWScAQ|QknDA`B$RCP%g8lNyVO2D4J~)>n2cHp z>ZlmH2ZPL@CapPnFJXSg%ST(^HU{f=QmPlktd+%SjK(eOwI&hFeS4JcSI!Po|D+U! z-yQe=q`+*GTTBgD*ZOn#^#W*Pt~+(!7>2$7nLj^rq(v0!S^moZ+Uze#>LOt{jC`+X)U zbQNfzeD!!K_`E(t7>G)YDDs%F6FIF*wl&27Fi^wO%DD9FSiOOC%bKM68tJS7oo6hm z?tP5fPK9VDrU35iKrIO_b#3Lc&u)&5=)Q2Jk)TPNU}rDd^eclW->4MN7BtM zr1k?#f|}$;gHSKsU^uIc&hKv%v-_GV{|nx}R=7iCaj%7aC^KiEjD-*UABm;Axv% zVIa-`nFxWYXoRw^lN^rul;ZV#3LT|I(OSJwy}k)oM*TWrsqJ53@pZ>_Yn z1?#g^C+vh>-+z##{rT!$wj`I2BvYo|y}ug@IIH{126-I#fSU`^$I%fPX4dU-8)JYR zZUwSYg2<{hKkYaxwXM|h%ju*8IgJ=ujhF2+0ZhDwBOV2cY!eOiK@&c-lTxC5Qy%Rm z&KuAcc21!IMJbjY< z!#=UR-t+4)IriFKxQm88HPPzv3*WjaVd8$42P=&};JKe<$!AMIbKMWNG%Cg0G%G%2 zY3RHnj{fwD=`JJi6z_wf#Dd|plC8)y{8q^p!gu?n)dHkN(!GOZ5 zA#M_>&j;VJDk_D;q@swYzkvM4|FBA3$u*i(GHEB`U3G`XO@40401$nod%VuA`%e|8 zEHm~+OWuTz7Db<(=uf{kI&H@E%);nbwkUbR?&GV~)w1^Pp7*UfRoz~lp7J_5P=x){ z-TWc#09{MYS5K5*XJ&mV?afmL^e0DUqRq9-FSXNTKpH%pbpyrm+&10rSL6QF?Zw)M z?b#7lmgp=pruPSsig#uhyrx*e_HbrguxN27PrF$vD%9W`)VykRM@57U*jMp*ABw z5Z=TaGrmvJ&9eiw6D515ac-`VNk8)mr>Orj#;hqVS!~}5fvl9ZQ*z(Cg8-kmEs0Tcpyx-8dJ14|b0{Sd+v1qmn|B`D-t2%x9phpg55j&vRlkr?ac# zp0E`Gsm85cQ;-w^hZWAn6*XXmGmG~!R&QIxXuG{?jfGvN5e}3FpFEZ}FB_vZO`&Kx z(v1&GOX++a%&GYuB#m{V=<00ES%{vQI9t4=$euC`8NcEI!@oH+zR2V3E9NFv9^ka7 zQt)SA30zL|v=k@<{=;xXP(RP5I@Ep{wLq~=0$hM3!Fq!6%t(|eEb9}s%cBY|y^L{~ z+?#G|fuADXg-2Lv0VpGOES#ZZLdIYe^iCws zy%t859I6Cb%y=u#Y-V&M(hM<7JNEWndqH#`Fdnan+N(lxSU+ltEMZ&N1FwGyJ%JurONUJg|12j5Q zY>FrGswttF_44a#neSw1GkFTXMw6`wr~V0(m7+pzH8vW0Wq=+%wDn54^q37@L_7X?cLQU5Q-1&!pgId)Aitkn(*cNo=jTfU{FPk>giA z|FMyCPTmDm1D*0jM;cKrN^?r2)gTVfdAWLX`Gs9aQSidTFQIz~tF0T43e!cvl-0PF!O?8V&1CZmooL|`(TW=- zR!gs*;2M*l@b59%GzRg((#l+MSkO!4##5mSTGR0e>504#A|n*W$WGawynwdKyjjL> zuzBLBnavH{vJRr&mJpL2GOtLj%nm>K3){JD-C%W*Cq2dh%f!d>Q=geu;i_!$tv(Rj zp60}-!h#LpRnqiv(Z)w*J2{vIZH|Ru!Y9gb;LO1j?Dw-Ye~lMn#HvNE!oN9V1qs&B z{DkH}frokd`%)|sEDIDRjL$Y(OgC2SrhJ{SC?SHb2SE~Ou$?cJbZ-Fh(gF>jL;}5n z%l6ndrYHPK;_O?NZhKo+{)nCvzpioj5JOjqQ}GMK+0(b1xPlUqv-$tMP{YvO{o=`J zIk9Nh*C>3#W=Y+o6}Ymx+#lwi;T=5!Fez5GB|3Q+9B2JSG}>0MCY=LkVF?y9MjdC1 z^1BKz*bu6TNBgPS3?749V9yIAOHm58g8ZE31i{|VC`~pMz7PSEtYD*B4yztvVyX>t zvn2H)1fvF)_Bl?SzeW;bjr0Qx|0|oEBspag49hg;V26wDB-zg-5r}Z??J4RzD}~P_ zWzk(!7HEAO65u_PFNa!68WTK~AO3MJtnOTCibJC3)R(r@g_Nq8MZ*md;uh(3&(Zsf zkIRIZjabfQAxjq)rpXe!#L9_Ppj!i}*OcQVc|}mxMQ3`=<&}b7DF)>R`V#y;za}!; z3N>t;PoaWqx~40{U6VC`DD%r?g7q@JSoNV%W%h;o098bOwXSPlf#6T1zds? Rz^gkz8LFmOEB`L^{{X*_ZZH4< literal 0 HcmV?d00001 diff --git a/assets/gardens/gardens/garden_17_open.png.import b/assets/gardens/turtle.png.import similarity index 72% rename from assets/gardens/gardens/garden_17_open.png.import rename to assets/gardens/turtle.png.import index a44b47c4..1c7f9cea 100644 --- a/assets/gardens/gardens/garden_17_open.png.import +++ b/assets/gardens/turtle.png.import @@ -2,16 +2,16 @@ importer="texture" type="CompressedTexture2D" -uid="uid://hxrd3u8mmyva" -path="res://.godot/imported/garden_17_open.png-2b4641eb9fe12519df915d2dc71726c5.ctex" +uid="uid://bsw6v8ix7bb2s" +path="res://.godot/imported/turtle.png-5a084e80c807d6ac811492f2360a3574.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://assets/gardens/gardens/garden_17_open.png" -dest_files=["res://.godot/imported/garden_17_open.png-2b4641eb9fe12519df915d2dc71726c5.ctex"] +source_file="res://assets/gardens/turtle.png" +dest_files=["res://.godot/imported/turtle.png-5a084e80c807d6ac811492f2360a3574.ctex"] [params] diff --git a/assets/gardens/plants/garden_plant_05.png b/assets/gardens/victory_assets/victory_asset_bubbles_01.png similarity index 100% rename from assets/gardens/plants/garden_plant_05.png rename to assets/gardens/victory_assets/victory_asset_bubbles_01.png diff --git a/assets/gardens/plants/garden_plant_05.png.import b/assets/gardens/victory_assets/victory_asset_bubbles_01.png.import similarity index 72% rename from assets/gardens/plants/garden_plant_05.png.import rename to assets/gardens/victory_assets/victory_asset_bubbles_01.png.import index b8bf3689..05b946da 100644 --- a/assets/gardens/plants/garden_plant_05.png.import +++ b/assets/gardens/victory_assets/victory_asset_bubbles_01.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://dvxnktx1wiyxp" -path="res://.godot/imported/garden_plant_05.png-91fe6b5b0510425b3b5e77884962f930.ctex" +path="res://.godot/imported/victory_asset_bubbles_01.png-bee23d10f4d89637fd232a81e89bc594.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://assets/gardens/plants/garden_plant_05.png" -dest_files=["res://.godot/imported/garden_plant_05.png-91fe6b5b0510425b3b5e77884962f930.ctex"] +source_file="res://assets/gardens/victory_assets/victory_asset_bubbles_01.png" +dest_files=["res://.godot/imported/victory_asset_bubbles_01.png-bee23d10f4d89637fd232a81e89bc594.ctex"] [params] diff --git a/assets/gardens/plants/garden_plant_03.png b/assets/gardens/victory_assets/victory_asset_fish_01.png similarity index 100% rename from assets/gardens/plants/garden_plant_03.png rename to assets/gardens/victory_assets/victory_asset_fish_01.png diff --git a/assets/gardens/plants/garden_plant_03.png.import b/assets/gardens/victory_assets/victory_asset_fish_01.png.import similarity index 72% rename from assets/gardens/plants/garden_plant_03.png.import rename to assets/gardens/victory_assets/victory_asset_fish_01.png.import index 36fd9cef..84c8bc78 100644 --- a/assets/gardens/plants/garden_plant_03.png.import +++ b/assets/gardens/victory_assets/victory_asset_fish_01.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://dgssb0oonuqku" -path="res://.godot/imported/garden_plant_03.png-ff63d21df369ee5bcd9355bcb43ee470.ctex" +path="res://.godot/imported/victory_asset_fish_01.png-7e759ae834a4c009eab84c8b5dc89312.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://assets/gardens/plants/garden_plant_03.png" -dest_files=["res://.godot/imported/garden_plant_03.png-ff63d21df369ee5bcd9355bcb43ee470.ctex"] +source_file="res://assets/gardens/victory_assets/victory_asset_fish_01.png" +dest_files=["res://.godot/imported/victory_asset_fish_01.png-7e759ae834a4c009eab84c8b5dc89312.ctex"] [params] diff --git a/assets/gardens/plants/garden_plant_08.png b/assets/gardens/victory_assets/victory_asset_fish_02.png similarity index 100% rename from assets/gardens/plants/garden_plant_08.png rename to assets/gardens/victory_assets/victory_asset_fish_02.png diff --git a/assets/gardens/plants/garden_plant_08.png.import b/assets/gardens/victory_assets/victory_asset_fish_02.png.import similarity index 72% rename from assets/gardens/plants/garden_plant_08.png.import rename to assets/gardens/victory_assets/victory_asset_fish_02.png.import index 708b5ffd..a48e3003 100644 --- a/assets/gardens/plants/garden_plant_08.png.import +++ b/assets/gardens/victory_assets/victory_asset_fish_02.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://dt2a0dea0hv0c" -path="res://.godot/imported/garden_plant_08.png-c826272339776b3c901a892e069619a4.ctex" +path="res://.godot/imported/victory_asset_fish_02.png-1ff3c680b36383fe931769b1bcd13df4.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://assets/gardens/plants/garden_plant_08.png" -dest_files=["res://.godot/imported/garden_plant_08.png-c826272339776b3c901a892e069619a4.ctex"] +source_file="res://assets/gardens/victory_assets/victory_asset_fish_02.png" +dest_files=["res://.godot/imported/victory_asset_fish_02.png-1ff3c680b36383fe931769b1bcd13df4.ctex"] [params] diff --git a/assets/gardens/victory_assets/victory_asset_fragon_fly_01.png b/assets/gardens/victory_assets/victory_asset_fragon_fly_01.png new file mode 100644 index 0000000000000000000000000000000000000000..24762e1b589e2bde4710a2040dd857f1b67c7a1e GIT binary patch literal 1825 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 IM6N<$g2GI!iU0rr literal 0 HcmV?d00001 diff --git a/assets/gardens/victory_assets/victory_asset_plant_08.png.import b/assets/gardens/victory_assets/victory_asset_plant_08.png.import new file mode 100644 index 00000000..f0e97947 --- /dev/null +++ b/assets/gardens/victory_assets/victory_asset_plant_08.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://blaltndbcv2yq" +path="res://.godot/imported/victory_asset_plant_08.png-b68d871b2af2e7a8264c50f18f211a0e.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/gardens/victory_assets/victory_asset_plant_08.png" +dest_files=["res://.godot/imported/victory_asset_plant_08.png-b68d871b2af2e7a8264c50f18f211a0e.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/gardens/victory_assets/victory_asset_plant_09.png b/assets/gardens/victory_assets/victory_asset_plant_09.png new file mode 100644 index 0000000000000000000000000000000000000000..bf0e7ad5237d897803d46c1f04c912a0d9384e57 GIT binary patch literal 3762 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 literal 0 HcmV?d00001 diff --git a/assets/gardens/victory_assets/victory_asset_plant_09.png.import b/assets/gardens/victory_assets/victory_asset_plant_09.png.import new file mode 100644 index 00000000..215cdf27 --- /dev/null +++ b/assets/gardens/victory_assets/victory_asset_plant_09.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://co6vu63bybpnc" +path="res://.godot/imported/victory_asset_plant_09.png-1d79940fcd5d19c3d71679d574480ddd.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/gardens/victory_assets/victory_asset_plant_09.png" +dest_files=["res://.godot/imported/victory_asset_plant_09.png-1d79940fcd5d19c3d71679d574480ddd.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/gardens/victory_assets/victory_asset_plant_10.png b/assets/gardens/victory_assets/victory_asset_plant_10.png new file mode 100644 index 0000000000000000000000000000000000000000..9488a3187010f3a4473bfa4d6449eb90a24ff889 GIT binary patch literal 1323 zcmV+`1=RY9P)Z`jlnqdd$kQT$d*n4rS$KSXK_Uz8$Wfm?Fc9ua$F|LwSY6du@0|yfSeq#6`qM zM8Nyn`8oF0y0ACLntMdZg>3=0A})cykT&KVPuP9Cxt%%AOo4xp&t;5_h#4|$Xk&_9 z4>CJ|?dM>GwlZTS0xn|Iz=_rz5oBf0_>WDmx&V;4>4zjVbRtnK4x7IgyD75}>Hs6JsEvPCCJH_P+QJSK4u(y zBX$u-L989isJMyfft!f#945q($~I;;6UOnNA2kz3GN6r^%}qpiiV5-0WyH?S6Fu-I zV$5^AF|!5sYMhu4Xvmn!;WXIxk(YgqBS}SVJSx46Zd%DspA4!Q;U3^ zTY_=(#%A8Ng^F{L?LFqpYp(_E#XyQ2yA9ATl~)>4ZrVglk^Q!Abga8+o2c3VzxQC! z7-|#t$UP`&xOSV`YVoh%?S_B6JOGk#?|kGEa9)7qy+$H4S@o7rARs-m7h( z`rcJ877l25pu!{r;#!1M0%|9inx>Ilx{$^Kf?Y0-67td}w^S!$oZ{@V9je+h=MtW3 zUXc}DRw*?uSz&wRoBQTaMhtwzpc6TVuZ?*Z_}hpm6kB8v?Yu(4SAJrSj3vk5l?TMm z6i-V$`q&~mLBi)TZpre3*jD%~w2w^L0;wjS5Tj$@1+iyI54lGnHY-mMNb+x!F(b;0SkSWE&OJEUsnoPJ7VkksjzetSTX h(!S|qL1a0V{{yhJQ50vaS{wiX002ovPDHLkV1mC*XBGee literal 0 HcmV?d00001 diff --git a/assets/gardens/gardens/garden_03_open.png.import b/assets/gardens/victory_assets/victory_asset_plant_10.png.import similarity index 70% rename from assets/gardens/gardens/garden_03_open.png.import rename to assets/gardens/victory_assets/victory_asset_plant_10.png.import index 3a0fe03f..e68b39e2 100644 --- a/assets/gardens/gardens/garden_03_open.png.import +++ b/assets/gardens/victory_assets/victory_asset_plant_10.png.import @@ -2,16 +2,16 @@ importer="texture" type="CompressedTexture2D" -uid="uid://c0pixsxb7e5yd" -path="res://.godot/imported/garden_03_open.png-142fe10dfa5b6344ac20de2d61c58e7f.ctex" +uid="uid://gm5x5p2f07rh" +path="res://.godot/imported/victory_asset_plant_10.png-a1d163c2e0ae69f15a2dc71739934513.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://assets/gardens/gardens/garden_03_open.png" -dest_files=["res://.godot/imported/garden_03_open.png-142fe10dfa5b6344ac20de2d61c58e7f.ctex"] +source_file="res://assets/gardens/victory_assets/victory_asset_plant_10.png" +dest_files=["res://.godot/imported/victory_asset_plant_10.png-a1d163c2e0ae69f15a2dc71739934513.ctex"] [params] diff --git a/resources/gardens/garden.gd b/resources/gardens/garden.gd index e1454137..fb0581c4 100644 --- a/resources/gardens/garden.gd +++ b/resources/gardens/garden.gd @@ -4,7 +4,6 @@ extends Control const BACKGROUND_PATH_MODEL: String = "res://assets/gardens/gardens/garden_%02d.png" const MAX_LESSONS: int = 5 -const PLANT_COUNT: int = 8 # Maps lesson count → which slot indices to use const SLOT_SELECTION: Dictionary = { 1: [2], @@ -32,13 +31,16 @@ var active_buttons: Array[LessonButton] = [] @onready var all_slots: Array[LessonButton] = [ $Buttons/Slot1, $Buttons/Slot2, $Buttons/Slot3, $Buttons/Slot4, $Buttons/Slot5 ] -@onready var all_plants: Array[TextureRect] = [ - $Plants/Plant1, $Plants/Plant2, $Plants/Plant3, $Plants/Plant4, - $Plants/Plant5, $Plants/Plant6, $Plants/Plant7, $Plants/Plant8 -] +@onready var all_victory_assets: Array[TextureRect] = [] @onready var background: TextureRect = %Background +func _ready() -> void: + all_victory_assets.append_array(%Victory_Assets.get_children().filter(func(node: Node) -> bool: + return node is TextureRect + )) + + func set_garden_layout(p_garden_layout: GardenLayout) -> void: if not p_garden_layout: Log.error("Garden: Cannot set garden layout because it is null") @@ -47,7 +49,7 @@ func set_garden_layout(p_garden_layout: GardenLayout) -> void: set_background(garden_layout.color) _configure_slots(garden_layout.lesson_buttons.size()) _apply_colors_to_buttons() - _hide_all_plants() + _hide_all_victory_assets() func _configure_slots(lesson_count: int) -> void: @@ -81,24 +83,24 @@ func _apply_colors_to_buttons() -> void: button.set_garden_colors(unlocked_lesson, unlocked_lesson_text, completed_lesson, completed_lesson_text) -func _hide_all_plants() -> void: - if not all_plants: +func _hide_all_victory_assets() -> void: + if not all_victory_assets: return - for plant: TextureRect in all_plants: - plant.visible = false + for asset: TextureRect in all_victory_assets: + asset.visible = false -func update_plants_visibility(completed_minigames: int, total_minigames: int) -> void: - if not all_plants or total_minigames <= 0: +func update_victory_assets_visibility(completed_minigames: int, total_minigames: int) -> void: + if not all_victory_assets or total_minigames <= 0: return var visible_count: int = 0 if completed_minigames >= total_minigames: - visible_count = PLANT_COUNT + visible_count = all_victory_assets.size() elif completed_minigames > 0: - visible_count = int(float(completed_minigames) * float(PLANT_COUNT) / float(total_minigames)) - visible_count = clampi(visible_count, 1, PLANT_COUNT - 1) - for index: int in range(all_plants.size()): - all_plants[index].visible = index < visible_count + visible_count = int(float(completed_minigames) * float(all_victory_assets.size()) / float(total_minigames)) + visible_count = clampi(visible_count, 1, all_victory_assets.size() - 1) + for index: int in range(all_victory_assets.size()): + all_victory_assets[index].visible = index < visible_count func get_button_size() -> Vector2: diff --git a/resources/gardens/garden_01.tscn b/resources/gardens/garden_01.tscn index 432ef532..bd19c18c 100644 --- a/resources/gardens/garden_01.tscn +++ b/resources/gardens/garden_01.tscn @@ -1,19 +1,19 @@ -[gd_scene format=3] +[gd_scene format=3 uid="uid://c6b4rj4fdppum"] [ext_resource type="Script" uid="uid://ch5h4p1o54whq" path="res://resources/gardens/garden.gd" id="1_5owem"] [ext_resource type="Texture2D" uid="uid://d26hapg1hf8a6" path="res://assets/gardens/gardens/garden_01.png" id="3_p7iv3"] [ext_resource type="PackedScene" uid="uid://delcgui3v0eek" path="res://sources/lesson_screen/lesson_button.tscn" id="4_epm30"] [ext_resource type="Texture2D" uid="uid://bfqwlmmliem8f" path="res://assets/gardens/jellyfish.png" id="jellyfish_tex"] -[ext_resource type="Texture2D" uid="uid://dcekseb1b3ruw" path="res://assets/gardens/plants/garden_plant_01.png" id="plant_01"] -[ext_resource type="Texture2D" uid="uid://clkr31osbqs7u" path="res://assets/gardens/plants/garden_plant_02.png" id="plant_02"] -[ext_resource type="Texture2D" uid="uid://dgssb0oonuqku" path="res://assets/gardens/plants/garden_plant_03.png" id="plant_03"] -[ext_resource type="Texture2D" uid="uid://bqp1nkk53y1is" path="res://assets/gardens/plants/garden_plant_04.png" id="plant_04"] -[ext_resource type="Texture2D" uid="uid://dvxnktx1wiyxp" path="res://assets/gardens/plants/garden_plant_05.png" id="plant_05"] -[ext_resource type="Texture2D" uid="uid://f2arml2f4b8p" path="res://assets/gardens/plants/garden_plant_06.png" id="plant_06"] -[ext_resource type="Texture2D" uid="uid://dufnm3bkfe5yv" path="res://assets/gardens/plants/garden_plant_07.png" id="plant_07"] -[ext_resource type="Texture2D" uid="uid://dt2a0dea0hv0c" path="res://assets/gardens/plants/garden_plant_08.png" id="plant_08"] +[ext_resource type="Texture2D" uid="uid://dcekseb1b3ruw" path="res://assets/gardens/victory_assets/victory_asset_plant_01.png" id="plant_01"] +[ext_resource type="Texture2D" uid="uid://clkr31osbqs7u" path="res://assets/gardens/victory_assets/victory_asset_plant_02.png" id="plant_02"] +[ext_resource type="Texture2D" uid="uid://dgssb0oonuqku" path="res://assets/gardens/victory_assets/victory_asset_fish_01.png" id="plant_03"] +[ext_resource type="Texture2D" uid="uid://bqp1nkk53y1is" path="res://assets/gardens/victory_assets/victory_asset_plant_03.png" id="plant_04"] +[ext_resource type="Texture2D" uid="uid://dvxnktx1wiyxp" path="res://assets/gardens/victory_assets/victory_asset_bubbles_01.png" id="plant_05"] +[ext_resource type="Texture2D" uid="uid://f2arml2f4b8p" path="res://assets/gardens/victory_assets/victory_asset_plant_04.png" id="plant_06"] +[ext_resource type="Texture2D" uid="uid://dufnm3bkfe5yv" path="res://assets/gardens/victory_assets/victory_asset_plant_05.png" id="plant_07"] +[ext_resource type="Texture2D" uid="uid://dt2a0dea0hv0c" path="res://assets/gardens/victory_assets/victory_asset_fish_02.png" id="plant_08"] -[node name="Garden" type="Control"] +[node name="Garden" type="Control" unique_id=229113687] custom_minimum_size = Vector2(2400, 2.08165e-12) layout_mode = 3 anchors_preset = 15 @@ -29,7 +29,7 @@ unlocked_lesson_text = Color(0.607843, 0.890196, 0.917647, 1) completed_lesson = Color(0.607843, 0.890196, 0.917647, 1) completed_lesson_text = Color(0.0392157, 0.333333, 0.356863, 1) -[node name="Background" type="TextureRect" parent="."] +[node name="Background" type="TextureRect" parent="." unique_id=1905044868] unique_name_in_owner = true modulate = Color(0.0901961, 0.427451, 0.470588, 1) layout_mode = 0 @@ -41,7 +41,8 @@ mouse_filter = 2 texture = ExtResource("3_p7iv3") expand_mode = 1 -[node name="Plants" type="Control" parent="."] +[node name="Victory_Assets" type="Control" parent="." unique_id=1176691180] +unique_name_in_owner = true layout_mode = 1 anchors_preset = 15 anchor_right = 1.0 @@ -50,7 +51,7 @@ grow_horizontal = 2 grow_vertical = 2 mouse_filter = 2 -[node name="Plant1" type="TextureRect" parent="Plants"] +[node name="Victory_Asset_01" type="TextureRect" parent="Victory_Assets" unique_id=1312910041] modulate = Color(0.0392157, 0.333333, 0.356863, 1) layout_mode = 0 offset_left = 395.0 @@ -62,7 +63,7 @@ texture = ExtResource("plant_01") expand_mode = 1 stretch_mode = 5 -[node name="Plant2" type="TextureRect" parent="Plants"] +[node name="Victory_Asset_02" type="TextureRect" parent="Victory_Assets" unique_id=460994140] modulate = Color(0.0392157, 0.333333, 0.356863, 1) layout_mode = 0 offset_left = 574.0 @@ -74,7 +75,7 @@ texture = ExtResource("plant_02") expand_mode = 1 stretch_mode = 5 -[node name="Plant3" type="TextureRect" parent="Plants"] +[node name="Victory_Asset_03" type="TextureRect" parent="Victory_Assets" unique_id=780672007] modulate = Color(0.0392157, 0.333333, 0.356863, 1) layout_mode = 0 offset_left = 1178.0 @@ -86,7 +87,7 @@ texture = ExtResource("plant_03") expand_mode = 1 stretch_mode = 5 -[node name="Plant4" type="TextureRect" parent="Plants"] +[node name="Victory_Asset_04" type="TextureRect" parent="Victory_Assets" unique_id=251444828] modulate = Color(0.0392157, 0.333333, 0.356863, 1) layout_mode = 0 offset_left = 864.0 @@ -98,7 +99,7 @@ texture = ExtResource("plant_04") expand_mode = 1 stretch_mode = 5 -[node name="Plant5" type="TextureRect" parent="Plants"] +[node name="Victory_Asset_05" type="TextureRect" parent="Victory_Assets" unique_id=338325053] modulate = Color(0.0392157, 0.333333, 0.356863, 1) layout_mode = 0 offset_left = 744.0 @@ -110,7 +111,7 @@ texture = ExtResource("plant_05") expand_mode = 1 stretch_mode = 5 -[node name="Plant6" type="TextureRect" parent="Plants"] +[node name="Victory_Asset_06" type="TextureRect" parent="Victory_Assets" unique_id=441814129] modulate = Color(0.0392157, 0.333333, 0.356863, 1) layout_mode = 0 offset_left = 1742.0 @@ -122,7 +123,7 @@ texture = ExtResource("plant_06") expand_mode = 1 stretch_mode = 5 -[node name="Plant7" type="TextureRect" parent="Plants"] +[node name="Victory_Asset_07" type="TextureRect" parent="Victory_Assets" unique_id=1628951623] modulate = Color(0.0392157, 0.333333, 0.356863, 1) layout_mode = 0 offset_left = 880.0 @@ -134,7 +135,7 @@ texture = ExtResource("plant_07") expand_mode = 1 stretch_mode = 5 -[node name="Plant8" type="TextureRect" parent="Plants"] +[node name="Victory_Asset_08" type="TextureRect" parent="Victory_Assets" unique_id=1795730999] modulate = Color(0.0392157, 0.333333, 0.356863, 1) layout_mode = 0 offset_left = 1122.0 @@ -146,7 +147,7 @@ texture = ExtResource("plant_08") expand_mode = 1 stretch_mode = 5 -[node name="Buttons" type="Control" parent="."] +[node name="Buttons" type="Control" parent="." unique_id=345562197] layout_mode = 1 anchors_preset = 15 anchor_right = 1.0 @@ -155,7 +156,7 @@ grow_horizontal = 2 grow_vertical = 2 mouse_filter = 2 -[node name="Slot1" parent="Buttons" instance=ExtResource("4_epm30")] +[node name="Slot1" parent="Buttons" unique_id=180067904 instance=ExtResource("4_epm30")] layout_mode = 0 offset_left = 584.0 offset_top = 1066.0 @@ -163,7 +164,7 @@ offset_right = 824.0 offset_bottom = 1306.0 pivot_offset = Vector2(120, 120) -[node name="Slot2" parent="Buttons" instance=ExtResource("4_epm30")] +[node name="Slot2" parent="Buttons" unique_id=226995512 instance=ExtResource("4_epm30")] layout_mode = 0 offset_left = 867.0 offset_top = 880.0 @@ -171,7 +172,7 @@ offset_right = 1107.0 offset_bottom = 1120.0 pivot_offset = Vector2(120, 120) -[node name="Slot3" parent="Buttons" instance=ExtResource("4_epm30")] +[node name="Slot3" parent="Buttons" unique_id=799562597 instance=ExtResource("4_epm30")] layout_mode = 0 offset_left = 1170.0 offset_top = 800.0 @@ -179,7 +180,7 @@ offset_right = 1410.0 offset_bottom = 1040.0 pivot_offset = Vector2(120, 120) -[node name="Slot4" parent="Buttons" instance=ExtResource("4_epm30")] +[node name="Slot4" parent="Buttons" unique_id=1706300394 instance=ExtResource("4_epm30")] layout_mode = 0 offset_left = 1445.0 offset_top = 628.0 @@ -187,7 +188,7 @@ offset_right = 1685.0 offset_bottom = 868.0 pivot_offset = Vector2(120, 120) -[node name="Slot5" parent="Buttons" instance=ExtResource("4_epm30")] +[node name="Slot5" parent="Buttons" unique_id=1420840664 instance=ExtResource("4_epm30")] layout_mode = 0 offset_left = 1744.0 offset_top = 478.0 @@ -195,7 +196,7 @@ offset_right = 1984.0 offset_bottom = 718.0 pivot_offset = Vector2(120, 120) -[node name="Jellyfish" type="TextureRect" parent="."] +[node name="Jellyfish" type="TextureRect" parent="." unique_id=1416633720] layout_mode = 0 offset_left = 1511.0 offset_top = 32.0 diff --git a/resources/gardens/garden_02.tscn b/resources/gardens/garden_02.tscn index bfcd3bff..269dfe36 100644 --- a/resources/gardens/garden_02.tscn +++ b/resources/gardens/garden_02.tscn @@ -1,17 +1,17 @@ [gd_scene format=3 uid="uid://btfvuniqgiddp"] [ext_resource type="Script" uid="uid://ch5h4p1o54whq" path="res://resources/gardens/garden.gd" id="1_5owem"] -[ext_resource type="Texture2D" uid="uid://d26hapg1hf8a6" path="res://assets/gardens/gardens/garden_01.png" id="3_p7iv3"] +[ext_resource type="Texture2D" uid="uid://4wt50lu3cwbl" path="res://assets/gardens/gardens/garden_02.png" id="2_v4g1g"] +[ext_resource type="Texture2D" uid="uid://dro75vltqiq6j" path="res://assets/gardens/victory_assets/victory_asset_plant_07.png" id="3_b2jov"] +[ext_resource type="Texture2D" uid="uid://gm5x5p2f07rh" path="res://assets/gardens/victory_assets/victory_asset_plant_10.png" id="4_7vcey"] [ext_resource type="PackedScene" uid="uid://delcgui3v0eek" path="res://sources/lesson_screen/lesson_button.tscn" id="4_epm30"] -[ext_resource type="Texture2D" uid="uid://bfqwlmmliem8f" path="res://assets/gardens/jellyfish.png" id="jellyfish_tex"] -[ext_resource type="Texture2D" uid="uid://dcekseb1b3ruw" path="res://assets/gardens/plants/garden_plant_01.png" id="plant_01"] -[ext_resource type="Texture2D" uid="uid://clkr31osbqs7u" path="res://assets/gardens/plants/garden_plant_02.png" id="plant_02"] -[ext_resource type="Texture2D" uid="uid://dgssb0oonuqku" path="res://assets/gardens/plants/garden_plant_03.png" id="plant_03"] -[ext_resource type="Texture2D" uid="uid://bqp1nkk53y1is" path="res://assets/gardens/plants/garden_plant_04.png" id="plant_04"] -[ext_resource type="Texture2D" uid="uid://dvxnktx1wiyxp" path="res://assets/gardens/plants/garden_plant_05.png" id="plant_05"] -[ext_resource type="Texture2D" uid="uid://f2arml2f4b8p" path="res://assets/gardens/plants/garden_plant_06.png" id="plant_06"] -[ext_resource type="Texture2D" uid="uid://dufnm3bkfe5yv" path="res://assets/gardens/plants/garden_plant_07.png" id="plant_07"] -[ext_resource type="Texture2D" uid="uid://dt2a0dea0hv0c" path="res://assets/gardens/plants/garden_plant_08.png" id="plant_08"] +[ext_resource type="Texture2D" uid="uid://blaltndbcv2yq" path="res://assets/gardens/victory_assets/victory_asset_plant_08.png" id="6_4i3vl"] +[ext_resource type="Texture2D" uid="uid://co6vu63bybpnc" path="res://assets/gardens/victory_assets/victory_asset_plant_09.png" id="7_vujr1"] +[ext_resource type="Texture2D" uid="uid://bv510d5r4dn82" path="res://assets/gardens/victory_assets/victory_asset_fragon_fly_01.png" id="8_556ma"] +[ext_resource type="Texture2D" uid="uid://dckd1xhcdf2ie" path="res://assets/gardens/victory_assets/victory_asset_plant_06.png" id="9_vwhyb"] +[ext_resource type="Texture2D" uid="uid://bpxc4vhri16pd" path="res://assets/gardens/victory_assets/victory_asset_pearl_01.png" id="10_v4g1g"] +[ext_resource type="Texture2D" uid="uid://bsw6v8ix7bb2s" path="res://assets/gardens/turtle.png" id="12_v4g1g"] +[ext_resource type="Texture2D" uid="uid://dvxnktx1wiyxp" path="res://assets/gardens/victory_assets/victory_asset_bubbles_01.png" id="plant_05"] [node name="Garden" type="Control" unique_id=167073905] custom_minimum_size = Vector2(2400, 2.08165e-12) @@ -38,10 +38,11 @@ offset_top = 50.0 offset_right = 2050.0 offset_bottom = 1750.0 mouse_filter = 2 -texture = ExtResource("3_p7iv3") +texture = ExtResource("2_v4g1g") expand_mode = 1 -[node name="Plants" type="Control" parent="." unique_id=787934313] +[node name="Victory_Assets" type="Control" parent="." unique_id=787934313] +unique_name_in_owner = true layout_mode = 1 anchors_preset = 15 anchor_right = 1.0 @@ -50,99 +51,100 @@ grow_horizontal = 2 grow_vertical = 2 mouse_filter = 2 -[node name="Plant1" type="TextureRect" parent="Plants" unique_id=1278004645] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) +[node name="Victory_Asset_01" type="TextureRect" parent="Victory_Assets" unique_id=1278004645] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) layout_mode = 0 -offset_left = 395.0 -offset_top = 475.0 -offset_right = 515.0 -offset_bottom = 1425.0 +offset_left = 761.0 +offset_top = 1263.0 +offset_right = 939.0 +offset_bottom = 1575.0 mouse_filter = 2 -texture = ExtResource("plant_01") +texture = ExtResource("3_b2jov") expand_mode = 1 stretch_mode = 5 -[node name="Plant2" type="TextureRect" parent="Plants" unique_id=1333561566] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) +[node name="Victory_Asset_02" type="TextureRect" parent="Victory_Assets" unique_id=1525586982] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) layout_mode = 0 -offset_left = 574.0 -offset_top = 1322.0 -offset_right = 744.0 -offset_bottom = 1592.0 -mouse_filter = 2 -texture = ExtResource("plant_02") -expand_mode = 1 -stretch_mode = 5 - -[node name="Plant3" type="TextureRect" parent="Plants" unique_id=628479663] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) -layout_mode = 0 -offset_left = 1178.0 -offset_top = 1058.0 -offset_right = 1618.0 +offset_left = 1043.0 +offset_top = 1142.0 +offset_right = 1157.0 offset_bottom = 1388.0 -mouse_filter = 2 -texture = ExtResource("plant_03") -expand_mode = 1 -stretch_mode = 5 - -[node name="Plant4" type="TextureRect" parent="Plants" unique_id=1131468365] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) -layout_mode = 0 -offset_left = 864.0 -offset_top = 308.0 -offset_right = 1084.0 -offset_bottom = 628.0 -mouse_filter = 2 -texture = ExtResource("plant_04") -expand_mode = 1 -stretch_mode = 5 - -[node name="Plant5" type="TextureRect" parent="Plants" unique_id=1227508897] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) -layout_mode = 0 -offset_left = 744.0 -offset_top = 688.0 -offset_right = 889.0 -offset_bottom = 998.0 +rotation = 0.2443461 mouse_filter = 2 texture = ExtResource("plant_05") expand_mode = 1 stretch_mode = 5 -[node name="Plant6" type="TextureRect" parent="Plants" unique_id=2098937064] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) +[node name="Victory_Asset_03" type="TextureRect" parent="Victory_Assets" unique_id=2071114773] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) layout_mode = 0 -offset_left = 1742.0 -offset_top = 762.0 -offset_right = 1927.0 -offset_bottom = 1077.0 +offset_left = 616.0 +offset_top = 648.0 +offset_right = 778.0 +offset_bottom = 812.0 mouse_filter = 2 -texture = ExtResource("plant_06") +texture = ExtResource("4_7vcey") expand_mode = 1 stretch_mode = 5 -[node name="Plant7" type="TextureRect" parent="Plants" unique_id=445560075] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) +[node name="Victory_Asset_04" type="TextureRect" parent="Victory_Assets" unique_id=1578211500] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) layout_mode = 0 -offset_left = 880.0 -offset_top = 1172.0 -offset_right = 1010.0 -offset_bottom = 1592.0 +offset_left = 907.0 +offset_top = 275.0 +offset_right = 1233.0 +offset_bottom = 599.0 mouse_filter = 2 -texture = ExtResource("plant_07") +texture = ExtResource("6_4i3vl") expand_mode = 1 stretch_mode = 5 -[node name="Plant8" type="TextureRect" parent="Plants" unique_id=1417791778] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) +[node name="Victory_Asset_05" type="TextureRect" parent="Victory_Assets" unique_id=520271408] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) layout_mode = 0 -offset_left = 1122.0 -offset_top = 288.0 -offset_right = 1472.0 -offset_bottom = 638.0 +offset_left = 1199.0 +offset_top = 1279.0 +offset_right = 1409.0 +offset_bottom = 1629.0 mouse_filter = 2 -texture = ExtResource("plant_08") +texture = ExtResource("7_vujr1") +expand_mode = 1 +stretch_mode = 5 + +[node name="Victory_Asset_06" type="TextureRect" parent="Victory_Assets" unique_id=213526714] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) +layout_mode = 0 +offset_left = 1337.0 +offset_top = 441.0 +offset_right = 1591.0 +offset_bottom = 563.0 +mouse_filter = 2 +texture = ExtResource("8_556ma") +expand_mode = 1 +stretch_mode = 5 + +[node name="Victory_Asset_07" type="TextureRect" parent="Victory_Assets" unique_id=1466685334] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) +layout_mode = 0 +offset_left = 1660.0 +offset_top = 526.0 +offset_right = 1978.0 +offset_bottom = 866.0 +mouse_filter = 2 +texture = ExtResource("9_vwhyb") +expand_mode = 1 +stretch_mode = 5 + +[node name="Victory_Asset_08" type="TextureRect" parent="Victory_Assets" unique_id=2004645372] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) +layout_mode = 0 +offset_left = 1531.0 +offset_top = 1278.0 +offset_right = 1707.0 +offset_bottom = 1460.0 +mouse_filter = 2 +texture = ExtResource("10_v4g1g") expand_mode = 1 stretch_mode = 5 @@ -157,51 +159,63 @@ mouse_filter = 2 [node name="Slot1" parent="Buttons" unique_id=1361620593 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 584.0 -offset_top = 1066.0 -offset_right = 824.0 -offset_bottom = 1306.0 +offset_left = 494.0 +offset_top = 1052.0 +offset_right = 734.0 +offset_bottom = 1292.0 pivot_offset = Vector2(120, 120) [node name="Slot2" parent="Buttons" unique_id=1025579258 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 867.0 -offset_top = 880.0 -offset_right = 1107.0 -offset_bottom = 1120.0 +offset_left = 762.0 +offset_top = 887.0 +offset_right = 1002.0 +offset_bottom = 1127.0 pivot_offset = Vector2(120, 120) [node name="Slot3" parent="Buttons" unique_id=353688519 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 1170.0 -offset_top = 800.0 -offset_right = 1410.0 -offset_bottom = 1040.0 +offset_left = 1066.0 +offset_top = 810.0 +offset_right = 1306.0 +offset_bottom = 1050.0 pivot_offset = Vector2(120, 120) [node name="Slot4" parent="Buttons" unique_id=1536126098 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 1445.0 -offset_top = 628.0 -offset_right = 1685.0 -offset_bottom = 868.0 +offset_left = 1405.0 +offset_top = 885.0 +offset_right = 1645.0 +offset_bottom = 1125.0 pivot_offset = Vector2(120, 120) [node name="Slot5" parent="Buttons" unique_id=960033946 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 1744.0 -offset_top = 478.0 -offset_right = 1984.0 -offset_bottom = 718.0 +offset_left = 1720.0 +offset_top = 1020.0 +offset_right = 1960.0 +offset_bottom = 1260.0 pivot_offset = Vector2(120, 120) -[node name="Jellyfish" type="TextureRect" parent="." unique_id=518902024] +[node name="Turtle_01" type="TextureRect" parent="." unique_id=518902024] layout_mode = 0 -offset_left = 1511.0 -offset_top = 32.0 -offset_right = 1791.0 -offset_bottom = 512.0 +offset_left = 500.0 +offset_top = 155.0 +offset_right = 800.0 +offset_bottom = 455.0 mouse_filter = 2 -texture = ExtResource("jellyfish_tex") +texture = ExtResource("12_v4g1g") +expand_mode = 1 +stretch_mode = 5 + +[node name="Turtle_02" type="TextureRect" parent="." unique_id=1563614410] +layout_mode = 0 +offset_left = 381.0 +offset_top = 439.0 +offset_right = 531.0 +offset_bottom = 589.0 +rotation = -0.2443461 +mouse_filter = 2 +texture = ExtResource("12_v4g1g") expand_mode = 1 stretch_mode = 5 diff --git a/resources/gardens/garden_03.tscn b/resources/gardens/garden_03.tscn index 26c48c31..d7506e24 100644 --- a/resources/gardens/garden_03.tscn +++ b/resources/gardens/garden_03.tscn @@ -1,19 +1,19 @@ -[gd_scene format=3] +[gd_scene format=3 uid="uid://fl3fleqx7r0k"] -[ext_resource type="Script" uid="uid://ch5h4p1o54whq" path="res://resources/gardens/garden.gd" id="1_5owem"] -[ext_resource type="Texture2D" uid="uid://d26hapg1hf8a6" path="res://assets/gardens/gardens/garden_01.png" id="3_p7iv3"] -[ext_resource type="PackedScene" uid="uid://delcgui3v0eek" path="res://sources/lesson_screen/lesson_button.tscn" id="4_epm30"] -[ext_resource type="Texture2D" uid="uid://bfqwlmmliem8f" path="res://assets/gardens/jellyfish.png" id="jellyfish_tex"] -[ext_resource type="Texture2D" uid="uid://dcekseb1b3ruw" path="res://assets/gardens/plants/garden_plant_01.png" id="plant_01"] -[ext_resource type="Texture2D" uid="uid://clkr31osbqs7u" path="res://assets/gardens/plants/garden_plant_02.png" id="plant_02"] -[ext_resource type="Texture2D" uid="uid://dgssb0oonuqku" path="res://assets/gardens/plants/garden_plant_03.png" id="plant_03"] -[ext_resource type="Texture2D" uid="uid://bqp1nkk53y1is" path="res://assets/gardens/plants/garden_plant_04.png" id="plant_04"] -[ext_resource type="Texture2D" uid="uid://dvxnktx1wiyxp" path="res://assets/gardens/plants/garden_plant_05.png" id="plant_05"] -[ext_resource type="Texture2D" uid="uid://f2arml2f4b8p" path="res://assets/gardens/plants/garden_plant_06.png" id="plant_06"] -[ext_resource type="Texture2D" uid="uid://dufnm3bkfe5yv" path="res://assets/gardens/plants/garden_plant_07.png" id="plant_07"] -[ext_resource type="Texture2D" uid="uid://dt2a0dea0hv0c" path="res://assets/gardens/plants/garden_plant_08.png" id="plant_08"] +[ext_resource type="Script" uid="uid://ch5h4p1o54whq" path="res://resources/gardens/garden.gd" id="1_bwhap"] +[ext_resource type="Texture2D" uid="uid://4wt50lu3cwbl" path="res://assets/gardens/gardens/garden_02.png" id="2_qvgts"] +[ext_resource type="Texture2D" uid="uid://dro75vltqiq6j" path="res://assets/gardens/victory_assets/victory_asset_plant_07.png" id="3_o6shc"] +[ext_resource type="Texture2D" uid="uid://dvxnktx1wiyxp" path="res://assets/gardens/victory_assets/victory_asset_bubbles_01.png" id="4_0k6f8"] +[ext_resource type="Texture2D" uid="uid://gm5x5p2f07rh" path="res://assets/gardens/victory_assets/victory_asset_plant_10.png" id="5_7ro1k"] +[ext_resource type="Texture2D" uid="uid://blaltndbcv2yq" path="res://assets/gardens/victory_assets/victory_asset_plant_08.png" id="6_ltnqc"] +[ext_resource type="Texture2D" uid="uid://co6vu63bybpnc" path="res://assets/gardens/victory_assets/victory_asset_plant_09.png" id="7_l77x6"] +[ext_resource type="Texture2D" uid="uid://bv510d5r4dn82" path="res://assets/gardens/victory_assets/victory_asset_fragon_fly_01.png" id="8_1k62u"] +[ext_resource type="Texture2D" uid="uid://dckd1xhcdf2ie" path="res://assets/gardens/victory_assets/victory_asset_plant_06.png" id="9_5w5k7"] +[ext_resource type="Texture2D" uid="uid://bpxc4vhri16pd" path="res://assets/gardens/victory_assets/victory_asset_pearl_01.png" id="10_j6iij"] +[ext_resource type="PackedScene" uid="uid://delcgui3v0eek" path="res://sources/lesson_screen/lesson_button.tscn" id="11_odjw4"] +[ext_resource type="Texture2D" uid="uid://bsw6v8ix7bb2s" path="res://assets/gardens/turtle.png" id="12_a7ci1"] -[node name="Garden" type="Control"] +[node name="Garden" type="Control" unique_id=167073905] custom_minimum_size = Vector2(2400, 2.08165e-12) layout_mode = 3 anchors_preset = 15 @@ -22,26 +22,27 @@ anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 mouse_filter = 2 -script = ExtResource("1_5owem") -title = "Ant Garden" -unlocked_lesson = Color(0.521569, 0.0313725, 0.403922, 1) -unlocked_lesson_text = Color(0.921569, 0.752941, 0.870588, 1) -completed_lesson = Color(0.921569, 0.752941, 0.870588, 1) -completed_lesson_text = Color(0.521569, 0.0313725, 0.403922, 1) +script = ExtResource("1_bwhap") +title = "Purple Turtle Garden" +unlocked_lesson = Color(0.52156866, 0.03137255, 0.40392157, 1) +unlocked_lesson_text = Color(0.92156863, 0.7529412, 0.87058824, 1) +completed_lesson = Color(0.92156863, 0.7529412, 0.87058824, 1) +completed_lesson_text = Color(0.52156866, 0.03137255, 0.40392157, 1) -[node name="Background" type="TextureRect" parent="."] +[node name="Background" type="TextureRect" parent="." unique_id=1058030897] unique_name_in_owner = true -modulate = Color(0.831373, 0.290196, 0.701961, 1) +modulate = Color(0.83137256, 0.2901961, 0.7019608, 1) layout_mode = 0 offset_left = 350.0 offset_top = 50.0 offset_right = 2050.0 offset_bottom = 1750.0 mouse_filter = 2 -texture = ExtResource("3_p7iv3") +texture = ExtResource("2_qvgts") expand_mode = 1 -[node name="Plants" type="Control" parent="."] +[node name="Victory_Assets" type="Control" parent="." unique_id=787934313] +unique_name_in_owner = true layout_mode = 1 anchors_preset = 15 anchor_right = 1.0 @@ -50,103 +51,104 @@ grow_horizontal = 2 grow_vertical = 2 mouse_filter = 2 -[node name="Plant1" type="TextureRect" parent="Plants"] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) +[node name="Victory_Asset_01" type="TextureRect" parent="Victory_Assets" unique_id=1278004645] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) layout_mode = 0 -offset_left = 395.0 -offset_top = 475.0 -offset_right = 515.0 -offset_bottom = 1425.0 +offset_left = 761.0 +offset_top = 1263.0 +offset_right = 939.0 +offset_bottom = 1575.0 mouse_filter = 2 -texture = ExtResource("plant_01") +texture = ExtResource("3_o6shc") expand_mode = 1 stretch_mode = 5 -[node name="Plant2" type="TextureRect" parent="Plants"] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) +[node name="Victory_Asset_02" type="TextureRect" parent="Victory_Assets" unique_id=1525586982] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) layout_mode = 0 -offset_left = 574.0 -offset_top = 1322.0 -offset_right = 744.0 -offset_bottom = 1592.0 -mouse_filter = 2 -texture = ExtResource("plant_02") -expand_mode = 1 -stretch_mode = 5 - -[node name="Plant3" type="TextureRect" parent="Plants"] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) -layout_mode = 0 -offset_left = 1178.0 -offset_top = 1058.0 -offset_right = 1618.0 +offset_left = 1043.0 +offset_top = 1142.0 +offset_right = 1157.0 offset_bottom = 1388.0 +rotation = 0.2443461 mouse_filter = 2 -texture = ExtResource("plant_03") +texture = ExtResource("4_0k6f8") expand_mode = 1 stretch_mode = 5 -[node name="Plant4" type="TextureRect" parent="Plants"] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) +[node name="Victory_Asset_03" type="TextureRect" parent="Victory_Assets" unique_id=2071114773] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) layout_mode = 0 -offset_left = 864.0 -offset_top = 308.0 -offset_right = 1084.0 -offset_bottom = 628.0 +offset_left = 616.0 +offset_top = 648.0 +offset_right = 778.0 +offset_bottom = 812.0 mouse_filter = 2 -texture = ExtResource("plant_04") +texture = ExtResource("5_7ro1k") expand_mode = 1 stretch_mode = 5 -[node name="Plant5" type="TextureRect" parent="Plants"] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) +[node name="Victory_Asset_04" type="TextureRect" parent="Victory_Assets" unique_id=1578211500] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) layout_mode = 0 -offset_left = 744.0 -offset_top = 688.0 -offset_right = 889.0 -offset_bottom = 998.0 +offset_left = 907.0 +offset_top = 275.0 +offset_right = 1233.0 +offset_bottom = 599.0 mouse_filter = 2 -texture = ExtResource("plant_05") +texture = ExtResource("6_ltnqc") expand_mode = 1 stretch_mode = 5 -[node name="Plant6" type="TextureRect" parent="Plants"] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) +[node name="Victory_Asset_05" type="TextureRect" parent="Victory_Assets" unique_id=520271408] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) layout_mode = 0 -offset_left = 1742.0 -offset_top = 762.0 -offset_right = 1927.0 -offset_bottom = 1077.0 +offset_left = 1199.0 +offset_top = 1279.0 +offset_right = 1409.0 +offset_bottom = 1629.0 mouse_filter = 2 -texture = ExtResource("plant_06") +texture = ExtResource("7_l77x6") expand_mode = 1 stretch_mode = 5 -[node name="Plant7" type="TextureRect" parent="Plants"] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) +[node name="Victory_Asset_06" type="TextureRect" parent="Victory_Assets" unique_id=213526714] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) layout_mode = 0 -offset_left = 880.0 -offset_top = 1172.0 -offset_right = 1010.0 -offset_bottom = 1592.0 +offset_left = 1337.0 +offset_top = 441.0 +offset_right = 1591.0 +offset_bottom = 563.0 mouse_filter = 2 -texture = ExtResource("plant_07") +texture = ExtResource("8_1k62u") expand_mode = 1 stretch_mode = 5 -[node name="Plant8" type="TextureRect" parent="Plants"] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) +[node name="Victory_Asset_07" type="TextureRect" parent="Victory_Assets" unique_id=1466685334] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) layout_mode = 0 -offset_left = 1122.0 -offset_top = 288.0 -offset_right = 1472.0 -offset_bottom = 638.0 +offset_left = 1660.0 +offset_top = 526.0 +offset_right = 1978.0 +offset_bottom = 866.0 mouse_filter = 2 -texture = ExtResource("plant_08") +texture = ExtResource("9_5w5k7") expand_mode = 1 stretch_mode = 5 -[node name="Buttons" type="Control" parent="."] +[node name="Victory_Asset_08" type="TextureRect" parent="Victory_Assets" unique_id=2004645372] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) +layout_mode = 0 +offset_left = 1531.0 +offset_top = 1278.0 +offset_right = 1707.0 +offset_bottom = 1460.0 +mouse_filter = 2 +texture = ExtResource("10_j6iij") +expand_mode = 1 +stretch_mode = 5 + +[node name="Buttons" type="Control" parent="." unique_id=1964597] layout_mode = 1 anchors_preset = 15 anchor_right = 1.0 @@ -155,53 +157,65 @@ grow_horizontal = 2 grow_vertical = 2 mouse_filter = 2 -[node name="Slot1" parent="Buttons" instance=ExtResource("4_epm30")] +[node name="Slot1" parent="Buttons" unique_id=1361620593 instance=ExtResource("11_odjw4")] layout_mode = 0 -offset_left = 584.0 -offset_top = 1066.0 -offset_right = 824.0 -offset_bottom = 1306.0 +offset_left = 494.0 +offset_top = 1052.0 +offset_right = 734.0 +offset_bottom = 1292.0 pivot_offset = Vector2(120, 120) -[node name="Slot2" parent="Buttons" instance=ExtResource("4_epm30")] +[node name="Slot2" parent="Buttons" unique_id=1025579258 instance=ExtResource("11_odjw4")] layout_mode = 0 -offset_left = 867.0 -offset_top = 880.0 -offset_right = 1107.0 -offset_bottom = 1120.0 +offset_left = 762.0 +offset_top = 887.0 +offset_right = 1002.0 +offset_bottom = 1127.0 pivot_offset = Vector2(120, 120) -[node name="Slot3" parent="Buttons" instance=ExtResource("4_epm30")] +[node name="Slot3" parent="Buttons" unique_id=353688519 instance=ExtResource("11_odjw4")] layout_mode = 0 -offset_left = 1170.0 -offset_top = 800.0 -offset_right = 1410.0 -offset_bottom = 1040.0 +offset_left = 1066.0 +offset_top = 810.0 +offset_right = 1306.0 +offset_bottom = 1050.0 pivot_offset = Vector2(120, 120) -[node name="Slot4" parent="Buttons" instance=ExtResource("4_epm30")] +[node name="Slot4" parent="Buttons" unique_id=1536126098 instance=ExtResource("11_odjw4")] layout_mode = 0 -offset_left = 1445.0 -offset_top = 628.0 -offset_right = 1685.0 -offset_bottom = 868.0 +offset_left = 1405.0 +offset_top = 885.0 +offset_right = 1645.0 +offset_bottom = 1125.0 pivot_offset = Vector2(120, 120) -[node name="Slot5" parent="Buttons" instance=ExtResource("4_epm30")] +[node name="Slot5" parent="Buttons" unique_id=960033946 instance=ExtResource("11_odjw4")] layout_mode = 0 -offset_left = 1744.0 -offset_top = 478.0 -offset_right = 1984.0 -offset_bottom = 718.0 +offset_left = 1720.0 +offset_top = 1020.0 +offset_right = 1960.0 +offset_bottom = 1260.0 pivot_offset = Vector2(120, 120) -[node name="Jellyfish" type="TextureRect" parent="."] +[node name="Turtle_01" type="TextureRect" parent="." unique_id=518902024] layout_mode = 0 -offset_left = 1511.0 -offset_top = 32.0 -offset_right = 1791.0 -offset_bottom = 512.0 +offset_left = 500.0 +offset_top = 155.0 +offset_right = 800.0 +offset_bottom = 455.0 mouse_filter = 2 -texture = ExtResource("jellyfish_tex") +texture = ExtResource("12_a7ci1") +expand_mode = 1 +stretch_mode = 5 + +[node name="Turtle_02" type="TextureRect" parent="." unique_id=1563614410] +layout_mode = 0 +offset_left = 381.0 +offset_top = 439.0 +offset_right = 531.0 +offset_bottom = 589.0 +rotation = -0.2443461 +mouse_filter = 2 +texture = ExtResource("12_a7ci1") expand_mode = 1 stretch_mode = 5 diff --git a/resources/gardens/garden_04.tscn b/resources/gardens/garden_04.tscn index 6e8b2f68..26943790 100644 --- a/resources/gardens/garden_04.tscn +++ b/resources/gardens/garden_04.tscn @@ -1,19 +1,19 @@ -[gd_scene format=3] +[gd_scene format=3 uid="uid://ct6lb3q40fx74"] [ext_resource type="Script" uid="uid://ch5h4p1o54whq" path="res://resources/gardens/garden.gd" id="1_5owem"] -[ext_resource type="Texture2D" uid="uid://d26hapg1hf8a6" path="res://assets/gardens/gardens/garden_01.png" id="3_p7iv3"] +[ext_resource type="Texture2D" uid="uid://4wt50lu3cwbl" path="res://assets/gardens/gardens/garden_02.png" id="2_0vwua"] +[ext_resource type="Texture2D" uid="uid://dro75vltqiq6j" path="res://assets/gardens/victory_assets/victory_asset_plant_07.png" id="3_2bwv2"] [ext_resource type="PackedScene" uid="uid://delcgui3v0eek" path="res://sources/lesson_screen/lesson_button.tscn" id="4_epm30"] -[ext_resource type="Texture2D" uid="uid://bfqwlmmliem8f" path="res://assets/gardens/jellyfish.png" id="jellyfish_tex"] -[ext_resource type="Texture2D" uid="uid://dcekseb1b3ruw" path="res://assets/gardens/plants/garden_plant_01.png" id="plant_01"] -[ext_resource type="Texture2D" uid="uid://clkr31osbqs7u" path="res://assets/gardens/plants/garden_plant_02.png" id="plant_02"] -[ext_resource type="Texture2D" uid="uid://dgssb0oonuqku" path="res://assets/gardens/plants/garden_plant_03.png" id="plant_03"] -[ext_resource type="Texture2D" uid="uid://bqp1nkk53y1is" path="res://assets/gardens/plants/garden_plant_04.png" id="plant_04"] -[ext_resource type="Texture2D" uid="uid://dvxnktx1wiyxp" path="res://assets/gardens/plants/garden_plant_05.png" id="plant_05"] -[ext_resource type="Texture2D" uid="uid://f2arml2f4b8p" path="res://assets/gardens/plants/garden_plant_06.png" id="plant_06"] -[ext_resource type="Texture2D" uid="uid://dufnm3bkfe5yv" path="res://assets/gardens/plants/garden_plant_07.png" id="plant_07"] -[ext_resource type="Texture2D" uid="uid://dt2a0dea0hv0c" path="res://assets/gardens/plants/garden_plant_08.png" id="plant_08"] +[ext_resource type="Texture2D" uid="uid://gm5x5p2f07rh" path="res://assets/gardens/victory_assets/victory_asset_plant_10.png" id="5_fywoy"] +[ext_resource type="Texture2D" uid="uid://blaltndbcv2yq" path="res://assets/gardens/victory_assets/victory_asset_plant_08.png" id="6_c1irj"] +[ext_resource type="Texture2D" uid="uid://co6vu63bybpnc" path="res://assets/gardens/victory_assets/victory_asset_plant_09.png" id="7_ink0e"] +[ext_resource type="Texture2D" uid="uid://bv510d5r4dn82" path="res://assets/gardens/victory_assets/victory_asset_fragon_fly_01.png" id="8_03isd"] +[ext_resource type="Texture2D" uid="uid://dckd1xhcdf2ie" path="res://assets/gardens/victory_assets/victory_asset_plant_06.png" id="9_p1mfm"] +[ext_resource type="Texture2D" uid="uid://bpxc4vhri16pd" path="res://assets/gardens/victory_assets/victory_asset_pearl_01.png" id="10_vnw37"] +[ext_resource type="Texture2D" uid="uid://bsw6v8ix7bb2s" path="res://assets/gardens/turtle.png" id="12_eyxb7"] +[ext_resource type="Texture2D" uid="uid://dvxnktx1wiyxp" path="res://assets/gardens/victory_assets/victory_asset_bubbles_01.png" id="plant_05"] -[node name="Garden" type="Control"] +[node name="Garden" type="Control" unique_id=167073905] custom_minimum_size = Vector2(2400, 2.08165e-12) layout_mode = 3 anchors_preset = 15 @@ -23,25 +23,26 @@ grow_horizontal = 2 grow_vertical = 2 mouse_filter = 2 script = ExtResource("1_5owem") -title = "Crab Garden" -unlocked_lesson = Color(0.74902, 0.278431, 0, 1) -unlocked_lesson_text = Color(1, 0.792157, 0.690196, 1) -completed_lesson = Color(1, 0.792157, 0.690196, 1) -completed_lesson_text = Color(0.74902, 0.278431, 0, 1) +title = "Purple Turtle Garden" +unlocked_lesson = Color(0.345098, 0.266667, 0.490196, 1) +unlocked_lesson_text = Color(0.894118, 0.827451, 0.937255, 1) +completed_lesson = Color(0.894118, 0.827451, 0.937255, 1) +completed_lesson_text = Color(0.345098, 0.266667, 0.490196, 1) -[node name="Background" type="TextureRect" parent="."] +[node name="Background" type="TextureRect" parent="." unique_id=1058030897] unique_name_in_owner = true -modulate = Color(1, 0.498039, 0.2, 1) +modulate = Color(0.454902, 0.352941, 0.647059, 1) layout_mode = 0 offset_left = 350.0 offset_top = 50.0 offset_right = 2050.0 offset_bottom = 1750.0 mouse_filter = 2 -texture = ExtResource("3_p7iv3") +texture = ExtResource("2_0vwua") expand_mode = 1 -[node name="Plants" type="Control" parent="."] +[node name="Victory_Assets" type="Control" parent="." unique_id=787934313] +unique_name_in_owner = true layout_mode = 1 anchors_preset = 15 anchor_right = 1.0 @@ -50,103 +51,104 @@ grow_horizontal = 2 grow_vertical = 2 mouse_filter = 2 -[node name="Plant1" type="TextureRect" parent="Plants"] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) +[node name="Victory_Asset_01" type="TextureRect" parent="Victory_Assets" unique_id=1278004645] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) layout_mode = 0 -offset_left = 395.0 -offset_top = 475.0 -offset_right = 515.0 -offset_bottom = 1425.0 +offset_left = 761.0 +offset_top = 1263.0 +offset_right = 939.0 +offset_bottom = 1575.0 mouse_filter = 2 -texture = ExtResource("plant_01") +texture = ExtResource("3_2bwv2") expand_mode = 1 stretch_mode = 5 -[node name="Plant2" type="TextureRect" parent="Plants"] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) +[node name="Victory_Asset_02" type="TextureRect" parent="Victory_Assets" unique_id=1525586982] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) layout_mode = 0 -offset_left = 574.0 -offset_top = 1322.0 -offset_right = 744.0 -offset_bottom = 1592.0 -mouse_filter = 2 -texture = ExtResource("plant_02") -expand_mode = 1 -stretch_mode = 5 - -[node name="Plant3" type="TextureRect" parent="Plants"] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) -layout_mode = 0 -offset_left = 1178.0 -offset_top = 1058.0 -offset_right = 1618.0 +offset_left = 1043.0 +offset_top = 1142.0 +offset_right = 1157.0 offset_bottom = 1388.0 -mouse_filter = 2 -texture = ExtResource("plant_03") -expand_mode = 1 -stretch_mode = 5 - -[node name="Plant4" type="TextureRect" parent="Plants"] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) -layout_mode = 0 -offset_left = 864.0 -offset_top = 308.0 -offset_right = 1084.0 -offset_bottom = 628.0 -mouse_filter = 2 -texture = ExtResource("plant_04") -expand_mode = 1 -stretch_mode = 5 - -[node name="Plant5" type="TextureRect" parent="Plants"] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) -layout_mode = 0 -offset_left = 744.0 -offset_top = 688.0 -offset_right = 889.0 -offset_bottom = 998.0 +rotation = 0.2443461 mouse_filter = 2 texture = ExtResource("plant_05") expand_mode = 1 stretch_mode = 5 -[node name="Plant6" type="TextureRect" parent="Plants"] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) +[node name="Victory_Asset_03" type="TextureRect" parent="Victory_Assets" unique_id=2071114773] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) layout_mode = 0 -offset_left = 1742.0 -offset_top = 762.0 -offset_right = 1927.0 -offset_bottom = 1077.0 +offset_left = 616.0 +offset_top = 648.0 +offset_right = 778.0 +offset_bottom = 812.0 mouse_filter = 2 -texture = ExtResource("plant_06") +texture = ExtResource("5_fywoy") expand_mode = 1 stretch_mode = 5 -[node name="Plant7" type="TextureRect" parent="Plants"] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) +[node name="Victory_Asset_04" type="TextureRect" parent="Victory_Assets" unique_id=1578211500] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) layout_mode = 0 -offset_left = 880.0 -offset_top = 1172.0 -offset_right = 1010.0 -offset_bottom = 1592.0 +offset_left = 907.0 +offset_top = 275.0 +offset_right = 1233.0 +offset_bottom = 599.0 mouse_filter = 2 -texture = ExtResource("plant_07") +texture = ExtResource("6_c1irj") expand_mode = 1 stretch_mode = 5 -[node name="Plant8" type="TextureRect" parent="Plants"] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) +[node name="Victory_Asset_05" type="TextureRect" parent="Victory_Assets" unique_id=520271408] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) layout_mode = 0 -offset_left = 1122.0 -offset_top = 288.0 -offset_right = 1472.0 -offset_bottom = 638.0 +offset_left = 1199.0 +offset_top = 1279.0 +offset_right = 1409.0 +offset_bottom = 1629.0 mouse_filter = 2 -texture = ExtResource("plant_08") +texture = ExtResource("7_ink0e") expand_mode = 1 stretch_mode = 5 -[node name="Buttons" type="Control" parent="."] +[node name="Victory_Asset_06" type="TextureRect" parent="Victory_Assets" unique_id=213526714] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) +layout_mode = 0 +offset_left = 1337.0 +offset_top = 441.0 +offset_right = 1591.0 +offset_bottom = 563.0 +mouse_filter = 2 +texture = ExtResource("8_03isd") +expand_mode = 1 +stretch_mode = 5 + +[node name="Victory_Asset_07" type="TextureRect" parent="Victory_Assets" unique_id=1466685334] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) +layout_mode = 0 +offset_left = 1660.0 +offset_top = 526.0 +offset_right = 1978.0 +offset_bottom = 866.0 +mouse_filter = 2 +texture = ExtResource("9_p1mfm") +expand_mode = 1 +stretch_mode = 5 + +[node name="Victory_Asset_08" type="TextureRect" parent="Victory_Assets" unique_id=2004645372] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) +layout_mode = 0 +offset_left = 1531.0 +offset_top = 1278.0 +offset_right = 1707.0 +offset_bottom = 1460.0 +mouse_filter = 2 +texture = ExtResource("10_vnw37") +expand_mode = 1 +stretch_mode = 5 + +[node name="Buttons" type="Control" parent="." unique_id=1964597] layout_mode = 1 anchors_preset = 15 anchor_right = 1.0 @@ -155,53 +157,65 @@ grow_horizontal = 2 grow_vertical = 2 mouse_filter = 2 -[node name="Slot1" parent="Buttons" instance=ExtResource("4_epm30")] +[node name="Slot1" parent="Buttons" unique_id=1361620593 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 584.0 -offset_top = 1066.0 -offset_right = 824.0 -offset_bottom = 1306.0 +offset_left = 494.0 +offset_top = 1052.0 +offset_right = 734.0 +offset_bottom = 1292.0 pivot_offset = Vector2(120, 120) -[node name="Slot2" parent="Buttons" instance=ExtResource("4_epm30")] +[node name="Slot2" parent="Buttons" unique_id=1025579258 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 867.0 -offset_top = 880.0 -offset_right = 1107.0 -offset_bottom = 1120.0 +offset_left = 762.0 +offset_top = 887.0 +offset_right = 1002.0 +offset_bottom = 1127.0 pivot_offset = Vector2(120, 120) -[node name="Slot3" parent="Buttons" instance=ExtResource("4_epm30")] +[node name="Slot3" parent="Buttons" unique_id=353688519 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 1170.0 -offset_top = 800.0 -offset_right = 1410.0 -offset_bottom = 1040.0 +offset_left = 1066.0 +offset_top = 810.0 +offset_right = 1306.0 +offset_bottom = 1050.0 pivot_offset = Vector2(120, 120) -[node name="Slot4" parent="Buttons" instance=ExtResource("4_epm30")] +[node name="Slot4" parent="Buttons" unique_id=1536126098 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 1445.0 -offset_top = 628.0 -offset_right = 1685.0 -offset_bottom = 868.0 +offset_left = 1405.0 +offset_top = 885.0 +offset_right = 1645.0 +offset_bottom = 1125.0 pivot_offset = Vector2(120, 120) -[node name="Slot5" parent="Buttons" instance=ExtResource("4_epm30")] +[node name="Slot5" parent="Buttons" unique_id=960033946 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 1744.0 -offset_top = 478.0 -offset_right = 1984.0 -offset_bottom = 718.0 +offset_left = 1720.0 +offset_top = 1020.0 +offset_right = 1960.0 +offset_bottom = 1260.0 pivot_offset = Vector2(120, 120) -[node name="Jellyfish" type="TextureRect" parent="."] +[node name="Turtle_01" type="TextureRect" parent="." unique_id=518902024] layout_mode = 0 -offset_left = 1511.0 -offset_top = 32.0 -offset_right = 1791.0 -offset_bottom = 512.0 +offset_left = 500.0 +offset_top = 155.0 +offset_right = 800.0 +offset_bottom = 455.0 mouse_filter = 2 -texture = ExtResource("jellyfish_tex") +texture = ExtResource("12_eyxb7") +expand_mode = 1 +stretch_mode = 5 + +[node name="Turtle_02" type="TextureRect" parent="." unique_id=1563614410] +layout_mode = 0 +offset_left = 381.0 +offset_top = 439.0 +offset_right = 531.0 +offset_bottom = 589.0 +rotation = -0.2443461 +mouse_filter = 2 +texture = ExtResource("12_eyxb7") expand_mode = 1 stretch_mode = 5 diff --git a/resources/gardens/garden_05.tscn b/resources/gardens/garden_05.tscn index 4100c743..0ddc1315 100644 --- a/resources/gardens/garden_05.tscn +++ b/resources/gardens/garden_05.tscn @@ -1,19 +1,19 @@ -[gd_scene format=3] +[gd_scene format=3 uid="uid://bjs0o30gmhv3l"] [ext_resource type="Script" uid="uid://ch5h4p1o54whq" path="res://resources/gardens/garden.gd" id="1_5owem"] -[ext_resource type="Texture2D" uid="uid://d26hapg1hf8a6" path="res://assets/gardens/gardens/garden_01.png" id="3_p7iv3"] +[ext_resource type="Texture2D" uid="uid://4wt50lu3cwbl" path="res://assets/gardens/gardens/garden_02.png" id="2_0y47p"] +[ext_resource type="Texture2D" uid="uid://dro75vltqiq6j" path="res://assets/gardens/victory_assets/victory_asset_plant_07.png" id="3_fja20"] [ext_resource type="PackedScene" uid="uid://delcgui3v0eek" path="res://sources/lesson_screen/lesson_button.tscn" id="4_epm30"] -[ext_resource type="Texture2D" uid="uid://bfqwlmmliem8f" path="res://assets/gardens/jellyfish.png" id="jellyfish_tex"] -[ext_resource type="Texture2D" uid="uid://dcekseb1b3ruw" path="res://assets/gardens/plants/garden_plant_01.png" id="plant_01"] -[ext_resource type="Texture2D" uid="uid://clkr31osbqs7u" path="res://assets/gardens/plants/garden_plant_02.png" id="plant_02"] -[ext_resource type="Texture2D" uid="uid://dgssb0oonuqku" path="res://assets/gardens/plants/garden_plant_03.png" id="plant_03"] -[ext_resource type="Texture2D" uid="uid://bqp1nkk53y1is" path="res://assets/gardens/plants/garden_plant_04.png" id="plant_04"] -[ext_resource type="Texture2D" uid="uid://dvxnktx1wiyxp" path="res://assets/gardens/plants/garden_plant_05.png" id="plant_05"] -[ext_resource type="Texture2D" uid="uid://f2arml2f4b8p" path="res://assets/gardens/plants/garden_plant_06.png" id="plant_06"] -[ext_resource type="Texture2D" uid="uid://dufnm3bkfe5yv" path="res://assets/gardens/plants/garden_plant_07.png" id="plant_07"] -[ext_resource type="Texture2D" uid="uid://dt2a0dea0hv0c" path="res://assets/gardens/plants/garden_plant_08.png" id="plant_08"] +[ext_resource type="Texture2D" uid="uid://gm5x5p2f07rh" path="res://assets/gardens/victory_assets/victory_asset_plant_10.png" id="5_oapcv"] +[ext_resource type="Texture2D" uid="uid://blaltndbcv2yq" path="res://assets/gardens/victory_assets/victory_asset_plant_08.png" id="6_sjfs7"] +[ext_resource type="Texture2D" uid="uid://co6vu63bybpnc" path="res://assets/gardens/victory_assets/victory_asset_plant_09.png" id="7_se3av"] +[ext_resource type="Texture2D" uid="uid://bv510d5r4dn82" path="res://assets/gardens/victory_assets/victory_asset_fragon_fly_01.png" id="8_r7c56"] +[ext_resource type="Texture2D" uid="uid://dckd1xhcdf2ie" path="res://assets/gardens/victory_assets/victory_asset_plant_06.png" id="9_s6qsy"] +[ext_resource type="Texture2D" uid="uid://bpxc4vhri16pd" path="res://assets/gardens/victory_assets/victory_asset_pearl_01.png" id="10_ph3oc"] +[ext_resource type="Texture2D" uid="uid://bsw6v8ix7bb2s" path="res://assets/gardens/turtle.png" id="12_l37o2"] +[ext_resource type="Texture2D" uid="uid://dvxnktx1wiyxp" path="res://assets/gardens/victory_assets/victory_asset_bubbles_01.png" id="plant_05"] -[node name="Garden" type="Control"] +[node name="Garden" type="Control" unique_id=167073905] custom_minimum_size = Vector2(2400, 2.08165e-12) layout_mode = 3 anchors_preset = 15 @@ -23,25 +23,26 @@ grow_horizontal = 2 grow_vertical = 2 mouse_filter = 2 script = ExtResource("1_5owem") -title = "Yellow Parakeet" -unlocked_lesson = Color(0.701961, 0.443137, 0, 1) -unlocked_lesson_text = Color(1, 0.941176, 0.780392, 1) -completed_lesson = Color(1, 0.941176, 0.780392, 1) -completed_lesson_text = Color(0.701961, 0.443137, 0, 1) +title = "Purple Turtle Garden" +unlocked_lesson = Color(0.52156866, 0.03137255, 0.40392157, 1) +unlocked_lesson_text = Color(0.92156863, 0.7529412, 0.87058824, 1) +completed_lesson = Color(0.92156863, 0.7529412, 0.87058824, 1) +completed_lesson_text = Color(0.52156866, 0.03137255, 0.40392157, 1) -[node name="Background" type="TextureRect" parent="."] +[node name="Background" type="TextureRect" parent="." unique_id=1058030897] unique_name_in_owner = true -modulate = Color(0.921569, 0.643137, 0, 1) +modulate = Color(0.83137256, 0.2901961, 0.7019608, 1) layout_mode = 0 offset_left = 350.0 offset_top = 50.0 offset_right = 2050.0 offset_bottom = 1750.0 mouse_filter = 2 -texture = ExtResource("3_p7iv3") +texture = ExtResource("2_0y47p") expand_mode = 1 -[node name="Plants" type="Control" parent="."] +[node name="Victory_Assets" type="Control" parent="." unique_id=787934313] +unique_name_in_owner = true layout_mode = 1 anchors_preset = 15 anchor_right = 1.0 @@ -50,103 +51,104 @@ grow_horizontal = 2 grow_vertical = 2 mouse_filter = 2 -[node name="Plant1" type="TextureRect" parent="Plants"] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) +[node name="Victory_Asset_01" type="TextureRect" parent="Victory_Assets" unique_id=1278004645] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) layout_mode = 0 -offset_left = 395.0 -offset_top = 475.0 -offset_right = 515.0 -offset_bottom = 1425.0 +offset_left = 761.0 +offset_top = 1263.0 +offset_right = 939.0 +offset_bottom = 1575.0 mouse_filter = 2 -texture = ExtResource("plant_01") +texture = ExtResource("3_fja20") expand_mode = 1 stretch_mode = 5 -[node name="Plant2" type="TextureRect" parent="Plants"] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) +[node name="Victory_Asset_02" type="TextureRect" parent="Victory_Assets" unique_id=1525586982] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) layout_mode = 0 -offset_left = 574.0 -offset_top = 1322.0 -offset_right = 744.0 -offset_bottom = 1592.0 -mouse_filter = 2 -texture = ExtResource("plant_02") -expand_mode = 1 -stretch_mode = 5 - -[node name="Plant3" type="TextureRect" parent="Plants"] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) -layout_mode = 0 -offset_left = 1178.0 -offset_top = 1058.0 -offset_right = 1618.0 +offset_left = 1043.0 +offset_top = 1142.0 +offset_right = 1157.0 offset_bottom = 1388.0 -mouse_filter = 2 -texture = ExtResource("plant_03") -expand_mode = 1 -stretch_mode = 5 - -[node name="Plant4" type="TextureRect" parent="Plants"] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) -layout_mode = 0 -offset_left = 864.0 -offset_top = 308.0 -offset_right = 1084.0 -offset_bottom = 628.0 -mouse_filter = 2 -texture = ExtResource("plant_04") -expand_mode = 1 -stretch_mode = 5 - -[node name="Plant5" type="TextureRect" parent="Plants"] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) -layout_mode = 0 -offset_left = 744.0 -offset_top = 688.0 -offset_right = 889.0 -offset_bottom = 998.0 +rotation = 0.2443461 mouse_filter = 2 texture = ExtResource("plant_05") expand_mode = 1 stretch_mode = 5 -[node name="Plant6" type="TextureRect" parent="Plants"] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) +[node name="Victory_Asset_03" type="TextureRect" parent="Victory_Assets" unique_id=2071114773] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) layout_mode = 0 -offset_left = 1742.0 -offset_top = 762.0 -offset_right = 1927.0 -offset_bottom = 1077.0 +offset_left = 616.0 +offset_top = 648.0 +offset_right = 778.0 +offset_bottom = 812.0 mouse_filter = 2 -texture = ExtResource("plant_06") +texture = ExtResource("5_oapcv") expand_mode = 1 stretch_mode = 5 -[node name="Plant7" type="TextureRect" parent="Plants"] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) +[node name="Victory_Asset_04" type="TextureRect" parent="Victory_Assets" unique_id=1578211500] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) layout_mode = 0 -offset_left = 880.0 -offset_top = 1172.0 -offset_right = 1010.0 -offset_bottom = 1592.0 +offset_left = 907.0 +offset_top = 275.0 +offset_right = 1233.0 +offset_bottom = 599.0 mouse_filter = 2 -texture = ExtResource("plant_07") +texture = ExtResource("6_sjfs7") expand_mode = 1 stretch_mode = 5 -[node name="Plant8" type="TextureRect" parent="Plants"] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) +[node name="Victory_Asset_05" type="TextureRect" parent="Victory_Assets" unique_id=520271408] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) layout_mode = 0 -offset_left = 1122.0 -offset_top = 288.0 -offset_right = 1472.0 -offset_bottom = 638.0 +offset_left = 1199.0 +offset_top = 1279.0 +offset_right = 1409.0 +offset_bottom = 1629.0 mouse_filter = 2 -texture = ExtResource("plant_08") +texture = ExtResource("7_se3av") expand_mode = 1 stretch_mode = 5 -[node name="Buttons" type="Control" parent="."] +[node name="Victory_Asset_06" type="TextureRect" parent="Victory_Assets" unique_id=213526714] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) +layout_mode = 0 +offset_left = 1337.0 +offset_top = 441.0 +offset_right = 1591.0 +offset_bottom = 563.0 +mouse_filter = 2 +texture = ExtResource("8_r7c56") +expand_mode = 1 +stretch_mode = 5 + +[node name="Victory_Asset_07" type="TextureRect" parent="Victory_Assets" unique_id=1466685334] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) +layout_mode = 0 +offset_left = 1660.0 +offset_top = 526.0 +offset_right = 1978.0 +offset_bottom = 866.0 +mouse_filter = 2 +texture = ExtResource("9_s6qsy") +expand_mode = 1 +stretch_mode = 5 + +[node name="Victory_Asset_08" type="TextureRect" parent="Victory_Assets" unique_id=2004645372] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) +layout_mode = 0 +offset_left = 1531.0 +offset_top = 1278.0 +offset_right = 1707.0 +offset_bottom = 1460.0 +mouse_filter = 2 +texture = ExtResource("10_ph3oc") +expand_mode = 1 +stretch_mode = 5 + +[node name="Buttons" type="Control" parent="." unique_id=1964597] layout_mode = 1 anchors_preset = 15 anchor_right = 1.0 @@ -155,53 +157,65 @@ grow_horizontal = 2 grow_vertical = 2 mouse_filter = 2 -[node name="Slot1" parent="Buttons" instance=ExtResource("4_epm30")] +[node name="Slot1" parent="Buttons" unique_id=1361620593 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 584.0 -offset_top = 1066.0 -offset_right = 824.0 -offset_bottom = 1306.0 +offset_left = 494.0 +offset_top = 1052.0 +offset_right = 734.0 +offset_bottom = 1292.0 pivot_offset = Vector2(120, 120) -[node name="Slot2" parent="Buttons" instance=ExtResource("4_epm30")] +[node name="Slot2" parent="Buttons" unique_id=1025579258 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 867.0 -offset_top = 880.0 -offset_right = 1107.0 -offset_bottom = 1120.0 +offset_left = 762.0 +offset_top = 887.0 +offset_right = 1002.0 +offset_bottom = 1127.0 pivot_offset = Vector2(120, 120) -[node name="Slot3" parent="Buttons" instance=ExtResource("4_epm30")] +[node name="Slot3" parent="Buttons" unique_id=353688519 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 1170.0 -offset_top = 800.0 -offset_right = 1410.0 -offset_bottom = 1040.0 +offset_left = 1066.0 +offset_top = 810.0 +offset_right = 1306.0 +offset_bottom = 1050.0 pivot_offset = Vector2(120, 120) -[node name="Slot4" parent="Buttons" instance=ExtResource("4_epm30")] +[node name="Slot4" parent="Buttons" unique_id=1536126098 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 1445.0 -offset_top = 628.0 -offset_right = 1685.0 -offset_bottom = 868.0 +offset_left = 1405.0 +offset_top = 885.0 +offset_right = 1645.0 +offset_bottom = 1125.0 pivot_offset = Vector2(120, 120) -[node name="Slot5" parent="Buttons" instance=ExtResource("4_epm30")] +[node name="Slot5" parent="Buttons" unique_id=960033946 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 1744.0 -offset_top = 478.0 -offset_right = 1984.0 -offset_bottom = 718.0 +offset_left = 1720.0 +offset_top = 1020.0 +offset_right = 1960.0 +offset_bottom = 1260.0 pivot_offset = Vector2(120, 120) -[node name="Jellyfish" type="TextureRect" parent="."] +[node name="Turtle_01" type="TextureRect" parent="." unique_id=518902024] layout_mode = 0 -offset_left = 1511.0 -offset_top = 32.0 -offset_right = 1791.0 -offset_bottom = 512.0 +offset_left = 500.0 +offset_top = 155.0 +offset_right = 800.0 +offset_bottom = 455.0 mouse_filter = 2 -texture = ExtResource("jellyfish_tex") +texture = ExtResource("12_l37o2") +expand_mode = 1 +stretch_mode = 5 + +[node name="Turtle_02" type="TextureRect" parent="." unique_id=1563614410] +layout_mode = 0 +offset_left = 381.0 +offset_top = 439.0 +offset_right = 531.0 +offset_bottom = 589.0 +rotation = -0.2443461 +mouse_filter = 2 +texture = ExtResource("12_l37o2") expand_mode = 1 stretch_mode = 5 diff --git a/resources/gardens/garden_06.tscn b/resources/gardens/garden_06.tscn index 6b356d6e..7d62a641 100644 --- a/resources/gardens/garden_06.tscn +++ b/resources/gardens/garden_06.tscn @@ -1,19 +1,19 @@ -[gd_scene format=3] +[gd_scene format=3 uid="uid://dua725v1fckur"] [ext_resource type="Script" uid="uid://ch5h4p1o54whq" path="res://resources/gardens/garden.gd" id="1_5owem"] -[ext_resource type="Texture2D" uid="uid://d26hapg1hf8a6" path="res://assets/gardens/gardens/garden_01.png" id="3_p7iv3"] +[ext_resource type="Texture2D" uid="uid://4wt50lu3cwbl" path="res://assets/gardens/gardens/garden_02.png" id="2_rqhnb"] +[ext_resource type="Texture2D" uid="uid://dro75vltqiq6j" path="res://assets/gardens/victory_assets/victory_asset_plant_07.png" id="3_o1130"] [ext_resource type="PackedScene" uid="uid://delcgui3v0eek" path="res://sources/lesson_screen/lesson_button.tscn" id="4_epm30"] -[ext_resource type="Texture2D" uid="uid://bfqwlmmliem8f" path="res://assets/gardens/jellyfish.png" id="jellyfish_tex"] -[ext_resource type="Texture2D" uid="uid://dcekseb1b3ruw" path="res://assets/gardens/plants/garden_plant_01.png" id="plant_01"] -[ext_resource type="Texture2D" uid="uid://clkr31osbqs7u" path="res://assets/gardens/plants/garden_plant_02.png" id="plant_02"] -[ext_resource type="Texture2D" uid="uid://dgssb0oonuqku" path="res://assets/gardens/plants/garden_plant_03.png" id="plant_03"] -[ext_resource type="Texture2D" uid="uid://bqp1nkk53y1is" path="res://assets/gardens/plants/garden_plant_04.png" id="plant_04"] -[ext_resource type="Texture2D" uid="uid://dvxnktx1wiyxp" path="res://assets/gardens/plants/garden_plant_05.png" id="plant_05"] -[ext_resource type="Texture2D" uid="uid://f2arml2f4b8p" path="res://assets/gardens/plants/garden_plant_06.png" id="plant_06"] -[ext_resource type="Texture2D" uid="uid://dufnm3bkfe5yv" path="res://assets/gardens/plants/garden_plant_07.png" id="plant_07"] -[ext_resource type="Texture2D" uid="uid://dt2a0dea0hv0c" path="res://assets/gardens/plants/garden_plant_08.png" id="plant_08"] +[ext_resource type="Texture2D" uid="uid://gm5x5p2f07rh" path="res://assets/gardens/victory_assets/victory_asset_plant_10.png" id="5_diva3"] +[ext_resource type="Texture2D" uid="uid://blaltndbcv2yq" path="res://assets/gardens/victory_assets/victory_asset_plant_08.png" id="6_ghdsm"] +[ext_resource type="Texture2D" uid="uid://co6vu63bybpnc" path="res://assets/gardens/victory_assets/victory_asset_plant_09.png" id="7_1053v"] +[ext_resource type="Texture2D" uid="uid://bv510d5r4dn82" path="res://assets/gardens/victory_assets/victory_asset_fragon_fly_01.png" id="8_uh1vh"] +[ext_resource type="Texture2D" uid="uid://dckd1xhcdf2ie" path="res://assets/gardens/victory_assets/victory_asset_plant_06.png" id="9_ip87b"] +[ext_resource type="Texture2D" uid="uid://bpxc4vhri16pd" path="res://assets/gardens/victory_assets/victory_asset_pearl_01.png" id="10_p6pbg"] +[ext_resource type="Texture2D" uid="uid://bsw6v8ix7bb2s" path="res://assets/gardens/turtle.png" id="12_tv77g"] +[ext_resource type="Texture2D" uid="uid://dvxnktx1wiyxp" path="res://assets/gardens/victory_assets/victory_asset_bubbles_01.png" id="plant_05"] -[node name="Garden" type="Control"] +[node name="Garden" type="Control" unique_id=167073905] custom_minimum_size = Vector2(2400, 2.08165e-12) layout_mode = 3 anchors_preset = 15 @@ -23,24 +23,26 @@ grow_horizontal = 2 grow_vertical = 2 mouse_filter = 2 script = ExtResource("1_5owem") -title = "Garden 06" -unlocked_lesson = Color(0.541, 0.478, 0.102, 1) -unlocked_lesson_text = Color(0.941, 0.902, 0.549, 1) -completed_lesson = Color(0.941, 0.902, 0.549, 1) -completed_lesson_text = Color(0.353, 0.314, 0.063, 1) +title = "Purple Turtle Garden" +unlocked_lesson = Color(0.345098, 0.266667, 0.490196, 1) +unlocked_lesson_text = Color(0.894118, 0.827451, 0.937255, 1) +completed_lesson = Color(0.894118, 0.827451, 0.937255, 1) +completed_lesson_text = Color(0.345098, 0.266667, 0.490196, 1) -[node name="Background" type="TextureRect" parent="."] +[node name="Background" type="TextureRect" parent="." unique_id=1058030897] unique_name_in_owner = true +modulate = Color(0.454902, 0.352941, 0.647059, 1) layout_mode = 0 offset_left = 350.0 offset_top = 50.0 offset_right = 2050.0 offset_bottom = 1750.0 mouse_filter = 2 -texture = ExtResource("3_p7iv3") +texture = ExtResource("2_rqhnb") expand_mode = 1 -[node name="Plants" type="Control" parent="."] +[node name="Victory_Assets" type="Control" parent="." unique_id=787934313] +unique_name_in_owner = true layout_mode = 1 anchors_preset = 15 anchor_right = 1.0 @@ -49,103 +51,104 @@ grow_horizontal = 2 grow_vertical = 2 mouse_filter = 2 -[node name="Plant1" type="TextureRect" parent="Plants"] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) +[node name="Victory_Asset_01" type="TextureRect" parent="Victory_Assets" unique_id=1278004645] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) layout_mode = 0 -offset_left = 395.0 -offset_top = 475.0 -offset_right = 515.0 -offset_bottom = 1425.0 +offset_left = 761.0 +offset_top = 1263.0 +offset_right = 939.0 +offset_bottom = 1575.0 mouse_filter = 2 -texture = ExtResource("plant_01") +texture = ExtResource("3_o1130") expand_mode = 1 stretch_mode = 5 -[node name="Plant2" type="TextureRect" parent="Plants"] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) +[node name="Victory_Asset_02" type="TextureRect" parent="Victory_Assets" unique_id=1525586982] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) layout_mode = 0 -offset_left = 574.0 -offset_top = 1322.0 -offset_right = 744.0 -offset_bottom = 1592.0 -mouse_filter = 2 -texture = ExtResource("plant_02") -expand_mode = 1 -stretch_mode = 5 - -[node name="Plant3" type="TextureRect" parent="Plants"] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) -layout_mode = 0 -offset_left = 1178.0 -offset_top = 1058.0 -offset_right = 1618.0 +offset_left = 1043.0 +offset_top = 1142.0 +offset_right = 1157.0 offset_bottom = 1388.0 -mouse_filter = 2 -texture = ExtResource("plant_03") -expand_mode = 1 -stretch_mode = 5 - -[node name="Plant4" type="TextureRect" parent="Plants"] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) -layout_mode = 0 -offset_left = 864.0 -offset_top = 308.0 -offset_right = 1084.0 -offset_bottom = 628.0 -mouse_filter = 2 -texture = ExtResource("plant_04") -expand_mode = 1 -stretch_mode = 5 - -[node name="Plant5" type="TextureRect" parent="Plants"] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) -layout_mode = 0 -offset_left = 744.0 -offset_top = 688.0 -offset_right = 889.0 -offset_bottom = 998.0 +rotation = 0.2443461 mouse_filter = 2 texture = ExtResource("plant_05") expand_mode = 1 stretch_mode = 5 -[node name="Plant6" type="TextureRect" parent="Plants"] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) +[node name="Victory_Asset_03" type="TextureRect" parent="Victory_Assets" unique_id=2071114773] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) layout_mode = 0 -offset_left = 1742.0 -offset_top = 762.0 -offset_right = 1927.0 -offset_bottom = 1077.0 +offset_left = 616.0 +offset_top = 648.0 +offset_right = 778.0 +offset_bottom = 812.0 mouse_filter = 2 -texture = ExtResource("plant_06") +texture = ExtResource("5_diva3") expand_mode = 1 stretch_mode = 5 -[node name="Plant7" type="TextureRect" parent="Plants"] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) +[node name="Victory_Asset_04" type="TextureRect" parent="Victory_Assets" unique_id=1578211500] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) layout_mode = 0 -offset_left = 880.0 -offset_top = 1172.0 -offset_right = 1010.0 -offset_bottom = 1592.0 +offset_left = 907.0 +offset_top = 275.0 +offset_right = 1233.0 +offset_bottom = 599.0 mouse_filter = 2 -texture = ExtResource("plant_07") +texture = ExtResource("6_ghdsm") expand_mode = 1 stretch_mode = 5 -[node name="Plant8" type="TextureRect" parent="Plants"] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) +[node name="Victory_Asset_05" type="TextureRect" parent="Victory_Assets" unique_id=520271408] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) layout_mode = 0 -offset_left = 1122.0 -offset_top = 288.0 -offset_right = 1472.0 -offset_bottom = 638.0 +offset_left = 1199.0 +offset_top = 1279.0 +offset_right = 1409.0 +offset_bottom = 1629.0 mouse_filter = 2 -texture = ExtResource("plant_08") +texture = ExtResource("7_1053v") expand_mode = 1 stretch_mode = 5 -[node name="Buttons" type="Control" parent="."] +[node name="Victory_Asset_06" type="TextureRect" parent="Victory_Assets" unique_id=213526714] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) +layout_mode = 0 +offset_left = 1337.0 +offset_top = 441.0 +offset_right = 1591.0 +offset_bottom = 563.0 +mouse_filter = 2 +texture = ExtResource("8_uh1vh") +expand_mode = 1 +stretch_mode = 5 + +[node name="Victory_Asset_07" type="TextureRect" parent="Victory_Assets" unique_id=1466685334] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) +layout_mode = 0 +offset_left = 1660.0 +offset_top = 526.0 +offset_right = 1978.0 +offset_bottom = 866.0 +mouse_filter = 2 +texture = ExtResource("9_ip87b") +expand_mode = 1 +stretch_mode = 5 + +[node name="Victory_Asset_08" type="TextureRect" parent="Victory_Assets" unique_id=2004645372] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) +layout_mode = 0 +offset_left = 1531.0 +offset_top = 1278.0 +offset_right = 1707.0 +offset_bottom = 1460.0 +mouse_filter = 2 +texture = ExtResource("10_p6pbg") +expand_mode = 1 +stretch_mode = 5 + +[node name="Buttons" type="Control" parent="." unique_id=1964597] layout_mode = 1 anchors_preset = 15 anchor_right = 1.0 @@ -154,53 +157,65 @@ grow_horizontal = 2 grow_vertical = 2 mouse_filter = 2 -[node name="Slot1" parent="Buttons" instance=ExtResource("4_epm30")] +[node name="Slot1" parent="Buttons" unique_id=1361620593 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 584.0 -offset_top = 1066.0 -offset_right = 824.0 -offset_bottom = 1306.0 +offset_left = 494.0 +offset_top = 1052.0 +offset_right = 734.0 +offset_bottom = 1292.0 pivot_offset = Vector2(120, 120) -[node name="Slot2" parent="Buttons" instance=ExtResource("4_epm30")] +[node name="Slot2" parent="Buttons" unique_id=1025579258 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 867.0 -offset_top = 880.0 -offset_right = 1107.0 -offset_bottom = 1120.0 +offset_left = 762.0 +offset_top = 887.0 +offset_right = 1002.0 +offset_bottom = 1127.0 pivot_offset = Vector2(120, 120) -[node name="Slot3" parent="Buttons" instance=ExtResource("4_epm30")] +[node name="Slot3" parent="Buttons" unique_id=353688519 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 1170.0 -offset_top = 800.0 -offset_right = 1410.0 -offset_bottom = 1040.0 +offset_left = 1066.0 +offset_top = 810.0 +offset_right = 1306.0 +offset_bottom = 1050.0 pivot_offset = Vector2(120, 120) -[node name="Slot4" parent="Buttons" instance=ExtResource("4_epm30")] +[node name="Slot4" parent="Buttons" unique_id=1536126098 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 1445.0 -offset_top = 628.0 -offset_right = 1685.0 -offset_bottom = 868.0 +offset_left = 1405.0 +offset_top = 885.0 +offset_right = 1645.0 +offset_bottom = 1125.0 pivot_offset = Vector2(120, 120) -[node name="Slot5" parent="Buttons" instance=ExtResource("4_epm30")] +[node name="Slot5" parent="Buttons" unique_id=960033946 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 1744.0 -offset_top = 478.0 -offset_right = 1984.0 -offset_bottom = 718.0 +offset_left = 1720.0 +offset_top = 1020.0 +offset_right = 1960.0 +offset_bottom = 1260.0 pivot_offset = Vector2(120, 120) -[node name="Jellyfish" type="TextureRect" parent="."] +[node name="Turtle_01" type="TextureRect" parent="." unique_id=518902024] layout_mode = 0 -offset_left = 1511.0 -offset_top = 32.0 -offset_right = 1791.0 -offset_bottom = 512.0 +offset_left = 500.0 +offset_top = 155.0 +offset_right = 800.0 +offset_bottom = 455.0 mouse_filter = 2 -texture = ExtResource("jellyfish_tex") +texture = ExtResource("12_tv77g") +expand_mode = 1 +stretch_mode = 5 + +[node name="Turtle_02" type="TextureRect" parent="." unique_id=1563614410] +layout_mode = 0 +offset_left = 381.0 +offset_top = 439.0 +offset_right = 531.0 +offset_bottom = 589.0 +rotation = -0.2443461 +mouse_filter = 2 +texture = ExtResource("12_tv77g") expand_mode = 1 stretch_mode = 5 diff --git a/resources/gardens/garden_07.tscn b/resources/gardens/garden_07.tscn index 22bf95b0..f7151a50 100644 --- a/resources/gardens/garden_07.tscn +++ b/resources/gardens/garden_07.tscn @@ -1,19 +1,19 @@ -[gd_scene format=3] +[gd_scene format=3 uid="uid://bcvw6yolfv1y"] [ext_resource type="Script" uid="uid://ch5h4p1o54whq" path="res://resources/gardens/garden.gd" id="1_5owem"] -[ext_resource type="Texture2D" uid="uid://d26hapg1hf8a6" path="res://assets/gardens/gardens/garden_01.png" id="3_p7iv3"] +[ext_resource type="Texture2D" uid="uid://4wt50lu3cwbl" path="res://assets/gardens/gardens/garden_02.png" id="2_vspma"] +[ext_resource type="Texture2D" uid="uid://dro75vltqiq6j" path="res://assets/gardens/victory_assets/victory_asset_plant_07.png" id="3_68wn2"] [ext_resource type="PackedScene" uid="uid://delcgui3v0eek" path="res://sources/lesson_screen/lesson_button.tscn" id="4_epm30"] -[ext_resource type="Texture2D" uid="uid://bfqwlmmliem8f" path="res://assets/gardens/jellyfish.png" id="jellyfish_tex"] -[ext_resource type="Texture2D" uid="uid://dcekseb1b3ruw" path="res://assets/gardens/plants/garden_plant_01.png" id="plant_01"] -[ext_resource type="Texture2D" uid="uid://clkr31osbqs7u" path="res://assets/gardens/plants/garden_plant_02.png" id="plant_02"] -[ext_resource type="Texture2D" uid="uid://dgssb0oonuqku" path="res://assets/gardens/plants/garden_plant_03.png" id="plant_03"] -[ext_resource type="Texture2D" uid="uid://bqp1nkk53y1is" path="res://assets/gardens/plants/garden_plant_04.png" id="plant_04"] -[ext_resource type="Texture2D" uid="uid://dvxnktx1wiyxp" path="res://assets/gardens/plants/garden_plant_05.png" id="plant_05"] -[ext_resource type="Texture2D" uid="uid://f2arml2f4b8p" path="res://assets/gardens/plants/garden_plant_06.png" id="plant_06"] -[ext_resource type="Texture2D" uid="uid://dufnm3bkfe5yv" path="res://assets/gardens/plants/garden_plant_07.png" id="plant_07"] -[ext_resource type="Texture2D" uid="uid://dt2a0dea0hv0c" path="res://assets/gardens/plants/garden_plant_08.png" id="plant_08"] +[ext_resource type="Texture2D" uid="uid://gm5x5p2f07rh" path="res://assets/gardens/victory_assets/victory_asset_plant_10.png" id="5_3oqd6"] +[ext_resource type="Texture2D" uid="uid://blaltndbcv2yq" path="res://assets/gardens/victory_assets/victory_asset_plant_08.png" id="6_pobi3"] +[ext_resource type="Texture2D" uid="uid://co6vu63bybpnc" path="res://assets/gardens/victory_assets/victory_asset_plant_09.png" id="7_4pvx1"] +[ext_resource type="Texture2D" uid="uid://bv510d5r4dn82" path="res://assets/gardens/victory_assets/victory_asset_fragon_fly_01.png" id="8_knwjf"] +[ext_resource type="Texture2D" uid="uid://dckd1xhcdf2ie" path="res://assets/gardens/victory_assets/victory_asset_plant_06.png" id="9_xt7g7"] +[ext_resource type="Texture2D" uid="uid://bpxc4vhri16pd" path="res://assets/gardens/victory_assets/victory_asset_pearl_01.png" id="10_v68eg"] +[ext_resource type="Texture2D" uid="uid://bsw6v8ix7bb2s" path="res://assets/gardens/turtle.png" id="12_di1qk"] +[ext_resource type="Texture2D" uid="uid://dvxnktx1wiyxp" path="res://assets/gardens/victory_assets/victory_asset_bubbles_01.png" id="plant_05"] -[node name="Garden" type="Control"] +[node name="Garden" type="Control" unique_id=167073905] custom_minimum_size = Vector2(2400, 2.08165e-12) layout_mode = 3 anchors_preset = 15 @@ -23,24 +23,26 @@ grow_horizontal = 2 grow_vertical = 2 mouse_filter = 2 script = ExtResource("1_5owem") -title = "Garden 07" -unlocked_lesson = Color(0.102, 0.353, 0.541, 1) -unlocked_lesson_text = Color(0.659, 0.847, 0.941, 1) -completed_lesson = Color(0.659, 0.847, 0.941, 1) -completed_lesson_text = Color(0.055, 0.227, 0.361, 1) +title = "Purple Turtle Garden" +unlocked_lesson = Color(0.52156866, 0.03137255, 0.40392157, 1) +unlocked_lesson_text = Color(0.92156863, 0.7529412, 0.87058824, 1) +completed_lesson = Color(0.92156863, 0.7529412, 0.87058824, 1) +completed_lesson_text = Color(0.52156866, 0.03137255, 0.40392157, 1) -[node name="Background" type="TextureRect" parent="."] +[node name="Background" type="TextureRect" parent="." unique_id=1058030897] unique_name_in_owner = true +modulate = Color(0.83137256, 0.2901961, 0.7019608, 1) layout_mode = 0 offset_left = 350.0 offset_top = 50.0 offset_right = 2050.0 offset_bottom = 1750.0 mouse_filter = 2 -texture = ExtResource("3_p7iv3") +texture = ExtResource("2_vspma") expand_mode = 1 -[node name="Plants" type="Control" parent="."] +[node name="Victory_Assets" type="Control" parent="." unique_id=787934313] +unique_name_in_owner = true layout_mode = 1 anchors_preset = 15 anchor_right = 1.0 @@ -49,103 +51,104 @@ grow_horizontal = 2 grow_vertical = 2 mouse_filter = 2 -[node name="Plant1" type="TextureRect" parent="Plants"] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) +[node name="Victory_Asset_01" type="TextureRect" parent="Victory_Assets" unique_id=1278004645] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) layout_mode = 0 -offset_left = 395.0 -offset_top = 475.0 -offset_right = 515.0 -offset_bottom = 1425.0 +offset_left = 761.0 +offset_top = 1263.0 +offset_right = 939.0 +offset_bottom = 1575.0 mouse_filter = 2 -texture = ExtResource("plant_01") +texture = ExtResource("3_68wn2") expand_mode = 1 stretch_mode = 5 -[node name="Plant2" type="TextureRect" parent="Plants"] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) +[node name="Victory_Asset_02" type="TextureRect" parent="Victory_Assets" unique_id=1525586982] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) layout_mode = 0 -offset_left = 574.0 -offset_top = 1322.0 -offset_right = 744.0 -offset_bottom = 1592.0 -mouse_filter = 2 -texture = ExtResource("plant_02") -expand_mode = 1 -stretch_mode = 5 - -[node name="Plant3" type="TextureRect" parent="Plants"] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) -layout_mode = 0 -offset_left = 1178.0 -offset_top = 1058.0 -offset_right = 1618.0 +offset_left = 1043.0 +offset_top = 1142.0 +offset_right = 1157.0 offset_bottom = 1388.0 -mouse_filter = 2 -texture = ExtResource("plant_03") -expand_mode = 1 -stretch_mode = 5 - -[node name="Plant4" type="TextureRect" parent="Plants"] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) -layout_mode = 0 -offset_left = 864.0 -offset_top = 308.0 -offset_right = 1084.0 -offset_bottom = 628.0 -mouse_filter = 2 -texture = ExtResource("plant_04") -expand_mode = 1 -stretch_mode = 5 - -[node name="Plant5" type="TextureRect" parent="Plants"] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) -layout_mode = 0 -offset_left = 744.0 -offset_top = 688.0 -offset_right = 889.0 -offset_bottom = 998.0 +rotation = 0.2443461 mouse_filter = 2 texture = ExtResource("plant_05") expand_mode = 1 stretch_mode = 5 -[node name="Plant6" type="TextureRect" parent="Plants"] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) +[node name="Victory_Asset_03" type="TextureRect" parent="Victory_Assets" unique_id=2071114773] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) layout_mode = 0 -offset_left = 1742.0 -offset_top = 762.0 -offset_right = 1927.0 -offset_bottom = 1077.0 +offset_left = 616.0 +offset_top = 648.0 +offset_right = 778.0 +offset_bottom = 812.0 mouse_filter = 2 -texture = ExtResource("plant_06") +texture = ExtResource("5_3oqd6") expand_mode = 1 stretch_mode = 5 -[node name="Plant7" type="TextureRect" parent="Plants"] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) +[node name="Victory_Asset_04" type="TextureRect" parent="Victory_Assets" unique_id=1578211500] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) layout_mode = 0 -offset_left = 880.0 -offset_top = 1172.0 -offset_right = 1010.0 -offset_bottom = 1592.0 +offset_left = 907.0 +offset_top = 275.0 +offset_right = 1233.0 +offset_bottom = 599.0 mouse_filter = 2 -texture = ExtResource("plant_07") +texture = ExtResource("6_pobi3") expand_mode = 1 stretch_mode = 5 -[node name="Plant8" type="TextureRect" parent="Plants"] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) +[node name="Victory_Asset_05" type="TextureRect" parent="Victory_Assets" unique_id=520271408] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) layout_mode = 0 -offset_left = 1122.0 -offset_top = 288.0 -offset_right = 1472.0 -offset_bottom = 638.0 +offset_left = 1199.0 +offset_top = 1279.0 +offset_right = 1409.0 +offset_bottom = 1629.0 mouse_filter = 2 -texture = ExtResource("plant_08") +texture = ExtResource("7_4pvx1") expand_mode = 1 stretch_mode = 5 -[node name="Buttons" type="Control" parent="."] +[node name="Victory_Asset_06" type="TextureRect" parent="Victory_Assets" unique_id=213526714] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) +layout_mode = 0 +offset_left = 1337.0 +offset_top = 441.0 +offset_right = 1591.0 +offset_bottom = 563.0 +mouse_filter = 2 +texture = ExtResource("8_knwjf") +expand_mode = 1 +stretch_mode = 5 + +[node name="Victory_Asset_07" type="TextureRect" parent="Victory_Assets" unique_id=1466685334] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) +layout_mode = 0 +offset_left = 1660.0 +offset_top = 526.0 +offset_right = 1978.0 +offset_bottom = 866.0 +mouse_filter = 2 +texture = ExtResource("9_xt7g7") +expand_mode = 1 +stretch_mode = 5 + +[node name="Victory_Asset_08" type="TextureRect" parent="Victory_Assets" unique_id=2004645372] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) +layout_mode = 0 +offset_left = 1531.0 +offset_top = 1278.0 +offset_right = 1707.0 +offset_bottom = 1460.0 +mouse_filter = 2 +texture = ExtResource("10_v68eg") +expand_mode = 1 +stretch_mode = 5 + +[node name="Buttons" type="Control" parent="." unique_id=1964597] layout_mode = 1 anchors_preset = 15 anchor_right = 1.0 @@ -154,53 +157,65 @@ grow_horizontal = 2 grow_vertical = 2 mouse_filter = 2 -[node name="Slot1" parent="Buttons" instance=ExtResource("4_epm30")] +[node name="Slot1" parent="Buttons" unique_id=1361620593 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 584.0 -offset_top = 1066.0 -offset_right = 824.0 -offset_bottom = 1306.0 +offset_left = 494.0 +offset_top = 1052.0 +offset_right = 734.0 +offset_bottom = 1292.0 pivot_offset = Vector2(120, 120) -[node name="Slot2" parent="Buttons" instance=ExtResource("4_epm30")] +[node name="Slot2" parent="Buttons" unique_id=1025579258 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 867.0 -offset_top = 880.0 -offset_right = 1107.0 -offset_bottom = 1120.0 +offset_left = 762.0 +offset_top = 887.0 +offset_right = 1002.0 +offset_bottom = 1127.0 pivot_offset = Vector2(120, 120) -[node name="Slot3" parent="Buttons" instance=ExtResource("4_epm30")] +[node name="Slot3" parent="Buttons" unique_id=353688519 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 1170.0 -offset_top = 800.0 -offset_right = 1410.0 -offset_bottom = 1040.0 +offset_left = 1066.0 +offset_top = 810.0 +offset_right = 1306.0 +offset_bottom = 1050.0 pivot_offset = Vector2(120, 120) -[node name="Slot4" parent="Buttons" instance=ExtResource("4_epm30")] +[node name="Slot4" parent="Buttons" unique_id=1536126098 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 1445.0 -offset_top = 628.0 -offset_right = 1685.0 -offset_bottom = 868.0 +offset_left = 1405.0 +offset_top = 885.0 +offset_right = 1645.0 +offset_bottom = 1125.0 pivot_offset = Vector2(120, 120) -[node name="Slot5" parent="Buttons" instance=ExtResource("4_epm30")] +[node name="Slot5" parent="Buttons" unique_id=960033946 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 1744.0 -offset_top = 478.0 -offset_right = 1984.0 -offset_bottom = 718.0 +offset_left = 1720.0 +offset_top = 1020.0 +offset_right = 1960.0 +offset_bottom = 1260.0 pivot_offset = Vector2(120, 120) -[node name="Jellyfish" type="TextureRect" parent="."] +[node name="Turtle_01" type="TextureRect" parent="." unique_id=518902024] layout_mode = 0 -offset_left = 1511.0 -offset_top = 32.0 -offset_right = 1791.0 -offset_bottom = 512.0 +offset_left = 500.0 +offset_top = 155.0 +offset_right = 800.0 +offset_bottom = 455.0 mouse_filter = 2 -texture = ExtResource("jellyfish_tex") +texture = ExtResource("12_di1qk") +expand_mode = 1 +stretch_mode = 5 + +[node name="Turtle_02" type="TextureRect" parent="." unique_id=1563614410] +layout_mode = 0 +offset_left = 381.0 +offset_top = 439.0 +offset_right = 531.0 +offset_bottom = 589.0 +rotation = -0.2443461 +mouse_filter = 2 +texture = ExtResource("12_di1qk") expand_mode = 1 stretch_mode = 5 diff --git a/resources/gardens/garden_08.tscn b/resources/gardens/garden_08.tscn index a5dcfb8a..561c00c7 100644 --- a/resources/gardens/garden_08.tscn +++ b/resources/gardens/garden_08.tscn @@ -1,19 +1,19 @@ -[gd_scene format=3] +[gd_scene format=3 uid="uid://blk1dw8m5qrxx"] [ext_resource type="Script" uid="uid://ch5h4p1o54whq" path="res://resources/gardens/garden.gd" id="1_5owem"] -[ext_resource type="Texture2D" uid="uid://d26hapg1hf8a6" path="res://assets/gardens/gardens/garden_01.png" id="3_p7iv3"] +[ext_resource type="Texture2D" uid="uid://4wt50lu3cwbl" path="res://assets/gardens/gardens/garden_02.png" id="2_1by5a"] +[ext_resource type="Texture2D" uid="uid://dro75vltqiq6j" path="res://assets/gardens/victory_assets/victory_asset_plant_07.png" id="3_08dq4"] +[ext_resource type="Texture2D" uid="uid://dvxnktx1wiyxp" path="res://assets/gardens/victory_assets/victory_asset_bubbles_01.png" id="4_7g80l"] [ext_resource type="PackedScene" uid="uid://delcgui3v0eek" path="res://sources/lesson_screen/lesson_button.tscn" id="4_epm30"] -[ext_resource type="Texture2D" uid="uid://bfqwlmmliem8f" path="res://assets/gardens/jellyfish.png" id="jellyfish_tex"] -[ext_resource type="Texture2D" uid="uid://dcekseb1b3ruw" path="res://assets/gardens/plants/garden_plant_01.png" id="plant_01"] -[ext_resource type="Texture2D" uid="uid://clkr31osbqs7u" path="res://assets/gardens/plants/garden_plant_02.png" id="plant_02"] -[ext_resource type="Texture2D" uid="uid://dgssb0oonuqku" path="res://assets/gardens/plants/garden_plant_03.png" id="plant_03"] -[ext_resource type="Texture2D" uid="uid://bqp1nkk53y1is" path="res://assets/gardens/plants/garden_plant_04.png" id="plant_04"] -[ext_resource type="Texture2D" uid="uid://dvxnktx1wiyxp" path="res://assets/gardens/plants/garden_plant_05.png" id="plant_05"] -[ext_resource type="Texture2D" uid="uid://f2arml2f4b8p" path="res://assets/gardens/plants/garden_plant_06.png" id="plant_06"] -[ext_resource type="Texture2D" uid="uid://dufnm3bkfe5yv" path="res://assets/gardens/plants/garden_plant_07.png" id="plant_07"] -[ext_resource type="Texture2D" uid="uid://dt2a0dea0hv0c" path="res://assets/gardens/plants/garden_plant_08.png" id="plant_08"] +[ext_resource type="Texture2D" uid="uid://gm5x5p2f07rh" path="res://assets/gardens/victory_assets/victory_asset_plant_10.png" id="5_7no2y"] +[ext_resource type="Texture2D" uid="uid://blaltndbcv2yq" path="res://assets/gardens/victory_assets/victory_asset_plant_08.png" id="6_1m61o"] +[ext_resource type="Texture2D" uid="uid://co6vu63bybpnc" path="res://assets/gardens/victory_assets/victory_asset_plant_09.png" id="7_qn03m"] +[ext_resource type="Texture2D" uid="uid://bv510d5r4dn82" path="res://assets/gardens/victory_assets/victory_asset_fragon_fly_01.png" id="8_prr8f"] +[ext_resource type="Texture2D" uid="uid://dckd1xhcdf2ie" path="res://assets/gardens/victory_assets/victory_asset_plant_06.png" id="9_s1acr"] +[ext_resource type="Texture2D" uid="uid://bpxc4vhri16pd" path="res://assets/gardens/victory_assets/victory_asset_pearl_01.png" id="10_85dxs"] +[ext_resource type="Texture2D" uid="uid://bsw6v8ix7bb2s" path="res://assets/gardens/turtle.png" id="12_gofft"] -[node name="Garden" type="Control"] +[node name="Garden" type="Control" unique_id=167073905] custom_minimum_size = Vector2(2400, 2.08165e-12) layout_mode = 3 anchors_preset = 15 @@ -23,24 +23,26 @@ grow_horizontal = 2 grow_vertical = 2 mouse_filter = 2 script = ExtResource("1_5owem") -title = "Garden 08" -unlocked_lesson = Color(0.769, 0.322, 0.416, 1) -unlocked_lesson_text = Color(1, 0.753, 0.796, 1) -completed_lesson = Color(1, 0.753, 0.796, 1) -completed_lesson_text = Color(0.541, 0.165, 0.259, 1) +title = "Purple Turtle Garden" +unlocked_lesson = Color(0.345098, 0.266667, 0.490196, 1) +unlocked_lesson_text = Color(0.894118, 0.827451, 0.937255, 1) +completed_lesson = Color(0.894118, 0.827451, 0.937255, 1) +completed_lesson_text = Color(0.345098, 0.266667, 0.490196, 1) -[node name="Background" type="TextureRect" parent="."] +[node name="Background" type="TextureRect" parent="." unique_id=1058030897] unique_name_in_owner = true +modulate = Color(0.454902, 0.352941, 0.647059, 1) layout_mode = 0 offset_left = 350.0 offset_top = 50.0 offset_right = 2050.0 offset_bottom = 1750.0 mouse_filter = 2 -texture = ExtResource("3_p7iv3") +texture = ExtResource("2_1by5a") expand_mode = 1 -[node name="Plants" type="Control" parent="."] +[node name="Victory_Assets" type="Control" parent="." unique_id=787934313] +unique_name_in_owner = true layout_mode = 1 anchors_preset = 15 anchor_right = 1.0 @@ -49,103 +51,104 @@ grow_horizontal = 2 grow_vertical = 2 mouse_filter = 2 -[node name="Plant1" type="TextureRect" parent="Plants"] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) +[node name="Victory_Asset_01" type="TextureRect" parent="Victory_Assets" unique_id=1278004645] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) layout_mode = 0 -offset_left = 395.0 -offset_top = 475.0 -offset_right = 515.0 -offset_bottom = 1425.0 +offset_left = 761.0 +offset_top = 1263.0 +offset_right = 939.0 +offset_bottom = 1575.0 mouse_filter = 2 -texture = ExtResource("plant_01") +texture = ExtResource("3_08dq4") expand_mode = 1 stretch_mode = 5 -[node name="Plant2" type="TextureRect" parent="Plants"] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) +[node name="Victory_Asset_02" type="TextureRect" parent="Victory_Assets" unique_id=1525586982] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) layout_mode = 0 -offset_left = 574.0 -offset_top = 1322.0 -offset_right = 744.0 -offset_bottom = 1592.0 -mouse_filter = 2 -texture = ExtResource("plant_02") -expand_mode = 1 -stretch_mode = 5 - -[node name="Plant3" type="TextureRect" parent="Plants"] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) -layout_mode = 0 -offset_left = 1178.0 -offset_top = 1058.0 -offset_right = 1618.0 +offset_left = 1043.0 +offset_top = 1142.0 +offset_right = 1157.0 offset_bottom = 1388.0 +rotation = 0.2443461 mouse_filter = 2 -texture = ExtResource("plant_03") +texture = ExtResource("4_7g80l") expand_mode = 1 stretch_mode = 5 -[node name="Plant4" type="TextureRect" parent="Plants"] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) +[node name="Victory_Asset_03" type="TextureRect" parent="Victory_Assets" unique_id=2071114773] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) layout_mode = 0 -offset_left = 864.0 -offset_top = 308.0 -offset_right = 1084.0 -offset_bottom = 628.0 +offset_left = 616.0 +offset_top = 648.0 +offset_right = 778.0 +offset_bottom = 812.0 mouse_filter = 2 -texture = ExtResource("plant_04") +texture = ExtResource("5_7no2y") expand_mode = 1 stretch_mode = 5 -[node name="Plant5" type="TextureRect" parent="Plants"] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) +[node name="Victory_Asset_04" type="TextureRect" parent="Victory_Assets" unique_id=1578211500] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) layout_mode = 0 -offset_left = 744.0 -offset_top = 688.0 -offset_right = 889.0 -offset_bottom = 998.0 +offset_left = 907.0 +offset_top = 275.0 +offset_right = 1233.0 +offset_bottom = 599.0 mouse_filter = 2 -texture = ExtResource("plant_05") +texture = ExtResource("6_1m61o") expand_mode = 1 stretch_mode = 5 -[node name="Plant6" type="TextureRect" parent="Plants"] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) +[node name="Victory_Asset_05" type="TextureRect" parent="Victory_Assets" unique_id=520271408] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) layout_mode = 0 -offset_left = 1742.0 -offset_top = 762.0 -offset_right = 1927.0 -offset_bottom = 1077.0 +offset_left = 1199.0 +offset_top = 1279.0 +offset_right = 1409.0 +offset_bottom = 1629.0 mouse_filter = 2 -texture = ExtResource("plant_06") +texture = ExtResource("7_qn03m") expand_mode = 1 stretch_mode = 5 -[node name="Plant7" type="TextureRect" parent="Plants"] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) +[node name="Victory_Asset_06" type="TextureRect" parent="Victory_Assets" unique_id=213526714] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) layout_mode = 0 -offset_left = 880.0 -offset_top = 1172.0 -offset_right = 1010.0 -offset_bottom = 1592.0 +offset_left = 1337.0 +offset_top = 441.0 +offset_right = 1591.0 +offset_bottom = 563.0 mouse_filter = 2 -texture = ExtResource("plant_07") +texture = ExtResource("8_prr8f") expand_mode = 1 stretch_mode = 5 -[node name="Plant8" type="TextureRect" parent="Plants"] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) +[node name="Victory_Asset_07" type="TextureRect" parent="Victory_Assets" unique_id=1466685334] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) layout_mode = 0 -offset_left = 1122.0 -offset_top = 288.0 -offset_right = 1472.0 -offset_bottom = 638.0 +offset_left = 1660.0 +offset_top = 526.0 +offset_right = 1978.0 +offset_bottom = 866.0 mouse_filter = 2 -texture = ExtResource("plant_08") +texture = ExtResource("9_s1acr") expand_mode = 1 stretch_mode = 5 -[node name="Buttons" type="Control" parent="."] +[node name="Victory_Asset_08" type="TextureRect" parent="Victory_Assets" unique_id=2004645372] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) +layout_mode = 0 +offset_left = 1531.0 +offset_top = 1278.0 +offset_right = 1707.0 +offset_bottom = 1460.0 +mouse_filter = 2 +texture = ExtResource("10_85dxs") +expand_mode = 1 +stretch_mode = 5 + +[node name="Buttons" type="Control" parent="." unique_id=1964597] layout_mode = 1 anchors_preset = 15 anchor_right = 1.0 @@ -154,53 +157,65 @@ grow_horizontal = 2 grow_vertical = 2 mouse_filter = 2 -[node name="Slot1" parent="Buttons" instance=ExtResource("4_epm30")] +[node name="Slot1" parent="Buttons" unique_id=1361620593 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 584.0 -offset_top = 1066.0 -offset_right = 824.0 -offset_bottom = 1306.0 +offset_left = 494.0 +offset_top = 1052.0 +offset_right = 734.0 +offset_bottom = 1292.0 pivot_offset = Vector2(120, 120) -[node name="Slot2" parent="Buttons" instance=ExtResource("4_epm30")] +[node name="Slot2" parent="Buttons" unique_id=1025579258 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 867.0 -offset_top = 880.0 -offset_right = 1107.0 -offset_bottom = 1120.0 +offset_left = 762.0 +offset_top = 887.0 +offset_right = 1002.0 +offset_bottom = 1127.0 pivot_offset = Vector2(120, 120) -[node name="Slot3" parent="Buttons" instance=ExtResource("4_epm30")] +[node name="Slot3" parent="Buttons" unique_id=353688519 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 1170.0 -offset_top = 800.0 -offset_right = 1410.0 -offset_bottom = 1040.0 +offset_left = 1066.0 +offset_top = 810.0 +offset_right = 1306.0 +offset_bottom = 1050.0 pivot_offset = Vector2(120, 120) -[node name="Slot4" parent="Buttons" instance=ExtResource("4_epm30")] +[node name="Slot4" parent="Buttons" unique_id=1536126098 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 1445.0 -offset_top = 628.0 -offset_right = 1685.0 -offset_bottom = 868.0 +offset_left = 1405.0 +offset_top = 885.0 +offset_right = 1645.0 +offset_bottom = 1125.0 pivot_offset = Vector2(120, 120) -[node name="Slot5" parent="Buttons" instance=ExtResource("4_epm30")] +[node name="Slot5" parent="Buttons" unique_id=960033946 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 1744.0 -offset_top = 478.0 -offset_right = 1984.0 -offset_bottom = 718.0 +offset_left = 1720.0 +offset_top = 1020.0 +offset_right = 1960.0 +offset_bottom = 1260.0 pivot_offset = Vector2(120, 120) -[node name="Jellyfish" type="TextureRect" parent="."] +[node name="Turtle_01" type="TextureRect" parent="." unique_id=518902024] layout_mode = 0 -offset_left = 1511.0 -offset_top = 32.0 -offset_right = 1791.0 -offset_bottom = 512.0 +offset_left = 500.0 +offset_top = 155.0 +offset_right = 800.0 +offset_bottom = 455.0 mouse_filter = 2 -texture = ExtResource("jellyfish_tex") +texture = ExtResource("12_gofft") +expand_mode = 1 +stretch_mode = 5 + +[node name="Turtle_02" type="TextureRect" parent="." unique_id=1563614410] +layout_mode = 0 +offset_left = 381.0 +offset_top = 439.0 +offset_right = 531.0 +offset_bottom = 589.0 +rotation = -0.2443461 +mouse_filter = 2 +texture = ExtResource("12_gofft") expand_mode = 1 stretch_mode = 5 diff --git a/resources/gardens/garden_09.tscn b/resources/gardens/garden_09.tscn index 7363fd4b..13c15989 100644 --- a/resources/gardens/garden_09.tscn +++ b/resources/gardens/garden_09.tscn @@ -1,19 +1,19 @@ -[gd_scene format=3] +[gd_scene format=3 uid="uid://bboubmocwjw80"] [ext_resource type="Script" uid="uid://ch5h4p1o54whq" path="res://resources/gardens/garden.gd" id="1_5owem"] -[ext_resource type="Texture2D" uid="uid://d26hapg1hf8a6" path="res://assets/gardens/gardens/garden_01.png" id="3_p7iv3"] +[ext_resource type="Texture2D" uid="uid://4wt50lu3cwbl" path="res://assets/gardens/gardens/garden_02.png" id="2_pac6c"] +[ext_resource type="Texture2D" uid="uid://dro75vltqiq6j" path="res://assets/gardens/victory_assets/victory_asset_plant_07.png" id="3_j4wf1"] [ext_resource type="PackedScene" uid="uid://delcgui3v0eek" path="res://sources/lesson_screen/lesson_button.tscn" id="4_epm30"] -[ext_resource type="Texture2D" uid="uid://bfqwlmmliem8f" path="res://assets/gardens/jellyfish.png" id="jellyfish_tex"] -[ext_resource type="Texture2D" uid="uid://dcekseb1b3ruw" path="res://assets/gardens/plants/garden_plant_01.png" id="plant_01"] -[ext_resource type="Texture2D" uid="uid://clkr31osbqs7u" path="res://assets/gardens/plants/garden_plant_02.png" id="plant_02"] -[ext_resource type="Texture2D" uid="uid://dgssb0oonuqku" path="res://assets/gardens/plants/garden_plant_03.png" id="plant_03"] -[ext_resource type="Texture2D" uid="uid://bqp1nkk53y1is" path="res://assets/gardens/plants/garden_plant_04.png" id="plant_04"] -[ext_resource type="Texture2D" uid="uid://dvxnktx1wiyxp" path="res://assets/gardens/plants/garden_plant_05.png" id="plant_05"] -[ext_resource type="Texture2D" uid="uid://f2arml2f4b8p" path="res://assets/gardens/plants/garden_plant_06.png" id="plant_06"] -[ext_resource type="Texture2D" uid="uid://dufnm3bkfe5yv" path="res://assets/gardens/plants/garden_plant_07.png" id="plant_07"] -[ext_resource type="Texture2D" uid="uid://dt2a0dea0hv0c" path="res://assets/gardens/plants/garden_plant_08.png" id="plant_08"] +[ext_resource type="Texture2D" uid="uid://dvxnktx1wiyxp" path="res://assets/gardens/victory_assets/victory_asset_bubbles_01.png" id="4_ym7nb"] +[ext_resource type="Texture2D" uid="uid://gm5x5p2f07rh" path="res://assets/gardens/victory_assets/victory_asset_plant_10.png" id="5_6bl1j"] +[ext_resource type="Texture2D" uid="uid://blaltndbcv2yq" path="res://assets/gardens/victory_assets/victory_asset_plant_08.png" id="6_j8gqo"] +[ext_resource type="Texture2D" uid="uid://co6vu63bybpnc" path="res://assets/gardens/victory_assets/victory_asset_plant_09.png" id="7_2xyhj"] +[ext_resource type="Texture2D" uid="uid://bv510d5r4dn82" path="res://assets/gardens/victory_assets/victory_asset_fragon_fly_01.png" id="8_cr4yr"] +[ext_resource type="Texture2D" uid="uid://dckd1xhcdf2ie" path="res://assets/gardens/victory_assets/victory_asset_plant_06.png" id="9_8mcmd"] +[ext_resource type="Texture2D" uid="uid://bpxc4vhri16pd" path="res://assets/gardens/victory_assets/victory_asset_pearl_01.png" id="10_v4xuo"] +[ext_resource type="Texture2D" uid="uid://bsw6v8ix7bb2s" path="res://assets/gardens/turtle.png" id="12_x1ufu"] -[node name="Garden" type="Control"] +[node name="Garden" type="Control" unique_id=167073905] custom_minimum_size = Vector2(2400, 2.08165e-12) layout_mode = 3 anchors_preset = 15 @@ -23,24 +23,26 @@ grow_horizontal = 2 grow_vertical = 2 mouse_filter = 2 script = ExtResource("1_5owem") -title = "Garden 09" -unlocked_lesson = Color(0.42, 0.431, 0.173, 1) -unlocked_lesson_text = Color(0.831, 0.847, 0.659, 1) -completed_lesson = Color(0.831, 0.847, 0.659, 1) -completed_lesson_text = Color(0.271, 0.282, 0.094, 1) +title = "Purple Turtle Garden" +unlocked_lesson = Color(0.52156866, 0.03137255, 0.40392157, 1) +unlocked_lesson_text = Color(0.92156863, 0.7529412, 0.87058824, 1) +completed_lesson = Color(0.92156863, 0.7529412, 0.87058824, 1) +completed_lesson_text = Color(0.52156866, 0.03137255, 0.40392157, 1) -[node name="Background" type="TextureRect" parent="."] +[node name="Background" type="TextureRect" parent="." unique_id=1058030897] unique_name_in_owner = true +modulate = Color(0.83137256, 0.2901961, 0.7019608, 1) layout_mode = 0 offset_left = 350.0 offset_top = 50.0 offset_right = 2050.0 offset_bottom = 1750.0 mouse_filter = 2 -texture = ExtResource("3_p7iv3") +texture = ExtResource("2_pac6c") expand_mode = 1 -[node name="Plants" type="Control" parent="."] +[node name="Victory_Assets" type="Control" parent="." unique_id=787934313] +unique_name_in_owner = true layout_mode = 1 anchors_preset = 15 anchor_right = 1.0 @@ -49,103 +51,104 @@ grow_horizontal = 2 grow_vertical = 2 mouse_filter = 2 -[node name="Plant1" type="TextureRect" parent="Plants"] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) +[node name="Victory_Asset_01" type="TextureRect" parent="Victory_Assets" unique_id=1278004645] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) layout_mode = 0 -offset_left = 395.0 -offset_top = 475.0 -offset_right = 515.0 -offset_bottom = 1425.0 +offset_left = 761.0 +offset_top = 1263.0 +offset_right = 939.0 +offset_bottom = 1575.0 mouse_filter = 2 -texture = ExtResource("plant_01") +texture = ExtResource("3_j4wf1") expand_mode = 1 stretch_mode = 5 -[node name="Plant2" type="TextureRect" parent="Plants"] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) +[node name="Victory_Asset_02" type="TextureRect" parent="Victory_Assets" unique_id=1525586982] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) layout_mode = 0 -offset_left = 574.0 -offset_top = 1322.0 -offset_right = 744.0 -offset_bottom = 1592.0 -mouse_filter = 2 -texture = ExtResource("plant_02") -expand_mode = 1 -stretch_mode = 5 - -[node name="Plant3" type="TextureRect" parent="Plants"] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) -layout_mode = 0 -offset_left = 1178.0 -offset_top = 1058.0 -offset_right = 1618.0 +offset_left = 1043.0 +offset_top = 1142.0 +offset_right = 1157.0 offset_bottom = 1388.0 +rotation = 0.2443461 mouse_filter = 2 -texture = ExtResource("plant_03") +texture = ExtResource("4_ym7nb") expand_mode = 1 stretch_mode = 5 -[node name="Plant4" type="TextureRect" parent="Plants"] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) +[node name="Victory_Asset_03" type="TextureRect" parent="Victory_Assets" unique_id=2071114773] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) layout_mode = 0 -offset_left = 864.0 -offset_top = 308.0 -offset_right = 1084.0 -offset_bottom = 628.0 +offset_left = 616.0 +offset_top = 648.0 +offset_right = 778.0 +offset_bottom = 812.0 mouse_filter = 2 -texture = ExtResource("plant_04") +texture = ExtResource("5_6bl1j") expand_mode = 1 stretch_mode = 5 -[node name="Plant5" type="TextureRect" parent="Plants"] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) +[node name="Victory_Asset_04" type="TextureRect" parent="Victory_Assets" unique_id=1578211500] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) layout_mode = 0 -offset_left = 744.0 -offset_top = 688.0 -offset_right = 889.0 -offset_bottom = 998.0 +offset_left = 907.0 +offset_top = 275.0 +offset_right = 1233.0 +offset_bottom = 599.0 mouse_filter = 2 -texture = ExtResource("plant_05") +texture = ExtResource("6_j8gqo") expand_mode = 1 stretch_mode = 5 -[node name="Plant6" type="TextureRect" parent="Plants"] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) +[node name="Victory_Asset_05" type="TextureRect" parent="Victory_Assets" unique_id=520271408] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) layout_mode = 0 -offset_left = 1742.0 -offset_top = 762.0 -offset_right = 1927.0 -offset_bottom = 1077.0 +offset_left = 1199.0 +offset_top = 1279.0 +offset_right = 1409.0 +offset_bottom = 1629.0 mouse_filter = 2 -texture = ExtResource("plant_06") +texture = ExtResource("7_2xyhj") expand_mode = 1 stretch_mode = 5 -[node name="Plant7" type="TextureRect" parent="Plants"] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) +[node name="Victory_Asset_06" type="TextureRect" parent="Victory_Assets" unique_id=213526714] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) layout_mode = 0 -offset_left = 880.0 -offset_top = 1172.0 -offset_right = 1010.0 -offset_bottom = 1592.0 +offset_left = 1337.0 +offset_top = 441.0 +offset_right = 1591.0 +offset_bottom = 563.0 mouse_filter = 2 -texture = ExtResource("plant_07") +texture = ExtResource("8_cr4yr") expand_mode = 1 stretch_mode = 5 -[node name="Plant8" type="TextureRect" parent="Plants"] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) +[node name="Victory_Asset_07" type="TextureRect" parent="Victory_Assets" unique_id=1466685334] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) layout_mode = 0 -offset_left = 1122.0 -offset_top = 288.0 -offset_right = 1472.0 -offset_bottom = 638.0 +offset_left = 1660.0 +offset_top = 526.0 +offset_right = 1978.0 +offset_bottom = 866.0 mouse_filter = 2 -texture = ExtResource("plant_08") +texture = ExtResource("9_8mcmd") expand_mode = 1 stretch_mode = 5 -[node name="Buttons" type="Control" parent="."] +[node name="Victory_Asset_08" type="TextureRect" parent="Victory_Assets" unique_id=2004645372] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) +layout_mode = 0 +offset_left = 1531.0 +offset_top = 1278.0 +offset_right = 1707.0 +offset_bottom = 1460.0 +mouse_filter = 2 +texture = ExtResource("10_v4xuo") +expand_mode = 1 +stretch_mode = 5 + +[node name="Buttons" type="Control" parent="." unique_id=1964597] layout_mode = 1 anchors_preset = 15 anchor_right = 1.0 @@ -154,53 +157,65 @@ grow_horizontal = 2 grow_vertical = 2 mouse_filter = 2 -[node name="Slot1" parent="Buttons" instance=ExtResource("4_epm30")] +[node name="Slot1" parent="Buttons" unique_id=1361620593 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 584.0 -offset_top = 1066.0 -offset_right = 824.0 -offset_bottom = 1306.0 +offset_left = 494.0 +offset_top = 1052.0 +offset_right = 734.0 +offset_bottom = 1292.0 pivot_offset = Vector2(120, 120) -[node name="Slot2" parent="Buttons" instance=ExtResource("4_epm30")] +[node name="Slot2" parent="Buttons" unique_id=1025579258 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 867.0 -offset_top = 880.0 -offset_right = 1107.0 -offset_bottom = 1120.0 +offset_left = 762.0 +offset_top = 887.0 +offset_right = 1002.0 +offset_bottom = 1127.0 pivot_offset = Vector2(120, 120) -[node name="Slot3" parent="Buttons" instance=ExtResource("4_epm30")] +[node name="Slot3" parent="Buttons" unique_id=353688519 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 1170.0 -offset_top = 800.0 -offset_right = 1410.0 -offset_bottom = 1040.0 +offset_left = 1066.0 +offset_top = 810.0 +offset_right = 1306.0 +offset_bottom = 1050.0 pivot_offset = Vector2(120, 120) -[node name="Slot4" parent="Buttons" instance=ExtResource("4_epm30")] +[node name="Slot4" parent="Buttons" unique_id=1536126098 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 1445.0 -offset_top = 628.0 -offset_right = 1685.0 -offset_bottom = 868.0 +offset_left = 1405.0 +offset_top = 885.0 +offset_right = 1645.0 +offset_bottom = 1125.0 pivot_offset = Vector2(120, 120) -[node name="Slot5" parent="Buttons" instance=ExtResource("4_epm30")] +[node name="Slot5" parent="Buttons" unique_id=960033946 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 1744.0 -offset_top = 478.0 -offset_right = 1984.0 -offset_bottom = 718.0 +offset_left = 1720.0 +offset_top = 1020.0 +offset_right = 1960.0 +offset_bottom = 1260.0 pivot_offset = Vector2(120, 120) -[node name="Jellyfish" type="TextureRect" parent="."] +[node name="Turtle_01" type="TextureRect" parent="." unique_id=518902024] layout_mode = 0 -offset_left = 1511.0 -offset_top = 32.0 -offset_right = 1791.0 -offset_bottom = 512.0 +offset_left = 500.0 +offset_top = 155.0 +offset_right = 800.0 +offset_bottom = 455.0 mouse_filter = 2 -texture = ExtResource("jellyfish_tex") +texture = ExtResource("12_x1ufu") +expand_mode = 1 +stretch_mode = 5 + +[node name="Turtle_02" type="TextureRect" parent="." unique_id=1563614410] +layout_mode = 0 +offset_left = 381.0 +offset_top = 439.0 +offset_right = 531.0 +offset_bottom = 589.0 +rotation = -0.2443461 +mouse_filter = 2 +texture = ExtResource("12_x1ufu") expand_mode = 1 stretch_mode = 5 diff --git a/resources/gardens/garden_10.tscn b/resources/gardens/garden_10.tscn index 1c6e7946..c9ff58cd 100644 --- a/resources/gardens/garden_10.tscn +++ b/resources/gardens/garden_10.tscn @@ -1,19 +1,19 @@ -[gd_scene format=3] +[gd_scene format=3 uid="uid://4uyls7ihyc51"] [ext_resource type="Script" uid="uid://ch5h4p1o54whq" path="res://resources/gardens/garden.gd" id="1_5owem"] -[ext_resource type="Texture2D" uid="uid://d26hapg1hf8a6" path="res://assets/gardens/gardens/garden_01.png" id="3_p7iv3"] +[ext_resource type="Texture2D" uid="uid://4wt50lu3cwbl" path="res://assets/gardens/gardens/garden_02.png" id="2_xkwcf"] +[ext_resource type="Texture2D" uid="uid://dro75vltqiq6j" path="res://assets/gardens/victory_assets/victory_asset_plant_07.png" id="3_w51id"] [ext_resource type="PackedScene" uid="uid://delcgui3v0eek" path="res://sources/lesson_screen/lesson_button.tscn" id="4_epm30"] -[ext_resource type="Texture2D" uid="uid://bfqwlmmliem8f" path="res://assets/gardens/jellyfish.png" id="jellyfish_tex"] -[ext_resource type="Texture2D" uid="uid://dcekseb1b3ruw" path="res://assets/gardens/plants/garden_plant_01.png" id="plant_01"] -[ext_resource type="Texture2D" uid="uid://clkr31osbqs7u" path="res://assets/gardens/plants/garden_plant_02.png" id="plant_02"] -[ext_resource type="Texture2D" uid="uid://dgssb0oonuqku" path="res://assets/gardens/plants/garden_plant_03.png" id="plant_03"] -[ext_resource type="Texture2D" uid="uid://bqp1nkk53y1is" path="res://assets/gardens/plants/garden_plant_04.png" id="plant_04"] -[ext_resource type="Texture2D" uid="uid://dvxnktx1wiyxp" path="res://assets/gardens/plants/garden_plant_05.png" id="plant_05"] -[ext_resource type="Texture2D" uid="uid://f2arml2f4b8p" path="res://assets/gardens/plants/garden_plant_06.png" id="plant_06"] -[ext_resource type="Texture2D" uid="uid://dufnm3bkfe5yv" path="res://assets/gardens/plants/garden_plant_07.png" id="plant_07"] -[ext_resource type="Texture2D" uid="uid://dt2a0dea0hv0c" path="res://assets/gardens/plants/garden_plant_08.png" id="plant_08"] +[ext_resource type="Texture2D" uid="uid://dvxnktx1wiyxp" path="res://assets/gardens/victory_assets/victory_asset_bubbles_01.png" id="4_knmfc"] +[ext_resource type="Texture2D" uid="uid://gm5x5p2f07rh" path="res://assets/gardens/victory_assets/victory_asset_plant_10.png" id="5_83oc2"] +[ext_resource type="Texture2D" uid="uid://blaltndbcv2yq" path="res://assets/gardens/victory_assets/victory_asset_plant_08.png" id="6_mevwn"] +[ext_resource type="Texture2D" uid="uid://co6vu63bybpnc" path="res://assets/gardens/victory_assets/victory_asset_plant_09.png" id="7_51os1"] +[ext_resource type="Texture2D" uid="uid://bv510d5r4dn82" path="res://assets/gardens/victory_assets/victory_asset_fragon_fly_01.png" id="8_gmb0q"] +[ext_resource type="Texture2D" uid="uid://dckd1xhcdf2ie" path="res://assets/gardens/victory_assets/victory_asset_plant_06.png" id="9_vc8yt"] +[ext_resource type="Texture2D" uid="uid://bpxc4vhri16pd" path="res://assets/gardens/victory_assets/victory_asset_pearl_01.png" id="10_h7v48"] +[ext_resource type="Texture2D" uid="uid://bsw6v8ix7bb2s" path="res://assets/gardens/turtle.png" id="12_clqys"] -[node name="Garden" type="Control"] +[node name="Garden" type="Control" unique_id=167073905] custom_minimum_size = Vector2(2400, 2.08165e-12) layout_mode = 3 anchors_preset = 15 @@ -23,24 +23,26 @@ grow_horizontal = 2 grow_vertical = 2 mouse_filter = 2 script = ExtResource("1_5owem") -title = "Garden 10" -unlocked_lesson = Color(0.227, 0.227, 0.557, 1) -unlocked_lesson_text = Color(0.722, 0.722, 0.941, 1) -completed_lesson = Color(0.722, 0.722, 0.941, 1) -completed_lesson_text = Color(0.133, 0.133, 0.369, 1) +title = "Purple Turtle Garden" +unlocked_lesson = Color(0.345098, 0.266667, 0.490196, 1) +unlocked_lesson_text = Color(0.894118, 0.827451, 0.937255, 1) +completed_lesson = Color(0.894118, 0.827451, 0.937255, 1) +completed_lesson_text = Color(0.345098, 0.266667, 0.490196, 1) -[node name="Background" type="TextureRect" parent="."] +[node name="Background" type="TextureRect" parent="." unique_id=1058030897] unique_name_in_owner = true +modulate = Color(0.454902, 0.352941, 0.647059, 1) layout_mode = 0 offset_left = 350.0 offset_top = 50.0 offset_right = 2050.0 offset_bottom = 1750.0 mouse_filter = 2 -texture = ExtResource("3_p7iv3") +texture = ExtResource("2_xkwcf") expand_mode = 1 -[node name="Plants" type="Control" parent="."] +[node name="Victory_Assets" type="Control" parent="." unique_id=787934313] +unique_name_in_owner = true layout_mode = 1 anchors_preset = 15 anchor_right = 1.0 @@ -49,103 +51,104 @@ grow_horizontal = 2 grow_vertical = 2 mouse_filter = 2 -[node name="Plant1" type="TextureRect" parent="Plants"] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) +[node name="Victory_Asset_01" type="TextureRect" parent="Victory_Assets" unique_id=1278004645] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) layout_mode = 0 -offset_left = 395.0 -offset_top = 475.0 -offset_right = 515.0 -offset_bottom = 1425.0 +offset_left = 761.0 +offset_top = 1263.0 +offset_right = 939.0 +offset_bottom = 1575.0 mouse_filter = 2 -texture = ExtResource("plant_01") +texture = ExtResource("3_w51id") expand_mode = 1 stretch_mode = 5 -[node name="Plant2" type="TextureRect" parent="Plants"] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) +[node name="Victory_Asset_02" type="TextureRect" parent="Victory_Assets" unique_id=1525586982] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) layout_mode = 0 -offset_left = 574.0 -offset_top = 1322.0 -offset_right = 744.0 -offset_bottom = 1592.0 -mouse_filter = 2 -texture = ExtResource("plant_02") -expand_mode = 1 -stretch_mode = 5 - -[node name="Plant3" type="TextureRect" parent="Plants"] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) -layout_mode = 0 -offset_left = 1178.0 -offset_top = 1058.0 -offset_right = 1618.0 +offset_left = 1043.0 +offset_top = 1142.0 +offset_right = 1157.0 offset_bottom = 1388.0 +rotation = 0.2443461 mouse_filter = 2 -texture = ExtResource("plant_03") +texture = ExtResource("4_knmfc") expand_mode = 1 stretch_mode = 5 -[node name="Plant4" type="TextureRect" parent="Plants"] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) +[node name="Victory_Asset_03" type="TextureRect" parent="Victory_Assets" unique_id=2071114773] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) layout_mode = 0 -offset_left = 864.0 -offset_top = 308.0 -offset_right = 1084.0 -offset_bottom = 628.0 +offset_left = 616.0 +offset_top = 648.0 +offset_right = 778.0 +offset_bottom = 812.0 mouse_filter = 2 -texture = ExtResource("plant_04") +texture = ExtResource("5_83oc2") expand_mode = 1 stretch_mode = 5 -[node name="Plant5" type="TextureRect" parent="Plants"] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) +[node name="Victory_Asset_04" type="TextureRect" parent="Victory_Assets" unique_id=1578211500] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) layout_mode = 0 -offset_left = 744.0 -offset_top = 688.0 -offset_right = 889.0 -offset_bottom = 998.0 +offset_left = 907.0 +offset_top = 275.0 +offset_right = 1233.0 +offset_bottom = 599.0 mouse_filter = 2 -texture = ExtResource("plant_05") +texture = ExtResource("6_mevwn") expand_mode = 1 stretch_mode = 5 -[node name="Plant6" type="TextureRect" parent="Plants"] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) +[node name="Victory_Asset_05" type="TextureRect" parent="Victory_Assets" unique_id=520271408] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) layout_mode = 0 -offset_left = 1742.0 -offset_top = 762.0 -offset_right = 1927.0 -offset_bottom = 1077.0 +offset_left = 1199.0 +offset_top = 1279.0 +offset_right = 1409.0 +offset_bottom = 1629.0 mouse_filter = 2 -texture = ExtResource("plant_06") +texture = ExtResource("7_51os1") expand_mode = 1 stretch_mode = 5 -[node name="Plant7" type="TextureRect" parent="Plants"] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) +[node name="Victory_Asset_06" type="TextureRect" parent="Victory_Assets" unique_id=213526714] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) layout_mode = 0 -offset_left = 880.0 -offset_top = 1172.0 -offset_right = 1010.0 -offset_bottom = 1592.0 +offset_left = 1337.0 +offset_top = 441.0 +offset_right = 1591.0 +offset_bottom = 563.0 mouse_filter = 2 -texture = ExtResource("plant_07") +texture = ExtResource("8_gmb0q") expand_mode = 1 stretch_mode = 5 -[node name="Plant8" type="TextureRect" parent="Plants"] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) +[node name="Victory_Asset_07" type="TextureRect" parent="Victory_Assets" unique_id=1466685334] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) layout_mode = 0 -offset_left = 1122.0 -offset_top = 288.0 -offset_right = 1472.0 -offset_bottom = 638.0 +offset_left = 1660.0 +offset_top = 526.0 +offset_right = 1978.0 +offset_bottom = 866.0 mouse_filter = 2 -texture = ExtResource("plant_08") +texture = ExtResource("9_vc8yt") expand_mode = 1 stretch_mode = 5 -[node name="Buttons" type="Control" parent="."] +[node name="Victory_Asset_08" type="TextureRect" parent="Victory_Assets" unique_id=2004645372] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) +layout_mode = 0 +offset_left = 1531.0 +offset_top = 1278.0 +offset_right = 1707.0 +offset_bottom = 1460.0 +mouse_filter = 2 +texture = ExtResource("10_h7v48") +expand_mode = 1 +stretch_mode = 5 + +[node name="Buttons" type="Control" parent="." unique_id=1964597] layout_mode = 1 anchors_preset = 15 anchor_right = 1.0 @@ -154,53 +157,65 @@ grow_horizontal = 2 grow_vertical = 2 mouse_filter = 2 -[node name="Slot1" parent="Buttons" instance=ExtResource("4_epm30")] +[node name="Slot1" parent="Buttons" unique_id=1361620593 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 584.0 -offset_top = 1066.0 -offset_right = 824.0 -offset_bottom = 1306.0 +offset_left = 494.0 +offset_top = 1052.0 +offset_right = 734.0 +offset_bottom = 1292.0 pivot_offset = Vector2(120, 120) -[node name="Slot2" parent="Buttons" instance=ExtResource("4_epm30")] +[node name="Slot2" parent="Buttons" unique_id=1025579258 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 867.0 -offset_top = 880.0 -offset_right = 1107.0 -offset_bottom = 1120.0 +offset_left = 762.0 +offset_top = 887.0 +offset_right = 1002.0 +offset_bottom = 1127.0 pivot_offset = Vector2(120, 120) -[node name="Slot3" parent="Buttons" instance=ExtResource("4_epm30")] +[node name="Slot3" parent="Buttons" unique_id=353688519 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 1170.0 -offset_top = 800.0 -offset_right = 1410.0 -offset_bottom = 1040.0 +offset_left = 1066.0 +offset_top = 810.0 +offset_right = 1306.0 +offset_bottom = 1050.0 pivot_offset = Vector2(120, 120) -[node name="Slot4" parent="Buttons" instance=ExtResource("4_epm30")] +[node name="Slot4" parent="Buttons" unique_id=1536126098 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 1445.0 -offset_top = 628.0 -offset_right = 1685.0 -offset_bottom = 868.0 +offset_left = 1405.0 +offset_top = 885.0 +offset_right = 1645.0 +offset_bottom = 1125.0 pivot_offset = Vector2(120, 120) -[node name="Slot5" parent="Buttons" instance=ExtResource("4_epm30")] +[node name="Slot5" parent="Buttons" unique_id=960033946 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 1744.0 -offset_top = 478.0 -offset_right = 1984.0 -offset_bottom = 718.0 +offset_left = 1720.0 +offset_top = 1020.0 +offset_right = 1960.0 +offset_bottom = 1260.0 pivot_offset = Vector2(120, 120) -[node name="Jellyfish" type="TextureRect" parent="."] +[node name="Turtle_01" type="TextureRect" parent="." unique_id=518902024] layout_mode = 0 -offset_left = 1511.0 -offset_top = 32.0 -offset_right = 1791.0 -offset_bottom = 512.0 +offset_left = 500.0 +offset_top = 155.0 +offset_right = 800.0 +offset_bottom = 455.0 mouse_filter = 2 -texture = ExtResource("jellyfish_tex") +texture = ExtResource("12_clqys") +expand_mode = 1 +stretch_mode = 5 + +[node name="Turtle_02" type="TextureRect" parent="." unique_id=1563614410] +layout_mode = 0 +offset_left = 381.0 +offset_top = 439.0 +offset_right = 531.0 +offset_bottom = 589.0 +rotation = -0.2443461 +mouse_filter = 2 +texture = ExtResource("12_clqys") expand_mode = 1 stretch_mode = 5 diff --git a/resources/gardens/garden_11.tscn b/resources/gardens/garden_11.tscn index 34488726..f192151f 100644 --- a/resources/gardens/garden_11.tscn +++ b/resources/gardens/garden_11.tscn @@ -1,19 +1,19 @@ -[gd_scene format=3] +[gd_scene format=3 uid="uid://c2yff8xrssk83"] [ext_resource type="Script" uid="uid://ch5h4p1o54whq" path="res://resources/gardens/garden.gd" id="1_5owem"] -[ext_resource type="Texture2D" uid="uid://d26hapg1hf8a6" path="res://assets/gardens/gardens/garden_01.png" id="3_p7iv3"] +[ext_resource type="Texture2D" uid="uid://4wt50lu3cwbl" path="res://assets/gardens/gardens/garden_02.png" id="2_m2rr7"] +[ext_resource type="Texture2D" uid="uid://dro75vltqiq6j" path="res://assets/gardens/victory_assets/victory_asset_plant_07.png" id="3_th10l"] [ext_resource type="PackedScene" uid="uid://delcgui3v0eek" path="res://sources/lesson_screen/lesson_button.tscn" id="4_epm30"] -[ext_resource type="Texture2D" uid="uid://bfqwlmmliem8f" path="res://assets/gardens/jellyfish.png" id="jellyfish_tex"] -[ext_resource type="Texture2D" uid="uid://dcekseb1b3ruw" path="res://assets/gardens/plants/garden_plant_01.png" id="plant_01"] -[ext_resource type="Texture2D" uid="uid://clkr31osbqs7u" path="res://assets/gardens/plants/garden_plant_02.png" id="plant_02"] -[ext_resource type="Texture2D" uid="uid://dgssb0oonuqku" path="res://assets/gardens/plants/garden_plant_03.png" id="plant_03"] -[ext_resource type="Texture2D" uid="uid://bqp1nkk53y1is" path="res://assets/gardens/plants/garden_plant_04.png" id="plant_04"] -[ext_resource type="Texture2D" uid="uid://dvxnktx1wiyxp" path="res://assets/gardens/plants/garden_plant_05.png" id="plant_05"] -[ext_resource type="Texture2D" uid="uid://f2arml2f4b8p" path="res://assets/gardens/plants/garden_plant_06.png" id="plant_06"] -[ext_resource type="Texture2D" uid="uid://dufnm3bkfe5yv" path="res://assets/gardens/plants/garden_plant_07.png" id="plant_07"] -[ext_resource type="Texture2D" uid="uid://dt2a0dea0hv0c" path="res://assets/gardens/plants/garden_plant_08.png" id="plant_08"] +[ext_resource type="Texture2D" uid="uid://dvxnktx1wiyxp" path="res://assets/gardens/victory_assets/victory_asset_bubbles_01.png" id="4_t2ok3"] +[ext_resource type="Texture2D" uid="uid://gm5x5p2f07rh" path="res://assets/gardens/victory_assets/victory_asset_plant_10.png" id="5_26esv"] +[ext_resource type="Texture2D" uid="uid://blaltndbcv2yq" path="res://assets/gardens/victory_assets/victory_asset_plant_08.png" id="6_lswb8"] +[ext_resource type="Texture2D" uid="uid://co6vu63bybpnc" path="res://assets/gardens/victory_assets/victory_asset_plant_09.png" id="7_m37ct"] +[ext_resource type="Texture2D" uid="uid://bv510d5r4dn82" path="res://assets/gardens/victory_assets/victory_asset_fragon_fly_01.png" id="8_uhx8c"] +[ext_resource type="Texture2D" uid="uid://dckd1xhcdf2ie" path="res://assets/gardens/victory_assets/victory_asset_plant_06.png" id="9_1xmw6"] +[ext_resource type="Texture2D" uid="uid://bpxc4vhri16pd" path="res://assets/gardens/victory_assets/victory_asset_pearl_01.png" id="10_o4mjf"] +[ext_resource type="Texture2D" uid="uid://bsw6v8ix7bb2s" path="res://assets/gardens/turtle.png" id="12_o7rdf"] -[node name="Garden" type="Control"] +[node name="Garden" type="Control" unique_id=167073905] custom_minimum_size = Vector2(2400, 2.08165e-12) layout_mode = 3 anchors_preset = 15 @@ -23,24 +23,26 @@ grow_horizontal = 2 grow_vertical = 2 mouse_filter = 2 script = ExtResource("1_5owem") -title = "Garden 11" -unlocked_lesson = Color(0.102, 0.478, 0.416, 1) -unlocked_lesson_text = Color(0.659, 0.941, 0.878, 1) -completed_lesson = Color(0.659, 0.941, 0.878, 1) -completed_lesson_text = Color(0.055, 0.322, 0.282, 1) +title = "Purple Turtle Garden" +unlocked_lesson = Color(0.52156866, 0.03137255, 0.40392157, 1) +unlocked_lesson_text = Color(0.92156863, 0.7529412, 0.87058824, 1) +completed_lesson = Color(0.92156863, 0.7529412, 0.87058824, 1) +completed_lesson_text = Color(0.52156866, 0.03137255, 0.40392157, 1) -[node name="Background" type="TextureRect" parent="."] +[node name="Background" type="TextureRect" parent="." unique_id=1058030897] unique_name_in_owner = true +modulate = Color(0.83137256, 0.2901961, 0.7019608, 1) layout_mode = 0 offset_left = 350.0 offset_top = 50.0 offset_right = 2050.0 offset_bottom = 1750.0 mouse_filter = 2 -texture = ExtResource("3_p7iv3") +texture = ExtResource("2_m2rr7") expand_mode = 1 -[node name="Plants" type="Control" parent="."] +[node name="Victory_Assets" type="Control" parent="." unique_id=787934313] +unique_name_in_owner = true layout_mode = 1 anchors_preset = 15 anchor_right = 1.0 @@ -49,103 +51,104 @@ grow_horizontal = 2 grow_vertical = 2 mouse_filter = 2 -[node name="Plant1" type="TextureRect" parent="Plants"] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) +[node name="Victory_Asset_01" type="TextureRect" parent="Victory_Assets" unique_id=1278004645] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) layout_mode = 0 -offset_left = 395.0 -offset_top = 475.0 -offset_right = 515.0 -offset_bottom = 1425.0 +offset_left = 761.0 +offset_top = 1263.0 +offset_right = 939.0 +offset_bottom = 1575.0 mouse_filter = 2 -texture = ExtResource("plant_01") +texture = ExtResource("3_th10l") expand_mode = 1 stretch_mode = 5 -[node name="Plant2" type="TextureRect" parent="Plants"] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) +[node name="Victory_Asset_02" type="TextureRect" parent="Victory_Assets" unique_id=1525586982] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) layout_mode = 0 -offset_left = 574.0 -offset_top = 1322.0 -offset_right = 744.0 -offset_bottom = 1592.0 -mouse_filter = 2 -texture = ExtResource("plant_02") -expand_mode = 1 -stretch_mode = 5 - -[node name="Plant3" type="TextureRect" parent="Plants"] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) -layout_mode = 0 -offset_left = 1178.0 -offset_top = 1058.0 -offset_right = 1618.0 +offset_left = 1043.0 +offset_top = 1142.0 +offset_right = 1157.0 offset_bottom = 1388.0 +rotation = 0.2443461 mouse_filter = 2 -texture = ExtResource("plant_03") +texture = ExtResource("4_t2ok3") expand_mode = 1 stretch_mode = 5 -[node name="Plant4" type="TextureRect" parent="Plants"] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) +[node name="Victory_Asset_03" type="TextureRect" parent="Victory_Assets" unique_id=2071114773] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) layout_mode = 0 -offset_left = 864.0 -offset_top = 308.0 -offset_right = 1084.0 -offset_bottom = 628.0 +offset_left = 616.0 +offset_top = 648.0 +offset_right = 778.0 +offset_bottom = 812.0 mouse_filter = 2 -texture = ExtResource("plant_04") +texture = ExtResource("5_26esv") expand_mode = 1 stretch_mode = 5 -[node name="Plant5" type="TextureRect" parent="Plants"] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) +[node name="Victory_Asset_04" type="TextureRect" parent="Victory_Assets" unique_id=1578211500] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) layout_mode = 0 -offset_left = 744.0 -offset_top = 688.0 -offset_right = 889.0 -offset_bottom = 998.0 +offset_left = 907.0 +offset_top = 275.0 +offset_right = 1233.0 +offset_bottom = 599.0 mouse_filter = 2 -texture = ExtResource("plant_05") +texture = ExtResource("6_lswb8") expand_mode = 1 stretch_mode = 5 -[node name="Plant6" type="TextureRect" parent="Plants"] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) +[node name="Victory_Asset_05" type="TextureRect" parent="Victory_Assets" unique_id=520271408] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) layout_mode = 0 -offset_left = 1742.0 -offset_top = 762.0 -offset_right = 1927.0 -offset_bottom = 1077.0 +offset_left = 1199.0 +offset_top = 1279.0 +offset_right = 1409.0 +offset_bottom = 1629.0 mouse_filter = 2 -texture = ExtResource("plant_06") +texture = ExtResource("7_m37ct") expand_mode = 1 stretch_mode = 5 -[node name="Plant7" type="TextureRect" parent="Plants"] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) +[node name="Victory_Asset_06" type="TextureRect" parent="Victory_Assets" unique_id=213526714] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) layout_mode = 0 -offset_left = 880.0 -offset_top = 1172.0 -offset_right = 1010.0 -offset_bottom = 1592.0 +offset_left = 1337.0 +offset_top = 441.0 +offset_right = 1591.0 +offset_bottom = 563.0 mouse_filter = 2 -texture = ExtResource("plant_07") +texture = ExtResource("8_uhx8c") expand_mode = 1 stretch_mode = 5 -[node name="Plant8" type="TextureRect" parent="Plants"] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) +[node name="Victory_Asset_07" type="TextureRect" parent="Victory_Assets" unique_id=1466685334] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) layout_mode = 0 -offset_left = 1122.0 -offset_top = 288.0 -offset_right = 1472.0 -offset_bottom = 638.0 +offset_left = 1660.0 +offset_top = 526.0 +offset_right = 1978.0 +offset_bottom = 866.0 mouse_filter = 2 -texture = ExtResource("plant_08") +texture = ExtResource("9_1xmw6") expand_mode = 1 stretch_mode = 5 -[node name="Buttons" type="Control" parent="."] +[node name="Victory_Asset_08" type="TextureRect" parent="Victory_Assets" unique_id=2004645372] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) +layout_mode = 0 +offset_left = 1531.0 +offset_top = 1278.0 +offset_right = 1707.0 +offset_bottom = 1460.0 +mouse_filter = 2 +texture = ExtResource("10_o4mjf") +expand_mode = 1 +stretch_mode = 5 + +[node name="Buttons" type="Control" parent="." unique_id=1964597] layout_mode = 1 anchors_preset = 15 anchor_right = 1.0 @@ -154,53 +157,65 @@ grow_horizontal = 2 grow_vertical = 2 mouse_filter = 2 -[node name="Slot1" parent="Buttons" instance=ExtResource("4_epm30")] +[node name="Slot1" parent="Buttons" unique_id=1361620593 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 584.0 -offset_top = 1066.0 -offset_right = 824.0 -offset_bottom = 1306.0 +offset_left = 494.0 +offset_top = 1052.0 +offset_right = 734.0 +offset_bottom = 1292.0 pivot_offset = Vector2(120, 120) -[node name="Slot2" parent="Buttons" instance=ExtResource("4_epm30")] +[node name="Slot2" parent="Buttons" unique_id=1025579258 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 867.0 -offset_top = 880.0 -offset_right = 1107.0 -offset_bottom = 1120.0 +offset_left = 762.0 +offset_top = 887.0 +offset_right = 1002.0 +offset_bottom = 1127.0 pivot_offset = Vector2(120, 120) -[node name="Slot3" parent="Buttons" instance=ExtResource("4_epm30")] +[node name="Slot3" parent="Buttons" unique_id=353688519 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 1170.0 -offset_top = 800.0 -offset_right = 1410.0 -offset_bottom = 1040.0 +offset_left = 1066.0 +offset_top = 810.0 +offset_right = 1306.0 +offset_bottom = 1050.0 pivot_offset = Vector2(120, 120) -[node name="Slot4" parent="Buttons" instance=ExtResource("4_epm30")] +[node name="Slot4" parent="Buttons" unique_id=1536126098 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 1445.0 -offset_top = 628.0 -offset_right = 1685.0 -offset_bottom = 868.0 +offset_left = 1405.0 +offset_top = 885.0 +offset_right = 1645.0 +offset_bottom = 1125.0 pivot_offset = Vector2(120, 120) -[node name="Slot5" parent="Buttons" instance=ExtResource("4_epm30")] +[node name="Slot5" parent="Buttons" unique_id=960033946 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 1744.0 -offset_top = 478.0 -offset_right = 1984.0 -offset_bottom = 718.0 +offset_left = 1720.0 +offset_top = 1020.0 +offset_right = 1960.0 +offset_bottom = 1260.0 pivot_offset = Vector2(120, 120) -[node name="Jellyfish" type="TextureRect" parent="."] +[node name="Turtle_01" type="TextureRect" parent="." unique_id=518902024] layout_mode = 0 -offset_left = 1511.0 -offset_top = 32.0 -offset_right = 1791.0 -offset_bottom = 512.0 +offset_left = 500.0 +offset_top = 155.0 +offset_right = 800.0 +offset_bottom = 455.0 mouse_filter = 2 -texture = ExtResource("jellyfish_tex") +texture = ExtResource("12_o7rdf") +expand_mode = 1 +stretch_mode = 5 + +[node name="Turtle_02" type="TextureRect" parent="." unique_id=1563614410] +layout_mode = 0 +offset_left = 381.0 +offset_top = 439.0 +offset_right = 531.0 +offset_bottom = 589.0 +rotation = -0.2443461 +mouse_filter = 2 +texture = ExtResource("12_o7rdf") expand_mode = 1 stretch_mode = 5 diff --git a/resources/gardens/garden_12.tscn b/resources/gardens/garden_12.tscn index cbc670cf..552f7b0d 100644 --- a/resources/gardens/garden_12.tscn +++ b/resources/gardens/garden_12.tscn @@ -1,19 +1,19 @@ -[gd_scene format=3] +[gd_scene format=3 uid="uid://dlq2i1hs2w3n6"] [ext_resource type="Script" uid="uid://ch5h4p1o54whq" path="res://resources/gardens/garden.gd" id="1_5owem"] -[ext_resource type="Texture2D" uid="uid://d26hapg1hf8a6" path="res://assets/gardens/gardens/garden_01.png" id="3_p7iv3"] +[ext_resource type="Texture2D" uid="uid://4wt50lu3cwbl" path="res://assets/gardens/gardens/garden_02.png" id="2_m7voh"] +[ext_resource type="Texture2D" uid="uid://dro75vltqiq6j" path="res://assets/gardens/victory_assets/victory_asset_plant_07.png" id="3_g51bh"] [ext_resource type="PackedScene" uid="uid://delcgui3v0eek" path="res://sources/lesson_screen/lesson_button.tscn" id="4_epm30"] -[ext_resource type="Texture2D" uid="uid://bfqwlmmliem8f" path="res://assets/gardens/jellyfish.png" id="jellyfish_tex"] -[ext_resource type="Texture2D" uid="uid://dcekseb1b3ruw" path="res://assets/gardens/plants/garden_plant_01.png" id="plant_01"] -[ext_resource type="Texture2D" uid="uid://clkr31osbqs7u" path="res://assets/gardens/plants/garden_plant_02.png" id="plant_02"] -[ext_resource type="Texture2D" uid="uid://dgssb0oonuqku" path="res://assets/gardens/plants/garden_plant_03.png" id="plant_03"] -[ext_resource type="Texture2D" uid="uid://bqp1nkk53y1is" path="res://assets/gardens/plants/garden_plant_04.png" id="plant_04"] -[ext_resource type="Texture2D" uid="uid://dvxnktx1wiyxp" path="res://assets/gardens/plants/garden_plant_05.png" id="plant_05"] -[ext_resource type="Texture2D" uid="uid://f2arml2f4b8p" path="res://assets/gardens/plants/garden_plant_06.png" id="plant_06"] -[ext_resource type="Texture2D" uid="uid://dufnm3bkfe5yv" path="res://assets/gardens/plants/garden_plant_07.png" id="plant_07"] -[ext_resource type="Texture2D" uid="uid://dt2a0dea0hv0c" path="res://assets/gardens/plants/garden_plant_08.png" id="plant_08"] +[ext_resource type="Texture2D" uid="uid://dvxnktx1wiyxp" path="res://assets/gardens/victory_assets/victory_asset_bubbles_01.png" id="4_g6q52"] +[ext_resource type="Texture2D" uid="uid://gm5x5p2f07rh" path="res://assets/gardens/victory_assets/victory_asset_plant_10.png" id="5_7t2oc"] +[ext_resource type="Texture2D" uid="uid://blaltndbcv2yq" path="res://assets/gardens/victory_assets/victory_asset_plant_08.png" id="6_oyav3"] +[ext_resource type="Texture2D" uid="uid://co6vu63bybpnc" path="res://assets/gardens/victory_assets/victory_asset_plant_09.png" id="7_v0mjc"] +[ext_resource type="Texture2D" uid="uid://bv510d5r4dn82" path="res://assets/gardens/victory_assets/victory_asset_fragon_fly_01.png" id="8_3wp2b"] +[ext_resource type="Texture2D" uid="uid://dckd1xhcdf2ie" path="res://assets/gardens/victory_assets/victory_asset_plant_06.png" id="9_8l6wq"] +[ext_resource type="Texture2D" uid="uid://bpxc4vhri16pd" path="res://assets/gardens/victory_assets/victory_asset_pearl_01.png" id="10_etg6n"] +[ext_resource type="Texture2D" uid="uid://bsw6v8ix7bb2s" path="res://assets/gardens/turtle.png" id="12_hjdxs"] -[node name="Garden" type="Control"] +[node name="Garden" type="Control" unique_id=167073905] custom_minimum_size = Vector2(2400, 2.08165e-12) layout_mode = 3 anchors_preset = 15 @@ -23,24 +23,26 @@ grow_horizontal = 2 grow_vertical = 2 mouse_filter = 2 script = ExtResource("1_5owem") -title = "Garden 12" -unlocked_lesson = Color(0.478, 0.165, 0.431, 1) -unlocked_lesson_text = Color(0.878, 0.659, 0.847, 1) -completed_lesson = Color(0.878, 0.659, 0.847, 1) -completed_lesson_text = Color(0.314, 0.102, 0.282, 1) +title = "Purple Turtle Garden" +unlocked_lesson = Color(0.345098, 0.266667, 0.490196, 1) +unlocked_lesson_text = Color(0.894118, 0.827451, 0.937255, 1) +completed_lesson = Color(0.894118, 0.827451, 0.937255, 1) +completed_lesson_text = Color(0.345098, 0.266667, 0.490196, 1) -[node name="Background" type="TextureRect" parent="."] +[node name="Background" type="TextureRect" parent="." unique_id=1058030897] unique_name_in_owner = true +modulate = Color(0.454902, 0.352941, 0.647059, 1) layout_mode = 0 offset_left = 350.0 offset_top = 50.0 offset_right = 2050.0 offset_bottom = 1750.0 mouse_filter = 2 -texture = ExtResource("3_p7iv3") +texture = ExtResource("2_m7voh") expand_mode = 1 -[node name="Plants" type="Control" parent="."] +[node name="Victory_Assets" type="Control" parent="." unique_id=787934313] +unique_name_in_owner = true layout_mode = 1 anchors_preset = 15 anchor_right = 1.0 @@ -49,103 +51,104 @@ grow_horizontal = 2 grow_vertical = 2 mouse_filter = 2 -[node name="Plant1" type="TextureRect" parent="Plants"] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) +[node name="Victory_Asset_01" type="TextureRect" parent="Victory_Assets" unique_id=1278004645] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) layout_mode = 0 -offset_left = 395.0 -offset_top = 475.0 -offset_right = 515.0 -offset_bottom = 1425.0 +offset_left = 761.0 +offset_top = 1263.0 +offset_right = 939.0 +offset_bottom = 1575.0 mouse_filter = 2 -texture = ExtResource("plant_01") +texture = ExtResource("3_g51bh") expand_mode = 1 stretch_mode = 5 -[node name="Plant2" type="TextureRect" parent="Plants"] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) +[node name="Victory_Asset_02" type="TextureRect" parent="Victory_Assets" unique_id=1525586982] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) layout_mode = 0 -offset_left = 574.0 -offset_top = 1322.0 -offset_right = 744.0 -offset_bottom = 1592.0 -mouse_filter = 2 -texture = ExtResource("plant_02") -expand_mode = 1 -stretch_mode = 5 - -[node name="Plant3" type="TextureRect" parent="Plants"] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) -layout_mode = 0 -offset_left = 1178.0 -offset_top = 1058.0 -offset_right = 1618.0 +offset_left = 1043.0 +offset_top = 1142.0 +offset_right = 1157.0 offset_bottom = 1388.0 +rotation = 0.2443461 mouse_filter = 2 -texture = ExtResource("plant_03") +texture = ExtResource("4_g6q52") expand_mode = 1 stretch_mode = 5 -[node name="Plant4" type="TextureRect" parent="Plants"] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) +[node name="Victory_Asset_03" type="TextureRect" parent="Victory_Assets" unique_id=2071114773] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) layout_mode = 0 -offset_left = 864.0 -offset_top = 308.0 -offset_right = 1084.0 -offset_bottom = 628.0 +offset_left = 616.0 +offset_top = 648.0 +offset_right = 778.0 +offset_bottom = 812.0 mouse_filter = 2 -texture = ExtResource("plant_04") +texture = ExtResource("5_7t2oc") expand_mode = 1 stretch_mode = 5 -[node name="Plant5" type="TextureRect" parent="Plants"] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) +[node name="Victory_Asset_04" type="TextureRect" parent="Victory_Assets" unique_id=1578211500] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) layout_mode = 0 -offset_left = 744.0 -offset_top = 688.0 -offset_right = 889.0 -offset_bottom = 998.0 +offset_left = 907.0 +offset_top = 275.0 +offset_right = 1233.0 +offset_bottom = 599.0 mouse_filter = 2 -texture = ExtResource("plant_05") +texture = ExtResource("6_oyav3") expand_mode = 1 stretch_mode = 5 -[node name="Plant6" type="TextureRect" parent="Plants"] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) +[node name="Victory_Asset_05" type="TextureRect" parent="Victory_Assets" unique_id=520271408] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) layout_mode = 0 -offset_left = 1742.0 -offset_top = 762.0 -offset_right = 1927.0 -offset_bottom = 1077.0 +offset_left = 1199.0 +offset_top = 1279.0 +offset_right = 1409.0 +offset_bottom = 1629.0 mouse_filter = 2 -texture = ExtResource("plant_06") +texture = ExtResource("7_v0mjc") expand_mode = 1 stretch_mode = 5 -[node name="Plant7" type="TextureRect" parent="Plants"] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) +[node name="Victory_Asset_06" type="TextureRect" parent="Victory_Assets" unique_id=213526714] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) layout_mode = 0 -offset_left = 880.0 -offset_top = 1172.0 -offset_right = 1010.0 -offset_bottom = 1592.0 +offset_left = 1337.0 +offset_top = 441.0 +offset_right = 1591.0 +offset_bottom = 563.0 mouse_filter = 2 -texture = ExtResource("plant_07") +texture = ExtResource("8_3wp2b") expand_mode = 1 stretch_mode = 5 -[node name="Plant8" type="TextureRect" parent="Plants"] -modulate = Color(0.0392157, 0.333333, 0.356863, 1) +[node name="Victory_Asset_07" type="TextureRect" parent="Victory_Assets" unique_id=1466685334] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) layout_mode = 0 -offset_left = 1122.0 -offset_top = 288.0 -offset_right = 1472.0 -offset_bottom = 638.0 +offset_left = 1660.0 +offset_top = 526.0 +offset_right = 1978.0 +offset_bottom = 866.0 mouse_filter = 2 -texture = ExtResource("plant_08") +texture = ExtResource("9_8l6wq") expand_mode = 1 stretch_mode = 5 -[node name="Buttons" type="Control" parent="."] +[node name="Victory_Asset_08" type="TextureRect" parent="Victory_Assets" unique_id=2004645372] +modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) +layout_mode = 0 +offset_left = 1531.0 +offset_top = 1278.0 +offset_right = 1707.0 +offset_bottom = 1460.0 +mouse_filter = 2 +texture = ExtResource("10_etg6n") +expand_mode = 1 +stretch_mode = 5 + +[node name="Buttons" type="Control" parent="." unique_id=1964597] layout_mode = 1 anchors_preset = 15 anchor_right = 1.0 @@ -154,53 +157,65 @@ grow_horizontal = 2 grow_vertical = 2 mouse_filter = 2 -[node name="Slot1" parent="Buttons" instance=ExtResource("4_epm30")] +[node name="Slot1" parent="Buttons" unique_id=1361620593 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 584.0 -offset_top = 1066.0 -offset_right = 824.0 -offset_bottom = 1306.0 +offset_left = 494.0 +offset_top = 1052.0 +offset_right = 734.0 +offset_bottom = 1292.0 pivot_offset = Vector2(120, 120) -[node name="Slot2" parent="Buttons" instance=ExtResource("4_epm30")] +[node name="Slot2" parent="Buttons" unique_id=1025579258 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 867.0 -offset_top = 880.0 -offset_right = 1107.0 -offset_bottom = 1120.0 +offset_left = 762.0 +offset_top = 887.0 +offset_right = 1002.0 +offset_bottom = 1127.0 pivot_offset = Vector2(120, 120) -[node name="Slot3" parent="Buttons" instance=ExtResource("4_epm30")] +[node name="Slot3" parent="Buttons" unique_id=353688519 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 1170.0 -offset_top = 800.0 -offset_right = 1410.0 -offset_bottom = 1040.0 +offset_left = 1066.0 +offset_top = 810.0 +offset_right = 1306.0 +offset_bottom = 1050.0 pivot_offset = Vector2(120, 120) -[node name="Slot4" parent="Buttons" instance=ExtResource("4_epm30")] +[node name="Slot4" parent="Buttons" unique_id=1536126098 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 1445.0 -offset_top = 628.0 -offset_right = 1685.0 -offset_bottom = 868.0 +offset_left = 1405.0 +offset_top = 885.0 +offset_right = 1645.0 +offset_bottom = 1125.0 pivot_offset = Vector2(120, 120) -[node name="Slot5" parent="Buttons" instance=ExtResource("4_epm30")] +[node name="Slot5" parent="Buttons" unique_id=960033946 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 1744.0 -offset_top = 478.0 -offset_right = 1984.0 -offset_bottom = 718.0 +offset_left = 1720.0 +offset_top = 1020.0 +offset_right = 1960.0 +offset_bottom = 1260.0 pivot_offset = Vector2(120, 120) -[node name="Jellyfish" type="TextureRect" parent="."] +[node name="Turtle_01" type="TextureRect" parent="." unique_id=518902024] layout_mode = 0 -offset_left = 1511.0 -offset_top = 32.0 -offset_right = 1791.0 -offset_bottom = 512.0 +offset_left = 500.0 +offset_top = 155.0 +offset_right = 800.0 +offset_bottom = 455.0 mouse_filter = 2 -texture = ExtResource("jellyfish_tex") +texture = ExtResource("12_hjdxs") +expand_mode = 1 +stretch_mode = 5 + +[node name="Turtle_02" type="TextureRect" parent="." unique_id=1563614410] +layout_mode = 0 +offset_left = 381.0 +offset_top = 439.0 +offset_right = 531.0 +offset_bottom = 589.0 +rotation = -0.2443461 +mouse_filter = 2 +texture = ExtResource("12_hjdxs") expand_mode = 1 stretch_mode = 5 diff --git a/sources/gardens/gardens.gd b/sources/gardens/gardens.gd index 1977c5e5..3c6f808a 100644 --- a/sources/gardens/gardens.gd +++ b/sources/gardens/gardens.gd @@ -196,7 +196,7 @@ func _apply_progression_to_gardens(transition_context: Dictionary) -> void: garden_control.max_progression = float(total_minigames) lesson_index += 1 - garden_control.update_plants_visibility(completed_minigames_total, total_minigames) + garden_control.update_victory_assets_visibility(completed_minigames_total, total_minigames) _set_up_boss_buttons() #endregion From de395ab036980549c87a30184a0e9f75d8c65ce2 Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Wed, 29 Apr 2026 10:59:34 +0200 Subject: [PATCH 062/111] Add scrolling clouds to the gardens scene Extend CloudsManager with optional scroll-driven parallax and auto-population: - New scroll_offset property feeds an external horizontal scroll value; each cloud's rendered X is drift_x - scroll_offset * parallax_factor. - min_parallax_factor / max_parallax_factor are interpolated by the same depth factor that drives speed and scale, so closer clouds parallax more. - spawn_width + clouds_per_screen + configure_world() let the manager duplicate its template children to cover wider scrollable worlds. - Defaults preserve the previous behavior, so parakeets / penguin / monkeys / boss minigames keep their existing per-frame drift unchanged. In gardens.tscn, add a CloudsLayer (CanvasLayer, layer = 1) on top of the existing UI with three template cloud sprites (transparent via modulate alpha, mouse passthrough by virtue of being Sprite2D). gardens.gd configures the cloud world width to garden_count * GARDEN_SIZE after lessons are set up, then forwards scroll_container.scroll_horizontal to clouds.scroll_offset each frame so clouds drift naturally and parallax with garden scrolling. --- sources/gardens/gardens.gd | 17 ++++- sources/gardens/gardens.tscn | 30 ++++++++ sources/utils/clouds_manager.gd | 120 +++++++++++++++++++++++++++----- 3 files changed, 149 insertions(+), 18 deletions(-) diff --git a/sources/gardens/gardens.gd b/sources/gardens/gardens.gd index 3c6f808a..dacaea35 100644 --- a/sources/gardens/gardens.gd +++ b/sources/gardens/gardens.gd @@ -79,6 +79,7 @@ var is_back_button_hold_active: bool = false @onready var line_audio_stream_player: AudioStreamPlayer2D = %LineAudioStreamPlayer @onready var scroll_container: ScrollContainer = $ScrollContainer @onready var parallax_background: ParallaxBackground = %ParallaxBackground +@onready var clouds: Node2D = %Clouds @onready var scroll_end_spacer: Control = $"ScrollContainer/HBoxContainer/Control2" @onready var boss_buttons_container: Control = %BossButtons @onready var minigame_selection: Control = %MinigameSelection @@ -203,6 +204,18 @@ func _apply_progression_to_gardens(transition_context: Dictionary) -> void: #region Scene setup and ready sequence +func _configure_clouds_for_gardens() -> void: + if not clouds or not garden_parent: + return + # Spread clouds across the full scrollable garden width so they remain + # visible regardless of which garden the player scrolls to. + var garden_count: int = garden_parent.get_child_count() + if garden_count <= 0: + return + var content_world_width: float = float(garden_count * GARDEN_SIZE) + clouds.configure_world(content_world_width) + + func _scroll_to_starting_garden(_transition_context: Dictionary) -> void: if transition_data: if transition_data.has("current_garden_index"): @@ -336,7 +349,8 @@ func _ready() -> void: scroll_end_base_width = scroll_end_spacer.custom_minimum_size.x gardens_layout = get_session_layout(lesson_count) _set_up_lessons() - + _configure_clouds_for_gardens() + # If there is no data, skips the rest if not UserDataManager.student_progression: Log.error("Gardens: Ready: No data for student progression") @@ -634,6 +648,7 @@ func _process(_delta: float) -> void: unlocked_line.position.x = - scroll_container.scroll_horizontal boss_buttons_container.position.x = - scroll_container.scroll_horizontal parallax_background.scroll_offset.x = - scroll_container.scroll_horizontal + clouds.scroll_offset = scroll_container.scroll_horizontal func _process_back_button_hold(delta: float) -> void: diff --git a/sources/gardens/gardens.tscn b/sources/gardens/gardens.tscn index b28190c8..a082e58f 100644 --- a/sources/gardens/gardens.tscn +++ b/sources/gardens/gardens.tscn @@ -36,6 +36,10 @@ [ext_resource type="Texture2D" uid="uid://ub1dnysbojn8" path="res://assets/minigames/minigame_ui/graphic/button_kalulu_pressed.png" id="42_l35j3"] [ext_resource type="Texture2D" uid="uid://crnxawhf68po3" path="res://assets/minigames/minigame_ui/graphic/button_kalulu_disabled.png" id="43_jfyfk"] [ext_resource type="PackedScene" uid="uid://blos4rn53qkwg" path="res://sources/minigames/base/kalulu_ingame.tscn" id="44_okr34"] +[ext_resource type="Script" uid="uid://cgtd34f7vi2tj" path="res://sources/utils/clouds_manager.gd" id="45_clouds"] +[ext_resource type="Texture2D" uid="uid://rx270y4n7tul" path="res://assets/minigames/parakeets/graphic/cloud_1.png" id="46_cloud1"] +[ext_resource type="Texture2D" uid="uid://dphj3hqfnnw4p" path="res://assets/minigames/parakeets/graphic/cloud_2.png" id="47_cloud2"] +[ext_resource type="Texture2D" uid="uid://1btgagsporxa" path="res://assets/minigames/parakeets/graphic/cloud_3.png" id="48_cloud3"] [sub_resource type="CanvasItemMaterial" id="CanvasItemMaterial_ey6av"] blend_mode = 1 @@ -476,6 +480,32 @@ grow_vertical = 2 unique_name_in_owner = true visible = false +[node name="CloudsLayer" type="CanvasLayer" parent="." unique_id=100000001] +layer = 1 + +[node name="Clouds" type="Node2D" parent="CloudsLayer" unique_id=100000002] +unique_name_in_owner = true +modulate = Color(1, 1, 1, 0.65) +script = ExtResource("45_clouds") +min_speed = 15.0 +max_speed = 45.0 +min_y = 60.0 +max_y = 1100.0 +min_scale = 0.5 +max_scale = 1.2 +min_parallax_factor = 0.5 +max_parallax_factor = 1.0 +clouds_per_screen = 3 + +[node name="cloud_1" type="Sprite2D" parent="CloudsLayer/Clouds" unique_id=100000003] +texture = ExtResource("46_cloud1") + +[node name="cloud_2" type="Sprite2D" parent="CloudsLayer/Clouds" unique_id=100000004] +texture = ExtResource("47_cloud2") + +[node name="cloud_3" type="Sprite2D" parent="CloudsLayer/Clouds" unique_id=100000005] +texture = ExtResource("48_cloud3") + [connection signal="gui_input" from="ScrollContainer" to="." method="_on_scroll_container_gui_input"] [connection signal="pressed" from="CanvasLayer/MinigameSelection/LessonButton" to="." method="_on_lesson_button_pressed"] [connection signal="button_down" from="CanvasLayer/BackButton" to="." method="_on_back_button_button_down"] diff --git a/sources/utils/clouds_manager.gd b/sources/utils/clouds_manager.gd index eecd3940..52a808a4 100644 --- a/sources/utils/clouds_manager.gd +++ b/sources/utils/clouds_manager.gd @@ -7,31 +7,102 @@ extends Node2D @export var min_scale: float = 0.6 @export var max_scale: float = 1.3 +# Parallax factor applied to the externally provided scroll_offset. +# 0.0 = cloud is fully decoupled from the scroll (background-locked), +# 1.0 = cloud moves at the same speed as the scroll, +# > 1.0 = cloud moves faster than the scroll (foreground feel). +# The actual factor for each cloud is interpolated between min/max +# using the same depth_factor used for speed and scale (closer clouds get the max value). +@export var min_parallax_factor: float = 1.0 +@export var max_parallax_factor: float = 1.0 + +# Total horizontal world width across which clouds are initially spread. +# When 0, defaults to the viewport width (legacy behavior used by minigames). +@export var spawn_width: float = 0.0 + +# When > 0 and spawn_width > 0, the manager duplicates its existing children +# to reach roughly clouds_per_screen * (spawn_width / viewport_width) clouds. +# 0 means no auto-population (only the children authored in the scene). +@export var clouds_per_screen: int = 0 + +# Externally driven scroll value (e.g. the Gardens horizontal scroll offset). +# Each cloud's rendered X is computed as drift_x - scroll_offset * cloud_parallax_factor. +var scroll_offset: float = 0.0 + var cloud_speeds: Dictionary[Sprite2D, float] = {} +var cloud_drift_x: Dictionary[Sprite2D, float] = {} +var cloud_parallax: Dictionary[Sprite2D, float] = {} var screen_width: float = 0.0 func _ready() -> void: randomize() screen_width = get_viewport_rect().size.x - for cloud: Node in get_children(): - if cloud is Sprite2D: - _init_cloud_start(cloud as Sprite2D) - else: - Log.error("CloudManager: A child cloud is not a Sprite2D, this should not be possible") + _initialize_clouds() func _process(delta: float) -> void: var new_width: float = get_viewport_rect().size.x if new_width != screen_width: screen_width = new_width - - for cloud: Sprite2D in get_children(): - var speed: float = cloud_speeds[cloud] - cloud.position.x -= speed * delta - - if cloud.position.x < -cloud.texture.get_width(): - _reset_cloud(cloud) + + for cloud: Node in get_children(): + if not (cloud is Sprite2D): + continue + var sprite: Sprite2D = cloud as Sprite2D + var speed: float = cloud_speeds.get(sprite, 0.0) + var parallax: float = cloud_parallax.get(sprite, 1.0) + var drift_x: float = cloud_drift_x.get(sprite, sprite.position.x) - speed * delta + cloud_drift_x[sprite] = drift_x + var rendered_x: float = drift_x - scroll_offset * parallax + sprite.position.x = rendered_x + + if rendered_x < -sprite.texture.get_width(): + _reset_cloud(sprite) + + +# Public API: configure the world width clouds spread across, and (re)populate +# extra clouds to keep density consistent. Safe to call multiple times. +func configure_world(world_width: float, override_clouds_per_screen: int = -1) -> void: + if override_clouds_per_screen >= 0: + clouds_per_screen = override_clouds_per_screen + spawn_width = world_width + if screen_width <= 0.0: + screen_width = get_viewport_rect().size.x + _initialize_clouds() + + +func _initialize_clouds() -> void: + _populate_extra_clouds() + cloud_speeds.clear() + cloud_drift_x.clear() + cloud_parallax.clear() + for cloud: Node in get_children(): + if cloud is Sprite2D: + _init_cloud_start(cloud as Sprite2D) + else: + Log.error("CloudsManager: A child cloud is not a Sprite2D, this should not be possible") + + +func _populate_extra_clouds() -> void: + if clouds_per_screen <= 0 or spawn_width <= 0.0: + return + var viewport_w: float = max(1.0, screen_width) + var screens: int = max(1, int(ceil(spawn_width / viewport_w))) + var target_count: int = clouds_per_screen * screens + + var template_clouds: Array[Sprite2D] = [] + for child: Node in get_children(): + if child is Sprite2D: + template_clouds.append(child as Sprite2D) + if template_clouds.is_empty(): + return + + var to_add: int = target_count - template_clouds.size() + for i: int in range(to_add): + var template: Sprite2D = template_clouds[i % template_clouds.size()] + var clone: Sprite2D = template.duplicate() as Sprite2D + add_child(clone) func _depth_factor_for_cloud(cloud: Sprite2D) -> float: @@ -42,7 +113,7 @@ func _depth_factor_for_cloud(cloud: Sprite2D) -> float: func _apply_parallax_speed(cloud: Sprite2D) -> float: var factor: float = _depth_factor_for_cloud(cloud) - return lerp(min_speed, max_speed, factor) + return lerpf(min_speed, max_speed, factor) func _apply_parallax_scale(cloud: Sprite2D) -> void: @@ -51,17 +122,32 @@ func _apply_parallax_scale(cloud: Sprite2D) -> void: cloud.scale = Vector2(target_scale, target_scale) +func _apply_parallax_factor(cloud: Sprite2D) -> float: + var factor: float = _depth_factor_for_cloud(cloud) + return lerpf(min_parallax_factor, max_parallax_factor, factor) + + +func _spawn_range() -> float: + return spawn_width if spawn_width > 0.0 else screen_width + + func _init_cloud_start(cloud: Sprite2D) -> void: - cloud.position.x = randf_range(0, screen_width) cloud.position.y = randf_range(min_y, max_y) - + var drift_x: float = randf_range(0.0, _spawn_range()) + cloud_drift_x[cloud] = drift_x + cloud_parallax[cloud] = _apply_parallax_factor(cloud) cloud_speeds[cloud] = _apply_parallax_speed(cloud) _apply_parallax_scale(cloud) + cloud.position.x = drift_x - scroll_offset * cloud_parallax[cloud] func _reset_cloud(cloud: Sprite2D) -> void: - cloud.position.x = screen_width + cloud.texture.get_width() * 0.5 cloud.position.y = randf_range(min_y, max_y) - + cloud_parallax[cloud] = _apply_parallax_factor(cloud) cloud_speeds[cloud] = _apply_parallax_speed(cloud) _apply_parallax_scale(cloud) + # Place the cloud just past the right edge of the viewport, accounting for + # the current scroll offset so the rendered position lands at screen_width. + var target_rendered_x: float = screen_width + cloud.texture.get_width() * 0.5 + cloud_drift_x[cloud] = target_rendered_x + scroll_offset * cloud_parallax[cloud] + cloud.position.x = target_rendered_x From 63436f1782fe2ab72d4d8f81d691574296a3d028 Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Wed, 29 Apr 2026 11:45:11 +0200 Subject: [PATCH 063/111] Anchor garden clouds to world coordinates for recycling MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Previously clouds in the gardens recycled based on their rendered (viewport) position. When the user scrolled to the far right, parallax pushed every cloud's rendered X far into the negative, triggering all of them to wrap to the right viewport edge. Their drift_x was thus warped to roughly scroll_offset + screen_width — so when the user scrolled back left, every cloud sat in the world to the right of the visible area, leaving the left side of the gardens empty. Switch CloudsManager to use world-anchored recycling whenever spawn_width is set: a cloud is only recycled when its drift_x (its world coordinate) falls past the world's left edge, and it respawns at the world's right edge rather than the viewport's. The legacy viewport-anchored path is preserved for the minigames that don't set spawn_width. --- sources/gardens/gardens.tscn | 4 ---- sources/utils/clouds_manager.gd | 32 +++++++++++++++++++++++++------- 2 files changed, 25 insertions(+), 11 deletions(-) diff --git a/sources/gardens/gardens.tscn b/sources/gardens/gardens.tscn index a082e58f..c93b62fa 100644 --- a/sources/gardens/gardens.tscn +++ b/sources/gardens/gardens.tscn @@ -202,7 +202,6 @@ layout_mode = 2 [node name="BossButtons" type="Control" parent="." unique_id=1176317047] unique_name_in_owner = true -layout_mode = 3 anchors_preset = 0 mouse_filter = 2 @@ -481,7 +480,6 @@ unique_name_in_owner = true visible = false [node name="CloudsLayer" type="CanvasLayer" parent="." unique_id=100000001] -layer = 1 [node name="Clouds" type="Node2D" parent="CloudsLayer" unique_id=100000002] unique_name_in_owner = true @@ -490,11 +488,9 @@ script = ExtResource("45_clouds") min_speed = 15.0 max_speed = 45.0 min_y = 60.0 -max_y = 1100.0 min_scale = 0.5 max_scale = 1.2 min_parallax_factor = 0.5 -max_parallax_factor = 1.0 clouds_per_screen = 3 [node name="cloud_1" type="Sprite2D" parent="CloudsLayer/Clouds" unique_id=100000003] diff --git a/sources/utils/clouds_manager.gd b/sources/utils/clouds_manager.gd index 52a808a4..19f188d7 100644 --- a/sources/utils/clouds_manager.gd +++ b/sources/utils/clouds_manager.gd @@ -46,6 +46,8 @@ func _process(delta: float) -> void: if new_width != screen_width: screen_width = new_width + var world_anchored: bool = spawn_width > 0.0 + for cloud: Node in get_children(): if not (cloud is Sprite2D): continue @@ -57,8 +59,16 @@ func _process(delta: float) -> void: var rendered_x: float = drift_x - scroll_offset * parallax sprite.position.x = rendered_x - if rendered_x < -sprite.texture.get_width(): - _reset_cloud(sprite) + # Recycling strategy depends on whether we're in world-anchored mode + # (gardens-like: drift_x lives in world coordinates, recycle when it + # falls past the world's left edge) or in legacy viewport-anchored mode + # (minigames: a single fixed screen, recycle on viewport exit). + if world_anchored: + if drift_x < -sprite.texture.get_width(): + _reset_cloud(sprite) + else: + if rendered_x < -sprite.texture.get_width(): + _reset_cloud(sprite) # Public API: configure the world width clouds spread across, and (re)populate @@ -146,8 +156,16 @@ func _reset_cloud(cloud: Sprite2D) -> void: cloud_parallax[cloud] = _apply_parallax_factor(cloud) cloud_speeds[cloud] = _apply_parallax_speed(cloud) _apply_parallax_scale(cloud) - # Place the cloud just past the right edge of the viewport, accounting for - # the current scroll offset so the rendered position lands at screen_width. - var target_rendered_x: float = screen_width + cloud.texture.get_width() * 0.5 - cloud_drift_x[cloud] = target_rendered_x + scroll_offset * cloud_parallax[cloud] - cloud.position.x = target_rendered_x + + if spawn_width > 0.0: + # World-anchored mode (gardens): the cloud drifted past the left edge + # of the world, so wrap it back to the right edge of the world. Its + # rendered position is whatever the current scroll dictates. + cloud_drift_x[cloud] = spawn_width + cloud.texture.get_width() * 0.5 + cloud.position.x = cloud_drift_x[cloud] - scroll_offset * cloud_parallax[cloud] + else: + # Legacy viewport-anchored mode (minigames): place the cloud just past + # the right edge of the viewport. + var target_rendered_x: float = screen_width + cloud.texture.get_width() * 0.5 + cloud_drift_x[cloud] = target_rendered_x + scroll_offset * cloud_parallax[cloud] + cloud.position.x = target_rendered_x From ad571da545f8d84c1bb851a1a0863adca2ae9bb3 Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Wed, 29 Apr 2026 11:53:34 +0200 Subject: [PATCH 064/111] Spread initial cloud spawn positions via stratified sampling Replace pure randf_range across the spawn width with stratified placement: the spawn range is split into N equal slots (N = number of clouds) and each cloud is placed at a random position inside its own slot. This caps the maximum gap between clouds at one slot width, eliminating the "all clouds on one side" failure mode of independent random draws while keeping each cloud's exact position random within its band so the layout still feels natural rather than grid-regular. The sprite list is shuffled before slot assignment so identical duplicated templates don't end up in adjacent slots in scene-tree order. --- sources/utils/clouds_manager.gd | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/sources/utils/clouds_manager.gd b/sources/utils/clouds_manager.gd index 19f188d7..79ea1df4 100644 --- a/sources/utils/clouds_manager.gd +++ b/sources/utils/clouds_manager.gd @@ -87,12 +87,22 @@ func _initialize_clouds() -> void: cloud_speeds.clear() cloud_drift_x.clear() cloud_parallax.clear() + + var sprites: Array[Sprite2D] = [] for cloud: Node in get_children(): if cloud is Sprite2D: - _init_cloud_start(cloud as Sprite2D) + sprites.append(cloud as Sprite2D) else: Log.error("CloudsManager: A child cloud is not a Sprite2D, this should not be possible") + # Shuffle so that identical cloud textures (the duplicated templates) don't + # end up in adjacent stratified slots in tree order. + sprites.shuffle() + + var slot_count: int = sprites.size() + for i: int in range(slot_count): + _init_cloud_start(sprites[i], i, slot_count) + func _populate_extra_clouds() -> void: if clouds_per_screen <= 0 or spawn_width <= 0.0: @@ -141,9 +151,20 @@ func _spawn_range() -> float: return spawn_width if spawn_width > 0.0 else screen_width -func _init_cloud_start(cloud: Sprite2D) -> void: +func _init_cloud_start(cloud: Sprite2D, slot_index: int = 0, slot_count: int = 1) -> void: cloud.position.y = randf_range(min_y, max_y) - var drift_x: float = randf_range(0.0, _spawn_range()) + var spawn_range: float = _spawn_range() + var drift_x: float + if slot_count > 1 and spawn_range > 0.0: + # Stratified placement: split the spawn range into slot_count equal + # slots and place this cloud randomly inside its own slot. This + # guarantees an upper bound on the gap between any two clouds while + # keeping the exact position of each cloud random within its band. + var slot_width: float = spawn_range / float(slot_count) + var slot_min: float = float(slot_index) * slot_width + drift_x = randf_range(slot_min, slot_min + slot_width) + else: + drift_x = randf_range(0.0, spawn_range) cloud_drift_x[cloud] = drift_x cloud_parallax[cloud] = _apply_parallax_factor(cloud) cloud_speeds[cloud] = _apply_parallax_speed(cloud) From 6f0163a8db3d55b5b7b1c424e150119a2db29a04 Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Wed, 29 Apr 2026 16:28:51 +0200 Subject: [PATCH 065/111] Stratify garden clouds in scroll-space, not world-space MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Initial spawning placed clouds uniformly across [0, spawn_width], which broke down at the edges of the scroll range whenever the parallax factor was anything other than exactly 1.0: - With parallax < 1.0 (background feel), a cloud is only ever visible at scrolls in [(drift_x - screen_w) / parallax, drift_x / parallax]. So a far cloud at drift_x near spawn_width (e.g. 28000 with parallax 0.5) needs scroll ~56000 to be seen, far beyond max_scroll. About half the spawn range was a dead zone the user could never reach. - With parallax > 1.0 (foreground feel — what the gardens scene now uses), the opposite happens: clouds visible at the right edge of the scroll range live at drift_x = max_scroll * parallax + screen_w, which is well past spawn_width. The right side of the gardens stayed empty because no cloud was ever spawned that far out. Add a max_scroll parameter to configure_world() and stratify in scroll space: each cloud gets a target_scroll value in its own slot of [0, max_scroll], and its drift_x is placed at target_scroll * parallax + horiz_jitter. The cloud's drift_x range now matches the scroll positions where it can actually be visible, regardless of whether parallax is below or above 1.0. _reset_cloud is updated correspondingly to wrap clouds to the right edge of their individual visibility range rather than the world's right edge. Also have configure_world refresh screen_width every call so the manager picks up the correct viewport size even when the parent invokes it later in the ready sequence. --- sources/gardens/gardens.gd | 9 +++- sources/gardens/gardens.tscn | 4 +- sources/utils/clouds_manager.gd | 95 +++++++++++++++++++++++---------- 3 files changed, 79 insertions(+), 29 deletions(-) diff --git a/sources/gardens/gardens.gd b/sources/gardens/gardens.gd index dacaea35..df0f88ec 100644 --- a/sources/gardens/gardens.gd +++ b/sources/gardens/gardens.gd @@ -213,7 +213,14 @@ func _configure_clouds_for_gardens() -> void: if garden_count <= 0: return var content_world_width: float = float(garden_count * GARDEN_SIZE) - clouds.configure_world(content_world_width) + # max_scroll is what the parent will actually pass through scroll_offset. + # The CloudsManager needs this (not just world_width) to position clouds + # inside their reachable drift_x range when parallax_factor < 1.0. + var viewport_w: float = scroll_container.size.x + if viewport_w <= 0.0: + viewport_w = float(get_viewport_rect().size.x) + var max_scroll: float = maxf(0.0, content_world_width - viewport_w) + clouds.configure_world(content_world_width, max_scroll) func _scroll_to_starting_garden(_transition_context: Dictionary) -> void: diff --git a/sources/gardens/gardens.tscn b/sources/gardens/gardens.tscn index c93b62fa..0609d6e4 100644 --- a/sources/gardens/gardens.tscn +++ b/sources/gardens/gardens.tscn @@ -488,9 +488,11 @@ script = ExtResource("45_clouds") min_speed = 15.0 max_speed = 45.0 min_y = 60.0 +max_y = 300.0 min_scale = 0.5 max_scale = 1.2 -min_parallax_factor = 0.5 +min_parallax_factor = 1.2 +max_parallax_factor = 1.7 clouds_per_screen = 3 [node name="cloud_1" type="Sprite2D" parent="CloudsLayer/Clouds" unique_id=100000003] diff --git a/sources/utils/clouds_manager.gd b/sources/utils/clouds_manager.gd index 79ea1df4..2ebace9b 100644 --- a/sources/utils/clouds_manager.gd +++ b/sources/utils/clouds_manager.gd @@ -29,6 +29,14 @@ extends Node2D # Each cloud's rendered X is computed as drift_x - scroll_offset * cloud_parallax_factor. var scroll_offset: float = 0.0 +# Maximum scroll value the parent will pass through scroll_offset. Set via +# configure_world(); a non-zero value lets _init_cloud_start spread clouds +# evenly across the actual scroll range, which matters when parallax_factor +# is below 1.0 — without this, far clouds (smaller parallax) end up in +# drift_x positions the user can never bring into the viewport. When 0, +# the manager falls back to spawn_width-based stratification. +var max_scroll: float = 0.0 + var cloud_speeds: Dictionary[Sprite2D, float] = {} var cloud_drift_x: Dictionary[Sprite2D, float] = {} var cloud_parallax: Dictionary[Sprite2D, float] = {} @@ -71,14 +79,22 @@ func _process(delta: float) -> void: _reset_cloud(sprite) -# Public API: configure the world width clouds spread across, and (re)populate -# extra clouds to keep density consistent. Safe to call multiple times. -func configure_world(world_width: float, override_clouds_per_screen: int = -1) -> void: +# Public API: configure the world the parent scrolls across. +# world_width — total horizontal extent of the scrollable content; +# drives the population of extra clouds. +# p_max_scroll — the largest scroll value the parent will pass via +# scroll_offset (typically world_width minus the +# visible viewport). When omitted (negative), defaults +# to world_width as a coarse fallback. +# Safe to call multiple times. +func configure_world(world_width: float, p_max_scroll: float = -1.0, override_clouds_per_screen: int = -1) -> void: if override_clouds_per_screen >= 0: clouds_per_screen = override_clouds_per_screen spawn_width = world_width - if screen_width <= 0.0: - screen_width = get_viewport_rect().size.x + max_scroll = p_max_scroll if p_max_scroll >= 0.0 else world_width + # Always refresh screen_width here — by the time the parent calls this, + # the viewport is sized correctly even if our _ready ran beforehand. + screen_width = get_viewport_rect().size.x _initialize_clouds() @@ -153,23 +169,39 @@ func _spawn_range() -> float: func _init_cloud_start(cloud: Sprite2D, slot_index: int = 0, slot_count: int = 1) -> void: cloud.position.y = randf_range(min_y, max_y) - var spawn_range: float = _spawn_range() - var drift_x: float - if slot_count > 1 and spawn_range > 0.0: - # Stratified placement: split the spawn range into slot_count equal - # slots and place this cloud randomly inside its own slot. This - # guarantees an upper bound on the gap between any two clouds while - # keeping the exact position of each cloud random within its band. - var slot_width: float = spawn_range / float(slot_count) - var slot_min: float = float(slot_index) * slot_width - drift_x = randf_range(slot_min, slot_min + slot_width) - else: - drift_x = randf_range(0.0, spawn_range) - cloud_drift_x[cloud] = drift_x + # Compute parallax/speed/scale first so drift_x can take the cloud's + # parallax into account. cloud_parallax[cloud] = _apply_parallax_factor(cloud) cloud_speeds[cloud] = _apply_parallax_speed(cloud) _apply_parallax_scale(cloud) - cloud.position.x = drift_x - scroll_offset * cloud_parallax[cloud] + + var parallax: float = cloud_parallax[cloud] + var drift_x: float + if max_scroll > 0.0 and slot_count > 1: + # Stratify in *scroll* space: each cloud is assigned a target scroll + # value within its own slot of [0, max_scroll], then drift_x is + # placed so the cloud is visible somewhere in the viewport when the + # parent's scroll matches that target. Multiplying by parallax keeps + # the cloud inside its actual reachable drift_x range — without + # this, far clouds (parallax < 1) spread across the full world + # would end up at drift_x values no scroll value can ever expose. + var scroll_slot_width: float = max_scroll / float(slot_count) + var slot_min_scroll: float = float(slot_index) * scroll_slot_width + var slot_max_scroll: float = float(slot_index + 1) * scroll_slot_width + var target_scroll: float = randf_range(slot_min_scroll, slot_max_scroll) + var horiz_jitter: float = randf_range(0.0, screen_width) + drift_x = target_scroll * parallax + horiz_jitter + elif spawn_width > 0.0 and slot_count > 1: + # Fallback (no max_scroll info): stratify in world space directly. + # Far clouds (parallax < 1) may have dead zones in the upper half + # of the world here, but configure_world callers should pass max_scroll. + var slot_width: float = spawn_width / float(slot_count) + drift_x = randf_range(float(slot_index) * slot_width, float(slot_index + 1) * slot_width) + else: + drift_x = randf_range(0.0, _spawn_range()) + + cloud_drift_x[cloud] = drift_x + cloud.position.x = drift_x - scroll_offset * parallax func _reset_cloud(cloud: Sprite2D) -> void: @@ -178,15 +210,24 @@ func _reset_cloud(cloud: Sprite2D) -> void: cloud_speeds[cloud] = _apply_parallax_speed(cloud) _apply_parallax_scale(cloud) - if spawn_width > 0.0: - # World-anchored mode (gardens): the cloud drifted past the left edge - # of the world, so wrap it back to the right edge of the world. Its - # rendered position is whatever the current scroll dictates. + var parallax: float = cloud_parallax[cloud] + if max_scroll > 0.0: + # Respawn at the right edge of *this cloud's* visibility range. With + # parallax < 1 this is well below the world's right edge — the + # cloud now drifts left through the scroll positions where it can + # actually be seen, instead of sitting forever in unreachable + # drift_x territory. + var max_visibility_drift_x: float = max_scroll * parallax + screen_width + cloud.texture.get_width() * 0.5 + cloud_drift_x[cloud] = max_visibility_drift_x + cloud.position.x = max_visibility_drift_x - scroll_offset * parallax + elif spawn_width > 0.0: + # Fallback world-anchored mode (no max_scroll info): wrap to the + # right edge of the world. cloud_drift_x[cloud] = spawn_width + cloud.texture.get_width() * 0.5 - cloud.position.x = cloud_drift_x[cloud] - scroll_offset * cloud_parallax[cloud] + cloud.position.x = cloud_drift_x[cloud] - scroll_offset * parallax else: - # Legacy viewport-anchored mode (minigames): place the cloud just past - # the right edge of the viewport. + # Legacy viewport-anchored mode (minigames): place the cloud just + # past the right edge of the viewport. var target_rendered_x: float = screen_width + cloud.texture.get_width() * 0.5 - cloud_drift_x[cloud] = target_rendered_x + scroll_offset * cloud_parallax[cloud] + cloud_drift_x[cloud] = target_rendered_x + scroll_offset * parallax cloud.position.x = target_rendered_x From bebc449f56f30a194a95be03fd83b0e4259f04ba Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Wed, 29 Apr 2026 19:16:47 +0200 Subject: [PATCH 066/111] cleaning --- sources/gardens/gardens.gd | 2 +- sources/utils/clouds_manager.gd | 72 +++++---------------------------- 2 files changed, 11 insertions(+), 63 deletions(-) diff --git a/sources/gardens/gardens.gd b/sources/gardens/gardens.gd index df0f88ec..0371359d 100644 --- a/sources/gardens/gardens.gd +++ b/sources/gardens/gardens.gd @@ -79,7 +79,7 @@ var is_back_button_hold_active: bool = false @onready var line_audio_stream_player: AudioStreamPlayer2D = %LineAudioStreamPlayer @onready var scroll_container: ScrollContainer = $ScrollContainer @onready var parallax_background: ParallaxBackground = %ParallaxBackground -@onready var clouds: Node2D = %Clouds +@onready var clouds: CloudManager = %Clouds @onready var scroll_end_spacer: Control = $"ScrollContainer/HBoxContainer/Control2" @onready var boss_buttons_container: Control = %BossButtons @onready var minigame_selection: Control = %MinigameSelection diff --git a/sources/utils/clouds_manager.gd b/sources/utils/clouds_manager.gd index 2ebace9b..6e9cd5eb 100644 --- a/sources/utils/clouds_manager.gd +++ b/sources/utils/clouds_manager.gd @@ -1,3 +1,4 @@ +class_name CloudManager extends Node2D @export var min_speed: float = 20.0 @@ -6,37 +7,17 @@ extends Node2D @export var max_y: float = 200.0 @export var min_scale: float = 0.6 @export var max_scale: float = 1.3 - -# Parallax factor applied to the externally provided scroll_offset. -# 0.0 = cloud is fully decoupled from the scroll (background-locked), -# 1.0 = cloud moves at the same speed as the scroll, -# > 1.0 = cloud moves faster than the scroll (foreground feel). -# The actual factor for each cloud is interpolated between min/max -# using the same depth_factor used for speed and scale (closer clouds get the max value). +# 0 = background-locked, 1 = matches scroll, >1 = foreground. @export var min_parallax_factor: float = 1.0 @export var max_parallax_factor: float = 1.0 - -# Total horizontal world width across which clouds are initially spread. -# When 0, defaults to the viewport width (legacy behavior used by minigames). +# 0 falls back to viewport width (legacy minigame behavior). @export var spawn_width: float = 0.0 - -# When > 0 and spawn_width > 0, the manager duplicates its existing children -# to reach roughly clouds_per_screen * (spawn_width / viewport_width) clouds. -# 0 means no auto-population (only the children authored in the scene). @export var clouds_per_screen: int = 0 -# Externally driven scroll value (e.g. the Gardens horizontal scroll offset). -# Each cloud's rendered X is computed as drift_x - scroll_offset * cloud_parallax_factor. var scroll_offset: float = 0.0 - -# Maximum scroll value the parent will pass through scroll_offset. Set via -# configure_world(); a non-zero value lets _init_cloud_start spread clouds -# evenly across the actual scroll range, which matters when parallax_factor -# is below 1.0 — without this, far clouds (smaller parallax) end up in -# drift_x positions the user can never bring into the viewport. When 0, -# the manager falls back to spawn_width-based stratification. +# Without max_scroll, far clouds (parallax < 1) can land at drift_x values no +# scroll position ever exposes; configure_world() should set this. var max_scroll: float = 0.0 - var cloud_speeds: Dictionary[Sprite2D, float] = {} var cloud_drift_x: Dictionary[Sprite2D, float] = {} var cloud_parallax: Dictionary[Sprite2D, float] = {} @@ -67,10 +48,7 @@ func _process(delta: float) -> void: var rendered_x: float = drift_x - scroll_offset * parallax sprite.position.x = rendered_x - # Recycling strategy depends on whether we're in world-anchored mode - # (gardens-like: drift_x lives in world coordinates, recycle when it - # falls past the world's left edge) or in legacy viewport-anchored mode - # (minigames: a single fixed screen, recycle on viewport exit). + # World-anchored mode recycles in world space; legacy mode in viewport space. if world_anchored: if drift_x < -sprite.texture.get_width(): _reset_cloud(sprite) @@ -79,21 +57,11 @@ func _process(delta: float) -> void: _reset_cloud(sprite) -# Public API: configure the world the parent scrolls across. -# world_width — total horizontal extent of the scrollable content; -# drives the population of extra clouds. -# p_max_scroll — the largest scroll value the parent will pass via -# scroll_offset (typically world_width minus the -# visible viewport). When omitted (negative), defaults -# to world_width as a coarse fallback. -# Safe to call multiple times. func configure_world(world_width: float, p_max_scroll: float = -1.0, override_clouds_per_screen: int = -1) -> void: if override_clouds_per_screen >= 0: clouds_per_screen = override_clouds_per_screen spawn_width = world_width max_scroll = p_max_scroll if p_max_scroll >= 0.0 else world_width - # Always refresh screen_width here — by the time the parent calls this, - # the viewport is sized correctly even if our _ready ran beforehand. screen_width = get_viewport_rect().size.x _initialize_clouds() @@ -111,8 +79,7 @@ func _initialize_clouds() -> void: else: Log.error("CloudsManager: A child cloud is not a Sprite2D, this should not be possible") - # Shuffle so that identical cloud textures (the duplicated templates) don't - # end up in adjacent stratified slots in tree order. + # Avoid duplicated templates landing in adjacent stratified slots. sprites.shuffle() var slot_count: int = sprites.size() @@ -142,7 +109,6 @@ func _populate_extra_clouds() -> void: func _depth_factor_for_cloud(cloud: Sprite2D) -> float: - # Normalise la hauteur sur 0 a 1 var factor: float = (cloud.position.y - min_y) / float(max_y - min_y) return clampf(factor, 0.0, 1.0) @@ -169,8 +135,6 @@ func _spawn_range() -> float: func _init_cloud_start(cloud: Sprite2D, slot_index: int = 0, slot_count: int = 1) -> void: cloud.position.y = randf_range(min_y, max_y) - # Compute parallax/speed/scale first so drift_x can take the cloud's - # parallax into account. cloud_parallax[cloud] = _apply_parallax_factor(cloud) cloud_speeds[cloud] = _apply_parallax_speed(cloud) _apply_parallax_scale(cloud) @@ -178,13 +142,8 @@ func _init_cloud_start(cloud: Sprite2D, slot_index: int = 0, slot_count: int = 1 var parallax: float = cloud_parallax[cloud] var drift_x: float if max_scroll > 0.0 and slot_count > 1: - # Stratify in *scroll* space: each cloud is assigned a target scroll - # value within its own slot of [0, max_scroll], then drift_x is - # placed so the cloud is visible somewhere in the viewport when the - # parent's scroll matches that target. Multiplying by parallax keeps - # the cloud inside its actual reachable drift_x range — without - # this, far clouds (parallax < 1) spread across the full world - # would end up at drift_x values no scroll value can ever expose. + # Stratify in scroll space and multiply by parallax so drift_x stays + # within the cloud's reachable range. var scroll_slot_width: float = max_scroll / float(slot_count) var slot_min_scroll: float = float(slot_index) * scroll_slot_width var slot_max_scroll: float = float(slot_index + 1) * scroll_slot_width @@ -192,9 +151,6 @@ func _init_cloud_start(cloud: Sprite2D, slot_index: int = 0, slot_count: int = 1 var horiz_jitter: float = randf_range(0.0, screen_width) drift_x = target_scroll * parallax + horiz_jitter elif spawn_width > 0.0 and slot_count > 1: - # Fallback (no max_scroll info): stratify in world space directly. - # Far clouds (parallax < 1) may have dead zones in the upper half - # of the world here, but configure_world callers should pass max_scroll. var slot_width: float = spawn_width / float(slot_count) drift_x = randf_range(float(slot_index) * slot_width, float(slot_index + 1) * slot_width) else: @@ -212,22 +168,14 @@ func _reset_cloud(cloud: Sprite2D) -> void: var parallax: float = cloud_parallax[cloud] if max_scroll > 0.0: - # Respawn at the right edge of *this cloud's* visibility range. With - # parallax < 1 this is well below the world's right edge — the - # cloud now drifts left through the scroll positions where it can - # actually be seen, instead of sitting forever in unreachable - # drift_x territory. + # Respawn at the right edge of this cloud's reachable range, not the world's. var max_visibility_drift_x: float = max_scroll * parallax + screen_width + cloud.texture.get_width() * 0.5 cloud_drift_x[cloud] = max_visibility_drift_x cloud.position.x = max_visibility_drift_x - scroll_offset * parallax elif spawn_width > 0.0: - # Fallback world-anchored mode (no max_scroll info): wrap to the - # right edge of the world. cloud_drift_x[cloud] = spawn_width + cloud.texture.get_width() * 0.5 cloud.position.x = cloud_drift_x[cloud] - scroll_offset * parallax else: - # Legacy viewport-anchored mode (minigames): place the cloud just - # past the right edge of the viewport. var target_rendered_x: float = screen_width + cloud.texture.get_width() * 0.5 cloud_drift_x[cloud] = target_rendered_x + scroll_offset * parallax cloud.position.x = target_rendered_x From 7ce680d14cb760fbd877fd64af270bea57a5982c Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Thu, 30 Apr 2026 14:16:49 +0200 Subject: [PATCH 067/111] Ant garden (03) --- assets/gardens/animals/ant.png | Bin 0 -> 4634 bytes assets/gardens/animals/ant.png.import | 40 ++++ assets/gardens/{ => animals}/jellyfish.png | Bin .../{ => animals}/jellyfish.png.import | 6 +- assets/gardens/{ => animals}/turtle.png | Bin .../gardens/{ => animals}/turtle.png.import | 6 +- assets/gardens/gardens/garden_03.png | Bin 0 -> 15864 bytes assets/gardens/gardens/garden_03.png.import | 40 ++++ .../victory_assets/victory_asset_bees.png | Bin 0 -> 2222 bytes .../victory_asset_bees.png.import | 40 ++++ .../victory_asset_butterfly.png | Bin 0 -> 3074 bytes .../victory_asset_butterfly.png.import | 40 ++++ .../victory_assets/victory_asset_ladybug.png | Bin 0 -> 1405 bytes .../victory_asset_ladybug.png.import | 40 ++++ .../victory_assets/victory_asset_moon.png | Bin 0 -> 6008 bytes .../victory_asset_moon.png.import | 40 ++++ .../victory_assets/victory_asset_mushroom.png | Bin 0 -> 1422 bytes .../victory_asset_mushroom.png.import | 40 ++++ .../victory_assets/victory_asset_plant_11.png | Bin 0 -> 2618 bytes .../victory_asset_plant_11.png.import | 40 ++++ .../victory_assets/victory_asset_plant_12.png | Bin 0 -> 2265 bytes .../victory_asset_plant_12.png.import | 40 ++++ .../victory_assets/victory_asset_plant_13.png | Bin 0 -> 2967 bytes .../victory_asset_plant_13.png.import | 40 ++++ resources/gardens/garden_01.tscn | 2 +- resources/gardens/garden_02.tscn | 2 +- resources/gardens/garden_03.tscn | 203 ++++++++---------- resources/gardens/garden_04.tscn | 2 +- resources/gardens/garden_05.tscn | 2 +- resources/gardens/garden_06.tscn | 2 +- resources/gardens/garden_07.tscn | 2 +- resources/gardens/garden_08.tscn | 2 +- resources/gardens/garden_09.tscn | 2 +- resources/gardens/garden_10.tscn | 2 +- resources/gardens/garden_11.tscn | 2 +- resources/gardens/garden_12.tscn | 2 +- 36 files changed, 509 insertions(+), 128 deletions(-) create mode 100644 assets/gardens/animals/ant.png create mode 100644 assets/gardens/animals/ant.png.import rename assets/gardens/{ => animals}/jellyfish.png (100%) rename assets/gardens/{ => animals}/jellyfish.png.import (76%) rename assets/gardens/{ => animals}/turtle.png (100%) rename assets/gardens/{ => animals}/turtle.png.import (76%) create mode 100644 assets/gardens/gardens/garden_03.png create mode 100644 assets/gardens/gardens/garden_03.png.import create mode 100644 assets/gardens/victory_assets/victory_asset_bees.png create mode 100644 assets/gardens/victory_assets/victory_asset_bees.png.import create mode 100644 assets/gardens/victory_assets/victory_asset_butterfly.png create mode 100644 assets/gardens/victory_assets/victory_asset_butterfly.png.import create mode 100644 assets/gardens/victory_assets/victory_asset_ladybug.png create mode 100644 assets/gardens/victory_assets/victory_asset_ladybug.png.import create mode 100644 assets/gardens/victory_assets/victory_asset_moon.png create mode 100644 assets/gardens/victory_assets/victory_asset_moon.png.import create mode 100644 assets/gardens/victory_assets/victory_asset_mushroom.png create mode 100644 assets/gardens/victory_assets/victory_asset_mushroom.png.import create mode 100644 assets/gardens/victory_assets/victory_asset_plant_11.png create mode 100644 assets/gardens/victory_assets/victory_asset_plant_11.png.import create mode 100644 assets/gardens/victory_assets/victory_asset_plant_12.png create mode 100644 assets/gardens/victory_assets/victory_asset_plant_12.png.import create mode 100644 assets/gardens/victory_assets/victory_asset_plant_13.png create mode 100644 assets/gardens/victory_assets/victory_asset_plant_13.png.import diff --git a/assets/gardens/animals/ant.png b/assets/gardens/animals/ant.png new file mode 100644 index 0000000000000000000000000000000000000000..2511ac2347ea4cca489af508d30b545546617f45 GIT binary patch literal 4634 zcmV+#66NiQP)URqEugkB$g?u$zoyIjpg>i!UBP5 zAn`*{Bu-`2rm=--u8_7!P%B8%7hz*LTRwD?MddC~U<)lxqYui1y{iO^7%QU*eiEN9M9a&OH_F>LYLvko`hQr~-^9Kx>XXadn^XGRv-#JH$$K%*2 zPXyX~nt@)R6KEF2Z9uE)wo%}qZ)$L%0DTVw`$W+=umFsy{!aU*2FCz4nAy1v>mXkA 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 literal 0 HcmV?d00001 diff --git a/assets/gardens/victory_assets/victory_asset_bees.png.import b/assets/gardens/victory_assets/victory_asset_bees.png.import new file mode 100644 index 00000000..420fb686 --- /dev/null +++ b/assets/gardens/victory_assets/victory_asset_bees.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dw3qhu03gxfi7" +path="res://.godot/imported/victory_asset_bees.png-934a516ebd4fefde1dc11195a7ed88a8.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/gardens/victory_assets/victory_asset_bees.png" +dest_files=["res://.godot/imported/victory_asset_bees.png-934a516ebd4fefde1dc11195a7ed88a8.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/gardens/victory_assets/victory_asset_butterfly.png b/assets/gardens/victory_assets/victory_asset_butterfly.png new file mode 100644 index 0000000000000000000000000000000000000000..80a5ca5a951e9f1639dbe9b9760ad710be671661 GIT binary patch literal 3074 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 Qp8x;=07*qoM6N<$f~zU(T>t<8 literal 0 HcmV?d00001 diff --git a/assets/gardens/victory_assets/victory_asset_butterfly.png.import b/assets/gardens/victory_assets/victory_asset_butterfly.png.import new file mode 100644 index 00000000..b0344641 --- /dev/null +++ b/assets/gardens/victory_assets/victory_asset_butterfly.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://its5dfr0ipak" +path="res://.godot/imported/victory_asset_butterfly.png-a87e26e51c4bff22c7ac3a71e5d65e98.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/gardens/victory_assets/victory_asset_butterfly.png" +dest_files=["res://.godot/imported/victory_asset_butterfly.png-a87e26e51c4bff22c7ac3a71e5d65e98.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/gardens/victory_assets/victory_asset_ladybug.png b/assets/gardens/victory_assets/victory_asset_ladybug.png new file mode 100644 index 0000000000000000000000000000000000000000..675585c4cdb8e8507da7b3f6d5d5924a17bb0b91 GIT binary patch literal 1405 zcmV-@1%mpCP)jv|Z4HC>z*42nq&tj%qx55XYMb z!Tu9wM7-L2^B^*wya@K*R6O+DbU~(J!HXy}pcmP}9+Uw+X!o)(v!IlR%41_px|6(m z>7INLW+t6fl3(i8t5^NrTo4gDOp^YbSQ)%%WoXTafhn+`Zqsz1Hy1kUVKd<2+`c)` z_ch!_4@>yJSfu+BU*laAEGS(R>;P?kdFJV7UUX5g8SqYS-`~Ji`k5D96b#^2?(a`9 zN-er7Sf1al40Tm7lboxFt_qgVx4eVBqpO1D@ecNmo|T~$5uwRwgnCtkdefVsE_hyt zMhP$kUaENfBN%zvd25n=V2lo^tBM6W_};R(fi^uXrg-psK()6Yqhek5xQ88J*W-K; zkq}!VB0~|Gh{#l`F%glGhzvv|%GrxVWLDA6GPWx|!@nIh(s1masX@t&-xl_kz=$+%@d=s?pR zumSL1OZTxVrgcv!6D-De%ymAfU05s&`Ujk^%)JR^+5SR`JZwn!#RBcjYLoY{KH9F= zDKWhZ+;41ij(S(^qGH~|c3Cg6ZUP?w{}|gH(y#)X&BG$rCx!S6O(>6mOTc}Gw)gPp z(6WLJyl=&Z8>nZUrhmU+X!{V)=UgYjPEfBp$?V$zHjV6mgpLipaDr{I+Pc<_bj$NR z@PMc7JHV?L&8={PB^JgSaD>K`lakM0G`PltG|1@7aJ^(=Ww0V=s8AnMF4i;X_lXuH zMs~P}=3Z?ksz<&(67gC!?I9Lj73doDH;hv?jtJ_=jwgH_=p~s#iHIV^@|4Bf-2U`{&3GYnou) z98Ixql1;tJv59}88WbzRPS75(saH8dHAgcn1S=cX)a44APOLROv>aV$a+;%PuY`h~PJ;A@s=>UFpTJZ)&Nh>3*}=V4Vj0zL=+w77VN(6Os%?NK9oRLf270N-Hi zRSwIVR~e@B^vhO%Irf0(2qPBQ)V!84u`=Y!J4FWP!0Tvn@n>{A7=ku}{lv4N`cOh+g z*c96ddv5BbStYe9ZNxCk*^P7H8d_CpT`Xv)Nm|91>*!#5YGkhwp_^m`{Ni!`9F0-C ztXL>VXb&4UIOmvq3qFG;p-l+wVR5=enJtg|&nOeri>4uO$d`Ws6H_HgSu4R700000 LNkvXXu0mjf?~t3r literal 0 HcmV?d00001 diff --git a/assets/gardens/victory_assets/victory_asset_ladybug.png.import b/assets/gardens/victory_assets/victory_asset_ladybug.png.import new file mode 100644 index 00000000..b21eadf6 --- /dev/null +++ b/assets/gardens/victory_assets/victory_asset_ladybug.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dr6cq4ua8fnk3" +path="res://.godot/imported/victory_asset_ladybug.png-3b27377e46f30f6942a09a9be9db6333.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/gardens/victory_assets/victory_asset_ladybug.png" +dest_files=["res://.godot/imported/victory_asset_ladybug.png-3b27377e46f30f6942a09a9be9db6333.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/gardens/victory_assets/victory_asset_moon.png b/assets/gardens/victory_assets/victory_asset_moon.png new file mode 100644 index 0000000000000000000000000000000000000000..0c20b16bc0f1097339bb3f236c8b063ab7b6327d GIT binary patch literal 6008 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

P%v}qFU=iMxV8V& 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 literal 0 HcmV?d00001 diff --git a/assets/gardens/victory_assets/victory_asset_moon.png.import b/assets/gardens/victory_assets/victory_asset_moon.png.import new file mode 100644 index 00000000..a056fdaa --- /dev/null +++ b/assets/gardens/victory_assets/victory_asset_moon.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cbq3e4in12oeh" +path="res://.godot/imported/victory_asset_moon.png-afc3fbf57e18ddd6ad37a34d359b5bef.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/gardens/victory_assets/victory_asset_moon.png" +dest_files=["res://.godot/imported/victory_asset_moon.png-afc3fbf57e18ddd6ad37a34d359b5bef.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/gardens/victory_assets/victory_asset_mushroom.png b/assets/gardens/victory_assets/victory_asset_mushroom.png new file mode 100644 index 0000000000000000000000000000000000000000..784d5712ca781e110d30b3bea572826dfe3fc5e3 GIT binary patch literal 1422 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 literal 0 HcmV?d00001 diff --git a/assets/gardens/victory_assets/victory_asset_plant_13.png.import b/assets/gardens/victory_assets/victory_asset_plant_13.png.import new file mode 100644 index 00000000..4954d66c --- /dev/null +++ b/assets/gardens/victory_assets/victory_asset_plant_13.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bqr3eqdfebceh" +path="res://.godot/imported/victory_asset_plant_13.png-eeb6e329c877119a53c8a2f68e710c08.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/gardens/victory_assets/victory_asset_plant_13.png" +dest_files=["res://.godot/imported/victory_asset_plant_13.png-eeb6e329c877119a53c8a2f68e710c08.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/resources/gardens/garden_01.tscn b/resources/gardens/garden_01.tscn index bd19c18c..6085d50a 100644 --- a/resources/gardens/garden_01.tscn +++ b/resources/gardens/garden_01.tscn @@ -3,7 +3,7 @@ [ext_resource type="Script" uid="uid://ch5h4p1o54whq" path="res://resources/gardens/garden.gd" id="1_5owem"] [ext_resource type="Texture2D" uid="uid://d26hapg1hf8a6" path="res://assets/gardens/gardens/garden_01.png" id="3_p7iv3"] [ext_resource type="PackedScene" uid="uid://delcgui3v0eek" path="res://sources/lesson_screen/lesson_button.tscn" id="4_epm30"] -[ext_resource type="Texture2D" uid="uid://bfqwlmmliem8f" path="res://assets/gardens/jellyfish.png" id="jellyfish_tex"] +[ext_resource type="Texture2D" uid="uid://bfqwlmmliem8f" path="res://assets/gardens/animals/jellyfish.png" id="jellyfish_tex"] [ext_resource type="Texture2D" uid="uid://dcekseb1b3ruw" path="res://assets/gardens/victory_assets/victory_asset_plant_01.png" id="plant_01"] [ext_resource type="Texture2D" uid="uid://clkr31osbqs7u" path="res://assets/gardens/victory_assets/victory_asset_plant_02.png" id="plant_02"] [ext_resource type="Texture2D" uid="uid://dgssb0oonuqku" path="res://assets/gardens/victory_assets/victory_asset_fish_01.png" id="plant_03"] diff --git a/resources/gardens/garden_02.tscn b/resources/gardens/garden_02.tscn index 269dfe36..3bb0a482 100644 --- a/resources/gardens/garden_02.tscn +++ b/resources/gardens/garden_02.tscn @@ -10,7 +10,7 @@ [ext_resource type="Texture2D" uid="uid://bv510d5r4dn82" path="res://assets/gardens/victory_assets/victory_asset_fragon_fly_01.png" id="8_556ma"] [ext_resource type="Texture2D" uid="uid://dckd1xhcdf2ie" path="res://assets/gardens/victory_assets/victory_asset_plant_06.png" id="9_vwhyb"] [ext_resource type="Texture2D" uid="uid://bpxc4vhri16pd" path="res://assets/gardens/victory_assets/victory_asset_pearl_01.png" id="10_v4g1g"] -[ext_resource type="Texture2D" uid="uid://bsw6v8ix7bb2s" path="res://assets/gardens/turtle.png" id="12_v4g1g"] +[ext_resource type="Texture2D" uid="uid://bsw6v8ix7bb2s" path="res://assets/gardens/animals/turtle.png" id="12_v4g1g"] [ext_resource type="Texture2D" uid="uid://dvxnktx1wiyxp" path="res://assets/gardens/victory_assets/victory_asset_bubbles_01.png" id="plant_05"] [node name="Garden" type="Control" unique_id=167073905] diff --git a/resources/gardens/garden_03.tscn b/resources/gardens/garden_03.tscn index d7506e24..85643958 100644 --- a/resources/gardens/garden_03.tscn +++ b/resources/gardens/garden_03.tscn @@ -1,17 +1,17 @@ [gd_scene format=3 uid="uid://fl3fleqx7r0k"] [ext_resource type="Script" uid="uid://ch5h4p1o54whq" path="res://resources/gardens/garden.gd" id="1_bwhap"] -[ext_resource type="Texture2D" uid="uid://4wt50lu3cwbl" path="res://assets/gardens/gardens/garden_02.png" id="2_qvgts"] -[ext_resource type="Texture2D" uid="uid://dro75vltqiq6j" path="res://assets/gardens/victory_assets/victory_asset_plant_07.png" id="3_o6shc"] -[ext_resource type="Texture2D" uid="uid://dvxnktx1wiyxp" path="res://assets/gardens/victory_assets/victory_asset_bubbles_01.png" id="4_0k6f8"] -[ext_resource type="Texture2D" uid="uid://gm5x5p2f07rh" path="res://assets/gardens/victory_assets/victory_asset_plant_10.png" id="5_7ro1k"] -[ext_resource type="Texture2D" uid="uid://blaltndbcv2yq" path="res://assets/gardens/victory_assets/victory_asset_plant_08.png" id="6_ltnqc"] -[ext_resource type="Texture2D" uid="uid://co6vu63bybpnc" path="res://assets/gardens/victory_assets/victory_asset_plant_09.png" id="7_l77x6"] -[ext_resource type="Texture2D" uid="uid://bv510d5r4dn82" path="res://assets/gardens/victory_assets/victory_asset_fragon_fly_01.png" id="8_1k62u"] -[ext_resource type="Texture2D" uid="uid://dckd1xhcdf2ie" path="res://assets/gardens/victory_assets/victory_asset_plant_06.png" id="9_5w5k7"] -[ext_resource type="Texture2D" uid="uid://bpxc4vhri16pd" path="res://assets/gardens/victory_assets/victory_asset_pearl_01.png" id="10_j6iij"] +[ext_resource type="Texture2D" uid="uid://ch1ah3nkjy5cl" path="res://assets/gardens/gardens/garden_03.png" id="2_j3ks8"] +[ext_resource type="Texture2D" uid="uid://yriarwydqmmg" path="res://assets/gardens/victory_assets/victory_asset_plant_11.png" id="3_gandt"] +[ext_resource type="Texture2D" uid="uid://ipos556o7hlw" path="res://assets/gardens/victory_assets/victory_asset_plant_12.png" id="4_qxgmk"] +[ext_resource type="Texture2D" uid="uid://cbq3e4in12oeh" path="res://assets/gardens/victory_assets/victory_asset_moon.png" id="5_3en22"] +[ext_resource type="Texture2D" uid="uid://bqr3eqdfebceh" path="res://assets/gardens/victory_assets/victory_asset_plant_13.png" id="6_alcdm"] +[ext_resource type="Texture2D" uid="uid://dr6cq4ua8fnk3" path="res://assets/gardens/victory_assets/victory_asset_ladybug.png" id="7_rkrhb"] +[ext_resource type="Texture2D" uid="uid://coxmj8uwyu6vd" path="res://assets/gardens/victory_assets/victory_asset_mushroom.png" id="8_ur7o4"] +[ext_resource type="Texture2D" uid="uid://dw3qhu03gxfi7" path="res://assets/gardens/victory_assets/victory_asset_bees.png" id="9_ec7px"] +[ext_resource type="Texture2D" uid="uid://its5dfr0ipak" path="res://assets/gardens/victory_assets/victory_asset_butterfly.png" id="10_j3ks8"] [ext_resource type="PackedScene" uid="uid://delcgui3v0eek" path="res://sources/lesson_screen/lesson_button.tscn" id="11_odjw4"] -[ext_resource type="Texture2D" uid="uid://bsw6v8ix7bb2s" path="res://assets/gardens/turtle.png" id="12_a7ci1"] +[ext_resource type="Texture2D" uid="uid://cn0brlkbklxuu" path="res://assets/gardens/animals/ant.png" id="12_j3ks8"] [node name="Garden" type="Control" unique_id=167073905] custom_minimum_size = Vector2(2400, 2.08165e-12) @@ -38,7 +38,7 @@ offset_top = 50.0 offset_right = 2050.0 offset_bottom = 1750.0 mouse_filter = 2 -texture = ExtResource("2_qvgts") +texture = ExtResource("2_j3ks8") expand_mode = 1 [node name="Victory_Assets" type="Control" parent="." unique_id=787934313] @@ -52,100 +52,93 @@ grow_vertical = 2 mouse_filter = 2 [node name="Victory_Asset_01" type="TextureRect" parent="Victory_Assets" unique_id=1278004645] -modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) +modulate = Color(0.52156866, 0.03137255, 0.40392157, 1) layout_mode = 0 -offset_left = 761.0 -offset_top = 1263.0 -offset_right = 939.0 -offset_bottom = 1575.0 +offset_left = 521.0 +offset_top = 1273.0 +offset_right = 893.0 +offset_bottom = 1541.0 mouse_filter = 2 -texture = ExtResource("3_o6shc") +texture = ExtResource("3_gandt") expand_mode = 1 stretch_mode = 5 -[node name="Victory_Asset_02" type="TextureRect" parent="Victory_Assets" unique_id=1525586982] -modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) +[node name="Victory_Asset_02" type="TextureRect" parent="Victory_Assets" unique_id=501856240] +modulate = Color(0.52156866, 0.03137255, 0.40392157, 1) layout_mode = 0 -offset_left = 1043.0 -offset_top = 1142.0 -offset_right = 1157.0 -offset_bottom = 1388.0 -rotation = 0.2443461 +offset_left = 1511.0 +offset_top = 1078.0 +offset_right = 1667.0 +offset_bottom = 1342.0 mouse_filter = 2 -texture = ExtResource("4_0k6f8") +texture = ExtResource("4_qxgmk") expand_mode = 1 stretch_mode = 5 -[node name="Victory_Asset_03" type="TextureRect" parent="Victory_Assets" unique_id=2071114773] -modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) +[node name="Victory_Asset_03" type="TextureRect" parent="Victory_Assets" unique_id=1136001964] +modulate = Color(0.52156866, 0.03137255, 0.40392157, 1) layout_mode = 0 -offset_left = 616.0 -offset_top = 648.0 -offset_right = 778.0 -offset_bottom = 812.0 +offset_left = 1396.0 +offset_top = 165.0 +offset_right = 1714.0 +offset_bottom = 643.0 mouse_filter = 2 -texture = ExtResource("5_7ro1k") -expand_mode = 1 +texture = ExtResource("5_3en22") stretch_mode = 5 -[node name="Victory_Asset_04" type="TextureRect" parent="Victory_Assets" unique_id=1578211500] -modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) +[node name="Victory_Asset_04" type="TextureRect" parent="Victory_Assets" unique_id=405923099] +modulate = Color(0.52156866, 0.03137255, 0.40392157, 1) layout_mode = 0 -offset_left = 907.0 -offset_top = 275.0 -offset_right = 1233.0 -offset_bottom = 599.0 +offset_left = 1078.0 +offset_top = 1294.0 +offset_right = 1290.0 +offset_bottom = 1516.0 mouse_filter = 2 -texture = ExtResource("6_ltnqc") -expand_mode = 1 +texture = ExtResource("6_alcdm") stretch_mode = 5 -[node name="Victory_Asset_05" type="TextureRect" parent="Victory_Assets" unique_id=520271408] -modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) +[node name="Victory_Asset_05" type="TextureRect" parent="Victory_Assets" unique_id=1834620438] +modulate = Color(0.52156866, 0.03137255, 0.40392157, 1) layout_mode = 0 -offset_left = 1199.0 -offset_top = 1279.0 -offset_right = 1409.0 -offset_bottom = 1629.0 +offset_left = 881.0 +offset_top = 1109.0 +offset_right = 1033.0 +offset_bottom = 1257.0 mouse_filter = 2 -texture = ExtResource("7_l77x6") -expand_mode = 1 +texture = ExtResource("7_rkrhb") stretch_mode = 5 -[node name="Victory_Asset_06" type="TextureRect" parent="Victory_Assets" unique_id=213526714] -modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) +[node name="Victory_Asset_06" type="TextureRect" parent="Victory_Assets" unique_id=749079738] +modulate = Color(0.52156866, 0.03137255, 0.40392157, 1) layout_mode = 0 -offset_left = 1337.0 -offset_top = 441.0 -offset_right = 1591.0 -offset_bottom = 563.0 +offset_left = 1715.0 +offset_top = 494.0 +offset_right = 1879.0 +offset_bottom = 650.0 mouse_filter = 2 -texture = ExtResource("8_1k62u") -expand_mode = 1 +texture = ExtResource("8_ur7o4") stretch_mode = 5 -[node name="Victory_Asset_07" type="TextureRect" parent="Victory_Assets" unique_id=1466685334] -modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) +[node name="Victory_Asset_07" type="TextureRect" parent="Victory_Assets" unique_id=680317182] +modulate = Color(0.52156866, 0.03137255, 0.40392157, 1) layout_mode = 0 -offset_left = 1660.0 -offset_top = 526.0 -offset_right = 1978.0 -offset_bottom = 866.0 +offset_left = 1188.0 +offset_top = 902.0 +offset_right = 1484.0 +offset_bottom = 1056.0 mouse_filter = 2 -texture = ExtResource("9_5w5k7") -expand_mode = 1 +texture = ExtResource("9_ec7px") stretch_mode = 5 -[node name="Victory_Asset_08" type="TextureRect" parent="Victory_Assets" unique_id=2004645372] -modulate = Color(0.34509805, 0.26666668, 0.49019608, 1) +[node name="Victory_Asset_08" type="TextureRect" parent="Victory_Assets" unique_id=1465342151] +modulate = Color(0.52156866, 0.03137255, 0.40392157, 1) layout_mode = 0 -offset_left = 1531.0 -offset_top = 1278.0 -offset_right = 1707.0 -offset_bottom = 1460.0 +offset_left = 1064.0 +offset_top = 205.0 +offset_right = 1396.0 +offset_bottom = 439.0 mouse_filter = 2 -texture = ExtResource("10_j6iij") -expand_mode = 1 +texture = ExtResource("10_j3ks8") stretch_mode = 5 [node name="Buttons" type="Control" parent="." unique_id=1964597] @@ -159,63 +152,51 @@ mouse_filter = 2 [node name="Slot1" parent="Buttons" unique_id=1361620593 instance=ExtResource("11_odjw4")] layout_mode = 0 -offset_left = 494.0 -offset_top = 1052.0 -offset_right = 734.0 -offset_bottom = 1292.0 +offset_left = 525.0 +offset_top = 798.0 +offset_right = 765.0 +offset_bottom = 1038.0 pivot_offset = Vector2(120, 120) [node name="Slot2" parent="Buttons" unique_id=1025579258 instance=ExtResource("11_odjw4")] layout_mode = 0 -offset_left = 762.0 -offset_top = 887.0 -offset_right = 1002.0 -offset_bottom = 1127.0 +offset_left = 793.0 +offset_top = 633.0 +offset_right = 1033.0 +offset_bottom = 873.0 pivot_offset = Vector2(120, 120) [node name="Slot3" parent="Buttons" unique_id=353688519 instance=ExtResource("11_odjw4")] layout_mode = 0 -offset_left = 1066.0 -offset_top = 810.0 -offset_right = 1306.0 -offset_bottom = 1050.0 +offset_left = 1097.0 +offset_top = 556.0 +offset_right = 1337.0 +offset_bottom = 796.0 pivot_offset = Vector2(120, 120) [node name="Slot4" parent="Buttons" unique_id=1536126098 instance=ExtResource("11_odjw4")] layout_mode = 0 -offset_left = 1405.0 -offset_top = 885.0 -offset_right = 1645.0 -offset_bottom = 1125.0 +offset_left = 1436.0 +offset_top = 631.0 +offset_right = 1676.0 +offset_bottom = 871.0 pivot_offset = Vector2(120, 120) [node name="Slot5" parent="Buttons" unique_id=960033946 instance=ExtResource("11_odjw4")] layout_mode = 0 -offset_left = 1720.0 -offset_top = 1020.0 -offset_right = 1960.0 -offset_bottom = 1260.0 +offset_left = 1751.0 +offset_top = 766.0 +offset_right = 1991.0 +offset_bottom = 1006.0 pivot_offset = Vector2(120, 120) -[node name="Turtle_01" type="TextureRect" parent="." unique_id=518902024] +[node name="Ant" type="TextureRect" parent="." unique_id=518902024] layout_mode = 0 -offset_left = 500.0 -offset_top = 155.0 -offset_right = 800.0 -offset_bottom = 455.0 +offset_left = 547.0 +offset_top = 219.0 +offset_right = 967.0 +offset_bottom = 519.0 mouse_filter = 2 -texture = ExtResource("12_a7ci1") -expand_mode = 1 -stretch_mode = 5 - -[node name="Turtle_02" type="TextureRect" parent="." unique_id=1563614410] -layout_mode = 0 -offset_left = 381.0 -offset_top = 439.0 -offset_right = 531.0 -offset_bottom = 589.0 -rotation = -0.2443461 -mouse_filter = 2 -texture = ExtResource("12_a7ci1") +texture = ExtResource("12_j3ks8") expand_mode = 1 stretch_mode = 5 diff --git a/resources/gardens/garden_04.tscn b/resources/gardens/garden_04.tscn index 26943790..7f1da321 100644 --- a/resources/gardens/garden_04.tscn +++ b/resources/gardens/garden_04.tscn @@ -10,7 +10,7 @@ [ext_resource type="Texture2D" uid="uid://bv510d5r4dn82" path="res://assets/gardens/victory_assets/victory_asset_fragon_fly_01.png" id="8_03isd"] [ext_resource type="Texture2D" uid="uid://dckd1xhcdf2ie" path="res://assets/gardens/victory_assets/victory_asset_plant_06.png" id="9_p1mfm"] [ext_resource type="Texture2D" uid="uid://bpxc4vhri16pd" path="res://assets/gardens/victory_assets/victory_asset_pearl_01.png" id="10_vnw37"] -[ext_resource type="Texture2D" uid="uid://bsw6v8ix7bb2s" path="res://assets/gardens/turtle.png" id="12_eyxb7"] +[ext_resource type="Texture2D" uid="uid://bsw6v8ix7bb2s" path="res://assets/gardens/animals/turtle.png" id="12_eyxb7"] [ext_resource type="Texture2D" uid="uid://dvxnktx1wiyxp" path="res://assets/gardens/victory_assets/victory_asset_bubbles_01.png" id="plant_05"] [node name="Garden" type="Control" unique_id=167073905] diff --git a/resources/gardens/garden_05.tscn b/resources/gardens/garden_05.tscn index 0ddc1315..8296ae5b 100644 --- a/resources/gardens/garden_05.tscn +++ b/resources/gardens/garden_05.tscn @@ -10,7 +10,7 @@ [ext_resource type="Texture2D" uid="uid://bv510d5r4dn82" path="res://assets/gardens/victory_assets/victory_asset_fragon_fly_01.png" id="8_r7c56"] [ext_resource type="Texture2D" uid="uid://dckd1xhcdf2ie" path="res://assets/gardens/victory_assets/victory_asset_plant_06.png" id="9_s6qsy"] [ext_resource type="Texture2D" uid="uid://bpxc4vhri16pd" path="res://assets/gardens/victory_assets/victory_asset_pearl_01.png" id="10_ph3oc"] -[ext_resource type="Texture2D" uid="uid://bsw6v8ix7bb2s" path="res://assets/gardens/turtle.png" id="12_l37o2"] +[ext_resource type="Texture2D" uid="uid://bsw6v8ix7bb2s" path="res://assets/gardens/animals/turtle.png" id="12_l37o2"] [ext_resource type="Texture2D" uid="uid://dvxnktx1wiyxp" path="res://assets/gardens/victory_assets/victory_asset_bubbles_01.png" id="plant_05"] [node name="Garden" type="Control" unique_id=167073905] diff --git a/resources/gardens/garden_06.tscn b/resources/gardens/garden_06.tscn index 7d62a641..e0cb4e31 100644 --- a/resources/gardens/garden_06.tscn +++ b/resources/gardens/garden_06.tscn @@ -10,7 +10,7 @@ [ext_resource type="Texture2D" uid="uid://bv510d5r4dn82" path="res://assets/gardens/victory_assets/victory_asset_fragon_fly_01.png" id="8_uh1vh"] [ext_resource type="Texture2D" uid="uid://dckd1xhcdf2ie" path="res://assets/gardens/victory_assets/victory_asset_plant_06.png" id="9_ip87b"] [ext_resource type="Texture2D" uid="uid://bpxc4vhri16pd" path="res://assets/gardens/victory_assets/victory_asset_pearl_01.png" id="10_p6pbg"] -[ext_resource type="Texture2D" uid="uid://bsw6v8ix7bb2s" path="res://assets/gardens/turtle.png" id="12_tv77g"] +[ext_resource type="Texture2D" uid="uid://bsw6v8ix7bb2s" path="res://assets/gardens/animals/turtle.png" id="12_tv77g"] [ext_resource type="Texture2D" uid="uid://dvxnktx1wiyxp" path="res://assets/gardens/victory_assets/victory_asset_bubbles_01.png" id="plant_05"] [node name="Garden" type="Control" unique_id=167073905] diff --git a/resources/gardens/garden_07.tscn b/resources/gardens/garden_07.tscn index f7151a50..f91662ee 100644 --- a/resources/gardens/garden_07.tscn +++ b/resources/gardens/garden_07.tscn @@ -10,7 +10,7 @@ [ext_resource type="Texture2D" uid="uid://bv510d5r4dn82" path="res://assets/gardens/victory_assets/victory_asset_fragon_fly_01.png" id="8_knwjf"] [ext_resource type="Texture2D" uid="uid://dckd1xhcdf2ie" path="res://assets/gardens/victory_assets/victory_asset_plant_06.png" id="9_xt7g7"] [ext_resource type="Texture2D" uid="uid://bpxc4vhri16pd" path="res://assets/gardens/victory_assets/victory_asset_pearl_01.png" id="10_v68eg"] -[ext_resource type="Texture2D" uid="uid://bsw6v8ix7bb2s" path="res://assets/gardens/turtle.png" id="12_di1qk"] +[ext_resource type="Texture2D" uid="uid://bsw6v8ix7bb2s" path="res://assets/gardens/animals/turtle.png" id="12_di1qk"] [ext_resource type="Texture2D" uid="uid://dvxnktx1wiyxp" path="res://assets/gardens/victory_assets/victory_asset_bubbles_01.png" id="plant_05"] [node name="Garden" type="Control" unique_id=167073905] diff --git a/resources/gardens/garden_08.tscn b/resources/gardens/garden_08.tscn index 561c00c7..aa67ad7e 100644 --- a/resources/gardens/garden_08.tscn +++ b/resources/gardens/garden_08.tscn @@ -11,7 +11,7 @@ [ext_resource type="Texture2D" uid="uid://bv510d5r4dn82" path="res://assets/gardens/victory_assets/victory_asset_fragon_fly_01.png" id="8_prr8f"] [ext_resource type="Texture2D" uid="uid://dckd1xhcdf2ie" path="res://assets/gardens/victory_assets/victory_asset_plant_06.png" id="9_s1acr"] [ext_resource type="Texture2D" uid="uid://bpxc4vhri16pd" path="res://assets/gardens/victory_assets/victory_asset_pearl_01.png" id="10_85dxs"] -[ext_resource type="Texture2D" uid="uid://bsw6v8ix7bb2s" path="res://assets/gardens/turtle.png" id="12_gofft"] +[ext_resource type="Texture2D" uid="uid://bsw6v8ix7bb2s" path="res://assets/gardens/animals/turtle.png" id="12_gofft"] [node name="Garden" type="Control" unique_id=167073905] custom_minimum_size = Vector2(2400, 2.08165e-12) diff --git a/resources/gardens/garden_09.tscn b/resources/gardens/garden_09.tscn index 13c15989..d273b754 100644 --- a/resources/gardens/garden_09.tscn +++ b/resources/gardens/garden_09.tscn @@ -11,7 +11,7 @@ [ext_resource type="Texture2D" uid="uid://bv510d5r4dn82" path="res://assets/gardens/victory_assets/victory_asset_fragon_fly_01.png" id="8_cr4yr"] [ext_resource type="Texture2D" uid="uid://dckd1xhcdf2ie" path="res://assets/gardens/victory_assets/victory_asset_plant_06.png" id="9_8mcmd"] [ext_resource type="Texture2D" uid="uid://bpxc4vhri16pd" path="res://assets/gardens/victory_assets/victory_asset_pearl_01.png" id="10_v4xuo"] -[ext_resource type="Texture2D" uid="uid://bsw6v8ix7bb2s" path="res://assets/gardens/turtle.png" id="12_x1ufu"] +[ext_resource type="Texture2D" uid="uid://bsw6v8ix7bb2s" path="res://assets/gardens/animals/turtle.png" id="12_x1ufu"] [node name="Garden" type="Control" unique_id=167073905] custom_minimum_size = Vector2(2400, 2.08165e-12) diff --git a/resources/gardens/garden_10.tscn b/resources/gardens/garden_10.tscn index c9ff58cd..77ccdd69 100644 --- a/resources/gardens/garden_10.tscn +++ b/resources/gardens/garden_10.tscn @@ -11,7 +11,7 @@ [ext_resource type="Texture2D" uid="uid://bv510d5r4dn82" path="res://assets/gardens/victory_assets/victory_asset_fragon_fly_01.png" id="8_gmb0q"] [ext_resource type="Texture2D" uid="uid://dckd1xhcdf2ie" path="res://assets/gardens/victory_assets/victory_asset_plant_06.png" id="9_vc8yt"] [ext_resource type="Texture2D" uid="uid://bpxc4vhri16pd" path="res://assets/gardens/victory_assets/victory_asset_pearl_01.png" id="10_h7v48"] -[ext_resource type="Texture2D" uid="uid://bsw6v8ix7bb2s" path="res://assets/gardens/turtle.png" id="12_clqys"] +[ext_resource type="Texture2D" uid="uid://bsw6v8ix7bb2s" path="res://assets/gardens/animals/turtle.png" id="12_clqys"] [node name="Garden" type="Control" unique_id=167073905] custom_minimum_size = Vector2(2400, 2.08165e-12) diff --git a/resources/gardens/garden_11.tscn b/resources/gardens/garden_11.tscn index f192151f..9609540e 100644 --- a/resources/gardens/garden_11.tscn +++ b/resources/gardens/garden_11.tscn @@ -11,7 +11,7 @@ [ext_resource type="Texture2D" uid="uid://bv510d5r4dn82" path="res://assets/gardens/victory_assets/victory_asset_fragon_fly_01.png" id="8_uhx8c"] [ext_resource type="Texture2D" uid="uid://dckd1xhcdf2ie" path="res://assets/gardens/victory_assets/victory_asset_plant_06.png" id="9_1xmw6"] [ext_resource type="Texture2D" uid="uid://bpxc4vhri16pd" path="res://assets/gardens/victory_assets/victory_asset_pearl_01.png" id="10_o4mjf"] -[ext_resource type="Texture2D" uid="uid://bsw6v8ix7bb2s" path="res://assets/gardens/turtle.png" id="12_o7rdf"] +[ext_resource type="Texture2D" uid="uid://bsw6v8ix7bb2s" path="res://assets/gardens/animals/turtle.png" id="12_o7rdf"] [node name="Garden" type="Control" unique_id=167073905] custom_minimum_size = Vector2(2400, 2.08165e-12) diff --git a/resources/gardens/garden_12.tscn b/resources/gardens/garden_12.tscn index 552f7b0d..9deece00 100644 --- a/resources/gardens/garden_12.tscn +++ b/resources/gardens/garden_12.tscn @@ -11,7 +11,7 @@ [ext_resource type="Texture2D" uid="uid://bv510d5r4dn82" path="res://assets/gardens/victory_assets/victory_asset_fragon_fly_01.png" id="8_3wp2b"] [ext_resource type="Texture2D" uid="uid://dckd1xhcdf2ie" path="res://assets/gardens/victory_assets/victory_asset_plant_06.png" id="9_8l6wq"] [ext_resource type="Texture2D" uid="uid://bpxc4vhri16pd" path="res://assets/gardens/victory_assets/victory_asset_pearl_01.png" id="10_etg6n"] -[ext_resource type="Texture2D" uid="uid://bsw6v8ix7bb2s" path="res://assets/gardens/turtle.png" id="12_hjdxs"] +[ext_resource type="Texture2D" uid="uid://bsw6v8ix7bb2s" path="res://assets/gardens/animals/turtle.png" id="12_hjdxs"] [node name="Garden" type="Control" unique_id=167073905] custom_minimum_size = Vector2(2400, 2.08165e-12) From 953260c31d619a419b3e196c1e8ca3f986debc3f Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Thu, 30 Apr 2026 15:33:33 +0200 Subject: [PATCH 068/111] crabs garden --- assets/gardens/animals/crab.png | Bin 0 -> 3956 bytes assets/gardens/animals/crab.png.import | 40 +++ assets/gardens/gardens/garden_04.png | Bin 0 -> 15532 bytes assets/gardens/gardens/garden_04.png.import | 40 +++ .../victory_assets/victory_asset_birds.png | Bin 0 -> 2561 bytes .../victory_asset_birds.png.import | 40 +++ ...bbles_01.png => victory_asset_bubbles.png} | Bin ...mport => victory_asset_bubbles.png.import} | 6 +- ...ly_01.png => victory_asset_dragon_fly.png} | Bin ...rt => victory_asset_dragon_fly.png.import} | 6 +- ...t_pearl_01.png => victory_asset_pearl.png} | Bin ....import => victory_asset_pearl.png.import} | 6 +- .../victory_assets/victory_asset_plant_14.png | Bin 0 -> 5130 bytes .../victory_asset_plant_14.png.import | 40 +++ .../victory_assets/victory_asset_plant_15.png | Bin 0 -> 2246 bytes .../victory_asset_plant_15.png.import | 40 +++ .../victory_asset_sand_umbrella.png | Bin 0 -> 3884 bytes .../victory_asset_sand_umbrella.png.import | 40 +++ .../victory_asset_sea_stars.png | Bin 0 -> 4108 bytes .../victory_asset_sea_stars.png.import | 40 +++ .../victory_asset_see_shells.png | Bin 0 -> 7972 bytes .../victory_asset_see_shells.png.import | 40 +++ .../victory_assets/victory_asset_sun.png | Bin 0 -> 5918 bytes .../victory_asset_sun.png.import | 40 +++ .../victory_asset_watermelon.png | Bin 0 -> 3864 bytes .../victory_asset_watermelon.png.import | 40 +++ resources/gardens/garden_01.tscn | 59 +++-- resources/gardens/garden_02.tscn | 48 ++-- resources/gardens/garden_03.tscn | 41 +-- resources/gardens/garden_04.tscn | 248 ++++++++---------- resources/gardens/garden_05.tscn | 135 ++-------- resources/gardens/garden_06.tscn | 135 ++-------- resources/gardens/garden_07.tscn | 135 ++-------- resources/gardens/garden_08.tscn | 135 ++-------- resources/gardens/garden_09.tscn | 135 ++-------- resources/gardens/garden_10.tscn | 135 ++-------- resources/gardens/garden_11.tscn | 135 ++-------- resources/gardens/garden_12.tscn | 135 ++-------- 38 files changed, 726 insertions(+), 1168 deletions(-) create mode 100644 assets/gardens/animals/crab.png create mode 100644 assets/gardens/animals/crab.png.import create mode 100644 assets/gardens/gardens/garden_04.png create mode 100644 assets/gardens/gardens/garden_04.png.import create mode 100644 assets/gardens/victory_assets/victory_asset_birds.png create mode 100644 assets/gardens/victory_assets/victory_asset_birds.png.import rename assets/gardens/victory_assets/{victory_asset_bubbles_01.png => victory_asset_bubbles.png} (100%) rename assets/gardens/victory_assets/{victory_asset_bubbles_01.png.import => victory_asset_bubbles.png.import} (78%) rename assets/gardens/victory_assets/{victory_asset_fragon_fly_01.png => victory_asset_dragon_fly.png} (100%) rename assets/gardens/victory_assets/{victory_asset_fragon_fly_01.png.import => victory_asset_dragon_fly.png.import} (71%) rename assets/gardens/victory_assets/{victory_asset_pearl_01.png => victory_asset_pearl.png} (100%) rename assets/gardens/victory_assets/{victory_asset_pearl_01.png.import => victory_asset_pearl.png.import} (79%) create mode 100644 assets/gardens/victory_assets/victory_asset_plant_14.png create mode 100644 assets/gardens/victory_assets/victory_asset_plant_14.png.import create mode 100644 assets/gardens/victory_assets/victory_asset_plant_15.png create mode 100644 assets/gardens/victory_assets/victory_asset_plant_15.png.import create mode 100644 assets/gardens/victory_assets/victory_asset_sand_umbrella.png create mode 100644 assets/gardens/victory_assets/victory_asset_sand_umbrella.png.import create mode 100644 assets/gardens/victory_assets/victory_asset_sea_stars.png create mode 100644 assets/gardens/victory_assets/victory_asset_sea_stars.png.import create mode 100644 assets/gardens/victory_assets/victory_asset_see_shells.png create mode 100644 assets/gardens/victory_assets/victory_asset_see_shells.png.import create mode 100644 assets/gardens/victory_assets/victory_asset_sun.png create mode 100644 assets/gardens/victory_assets/victory_asset_sun.png.import create mode 100644 assets/gardens/victory_assets/victory_asset_watermelon.png create mode 100644 assets/gardens/victory_assets/victory_asset_watermelon.png.import diff --git a/assets/gardens/animals/crab.png b/assets/gardens/animals/crab.png new file mode 100644 index 0000000000000000000000000000000000000000..7c411e64a4610038021cec94bc6cbf806555d284 GIT binary patch literal 3956 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 Wot$1RFNhfsL`PfyXyy^pt^Wg?0To~X literal 0 HcmV?d00001 diff --git a/assets/gardens/gardens/garden_04.png.import b/assets/gardens/gardens/garden_04.png.import new file mode 100644 index 00000000..1d3d440a --- /dev/null +++ b/assets/gardens/gardens/garden_04.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://l32ekwfso26s" +path="res://.godot/imported/garden_04.png-4af29a3ee810ade399f7fba358601b39.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/gardens/gardens/garden_04.png" +dest_files=["res://.godot/imported/garden_04.png-4af29a3ee810ade399f7fba358601b39.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/gardens/victory_assets/victory_asset_birds.png b/assets/gardens/victory_assets/victory_asset_birds.png new file mode 100644 index 0000000000000000000000000000000000000000..27199503b1cd55b159fa2cc7e922bb7b3fca9cb3 GIT binary patch literal 2561 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 B04@Lk literal 0 HcmV?d00001 diff --git a/assets/gardens/victory_assets/victory_asset_birds.png.import b/assets/gardens/victory_assets/victory_asset_birds.png.import new file mode 100644 index 00000000..6151ad40 --- /dev/null +++ b/assets/gardens/victory_assets/victory_asset_birds.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://ddneerabvuyoe" +path="res://.godot/imported/victory_asset_birds.png-242acea68074c829a495641c63004ea5.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/gardens/victory_assets/victory_asset_birds.png" +dest_files=["res://.godot/imported/victory_asset_birds.png-242acea68074c829a495641c63004ea5.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/gardens/victory_assets/victory_asset_bubbles_01.png b/assets/gardens/victory_assets/victory_asset_bubbles.png similarity index 100% rename from assets/gardens/victory_assets/victory_asset_bubbles_01.png rename to assets/gardens/victory_assets/victory_asset_bubbles.png diff --git a/assets/gardens/victory_assets/victory_asset_bubbles_01.png.import b/assets/gardens/victory_assets/victory_asset_bubbles.png.import similarity index 78% rename from assets/gardens/victory_assets/victory_asset_bubbles_01.png.import rename to assets/gardens/victory_assets/victory_asset_bubbles.png.import index 05b946da..1eee76c6 100644 --- a/assets/gardens/victory_assets/victory_asset_bubbles_01.png.import +++ b/assets/gardens/victory_assets/victory_asset_bubbles.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://dvxnktx1wiyxp" -path="res://.godot/imported/victory_asset_bubbles_01.png-bee23d10f4d89637fd232a81e89bc594.ctex" +path="res://.godot/imported/victory_asset_bubbles.png-27a3e634297a833979e13e2de7695db2.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://assets/gardens/victory_assets/victory_asset_bubbles_01.png" -dest_files=["res://.godot/imported/victory_asset_bubbles_01.png-bee23d10f4d89637fd232a81e89bc594.ctex"] +source_file="res://assets/gardens/victory_assets/victory_asset_bubbles.png" +dest_files=["res://.godot/imported/victory_asset_bubbles.png-27a3e634297a833979e13e2de7695db2.ctex"] [params] diff --git a/assets/gardens/victory_assets/victory_asset_fragon_fly_01.png b/assets/gardens/victory_assets/victory_asset_dragon_fly.png similarity index 100% rename from assets/gardens/victory_assets/victory_asset_fragon_fly_01.png rename to assets/gardens/victory_assets/victory_asset_dragon_fly.png diff --git a/assets/gardens/victory_assets/victory_asset_fragon_fly_01.png.import b/assets/gardens/victory_assets/victory_asset_dragon_fly.png.import similarity index 71% rename from assets/gardens/victory_assets/victory_asset_fragon_fly_01.png.import rename to assets/gardens/victory_assets/victory_asset_dragon_fly.png.import index 523981d2..bfa1cec2 100644 --- a/assets/gardens/victory_assets/victory_asset_fragon_fly_01.png.import +++ b/assets/gardens/victory_assets/victory_asset_dragon_fly.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://bv510d5r4dn82" -path="res://.godot/imported/victory_asset_fragon_fly_01.png-52578592ff6d8514444d323ab5ab9908.ctex" +path="res://.godot/imported/victory_asset_dragon_fly.png-e8b19f1b238dd7e64214f9f295f1484b.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://assets/gardens/victory_assets/victory_asset_fragon_fly_01.png" -dest_files=["res://.godot/imported/victory_asset_fragon_fly_01.png-52578592ff6d8514444d323ab5ab9908.ctex"] +source_file="res://assets/gardens/victory_assets/victory_asset_dragon_fly.png" +dest_files=["res://.godot/imported/victory_asset_dragon_fly.png-e8b19f1b238dd7e64214f9f295f1484b.ctex"] [params] diff --git a/assets/gardens/victory_assets/victory_asset_pearl_01.png b/assets/gardens/victory_assets/victory_asset_pearl.png similarity index 100% rename from assets/gardens/victory_assets/victory_asset_pearl_01.png rename to assets/gardens/victory_assets/victory_asset_pearl.png diff --git a/assets/gardens/victory_assets/victory_asset_pearl_01.png.import b/assets/gardens/victory_assets/victory_asset_pearl.png.import similarity index 79% rename from assets/gardens/victory_assets/victory_asset_pearl_01.png.import rename to assets/gardens/victory_assets/victory_asset_pearl.png.import index c2c61290..d97811c4 100644 --- a/assets/gardens/victory_assets/victory_asset_pearl_01.png.import +++ b/assets/gardens/victory_assets/victory_asset_pearl.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://bpxc4vhri16pd" -path="res://.godot/imported/victory_asset_pearl_01.png-4bd0b6be4165503d875af982e9eb94d0.ctex" +path="res://.godot/imported/victory_asset_pearl.png-82dc33627b8a389923bbd16ea16c279c.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://assets/gardens/victory_assets/victory_asset_pearl_01.png" -dest_files=["res://.godot/imported/victory_asset_pearl_01.png-4bd0b6be4165503d875af982e9eb94d0.ctex"] +source_file="res://assets/gardens/victory_assets/victory_asset_pearl.png" +dest_files=["res://.godot/imported/victory_asset_pearl.png-82dc33627b8a389923bbd16ea16c279c.ctex"] [params] diff --git a/assets/gardens/victory_assets/victory_asset_plant_14.png b/assets/gardens/victory_assets/victory_asset_plant_14.png new file mode 100644 index 0000000000000000000000000000000000000000..3580062ff21c8c96fde5a928c3cfe7781c2ca681 GIT binary patch literal 5130 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 V;b3Sk@Nf^Lsiu7?|Dx6X{{xstTA2U< literal 0 HcmV?d00001 diff --git a/assets/gardens/victory_assets/victory_asset_plant_14.png.import b/assets/gardens/victory_assets/victory_asset_plant_14.png.import new file mode 100644 index 00000000..a0cdea34 --- /dev/null +++ b/assets/gardens/victory_assets/victory_asset_plant_14.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://br5gguush2y12" +path="res://.godot/imported/victory_asset_plant_14.png-be3e1ed2e0fc3e59af6a2eb3bebd8fe6.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/gardens/victory_assets/victory_asset_plant_14.png" +dest_files=["res://.godot/imported/victory_asset_plant_14.png-be3e1ed2e0fc3e59af6a2eb3bebd8fe6.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/gardens/victory_assets/victory_asset_plant_15.png b/assets/gardens/victory_assets/victory_asset_plant_15.png new file mode 100644 index 0000000000000000000000000000000000000000..e45c71f7eb66a30ca2feaa812ac30283cb355ec8 GIT binary patch literal 2246 zcmaJ@X*3%O77oTPs}-mfIMP60001pM8IuM zG3V5}xj0Te=DwuxDR2iPZiWE>yr7@PLR*YG1^~FCkZ?o0sIr~%mGHNnAk(1Gul@T< zs;=w~oa+v5LF`lqftnJ$l5REE(PoG2|*+Q#u&skseHKK zHk~bj&F$05$_mRf*3RfXhU6#7PAtfBHMY1D>Nubg?7%z$witar9xSZs;?UPRq+h`K zi))s}7B@gq%R!?b4>0FyMK}*dVF_G980EDUKFq-dWUa*wf}E;<$fCE~Qjo$uH51Vy zP)KGIg}LLr*kUs!;Xt{L&q29&^5+XS2y0{{?vj6i_zSXJtrnKSNad}Axzls3iBUhi z(_-Rl{$yq9ShIYT*N+?^Ewlsud`9MIc4W57E>$ghFVR2gH)0Ga^-4CIOS);Qj zCc;Ax@^7PTsZBEsSB!rMd@iQw6LW)Z9YA^vJ^DY9n?@3JvvYSxEpnZ|bhVe^cE zwth^&x?a{EAA(T4O?HSiG#yO9n?`k2RfLS@W>5Ab#iU?r3c5mK;a2~gP0L$_m?Q@A zBV_6fwz-H}9i2i#{-y&Su?p~KZe>hPjvn;k2431DaU8nxZO9Ydt=3tQ(RpNW8qcpR_;?1(Svo%raJu}BXD~}`Fho(;`E7)%^XJB3;g>2; zNG1HJ0KoU?`0uWBv}_IFRI&8|6sU<2ZhM-WEvEB9S8XQ(!N~4(RR2=j8(Y@ z11uHk+SS*Nhcf8!~;26k193;Vkpj_{vd+#iE%YHQ{#vA~cr zn}-qaAG29&ZV>PO4SSdZhFA*ga^=gqMs>SHnLXe2&GIxFb!gR(^uq;V?^31%wszm$ zwP+iuoiWjU;S;ZmmM7?k2DMNaMxCFbDB0YB3c3^P4_*N?E|H$ar6U22>ikz=nI6`Y ztZ`iE!#?-Aqs$9FrS!MdAAXNB<2WN6=P=t}Y~h8^)`~^LOb>}`;uEh;!r_AW>fD7A z08%D5WVw7bzra+&ow-z6VA`|p`@|D+itiJ4ilQSuef<7wK$D8dY{n~*qycTao zUF%&49RO8r)t-xuib8n2~Z~#HRnHPnPC1AA#)$ znO}zM5w=787mcg$KnkFLf*!uUuSDCv&6y`{-*g47*!9FXrcv)W4dG&^1Obwql2lCM z1VSuuHYoK`@Z{@-o+*~MzT_-n19J#vny_TNZ2QYFeN0lZRCszk=sI2}8=z{lMTB$w zMS*@w?MP2cEcyV4_{H|q*SwY(v29^7LHCL2Ld>OL!!rAX7z-i;qZW8hI@NH@g`lH( zu1&T#8p`q;p!489UF#A4O2v9}_4Uzh-ON+@kUKp@ zb1d-cY)J!Kn?h4rbhgGIJ40*OR$?mQgWrT;Mg3q}2%&17$g@ojMMh7mg{^UFx<1Yj z9uT0tZ&gv(3MBXMEW@OYP;D&wDaT0}VFRJJ-sHK8*${vrFD@egSFxsHZaE6ip~&jU zssd*KU3&~f6Ts5L><+zsy!Z~a&PY@2@KDl7K_VWLoac3ZnYap7=OFyC<3!Mzcs@ju zSVbM-y&C4}b_%J7Aj&oFpVx51i4gFFkejT+ggV{rFtlip?vsTd6fWjIJ9~BPoqjU3 z6mTF^*X3C`h?FMPC!A)&4D~sEvbB|!a#L`XXzCR{?MX>2`xTnJj8?OmF1}r zzU(Nbyt2aY!4S0ck$W#$k`I7vNA7`!| V2hQTSsXreR0MY~ve`MsA^bfKPE9?LO literal 0 HcmV?d00001 diff --git a/assets/gardens/victory_assets/victory_asset_plant_15.png.import b/assets/gardens/victory_assets/victory_asset_plant_15.png.import new file mode 100644 index 00000000..28a93393 --- /dev/null +++ b/assets/gardens/victory_assets/victory_asset_plant_15.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bmqanuxy2hmrb" +path="res://.godot/imported/victory_asset_plant_15.png-9fbb88c052309e49bd760212e621cdc9.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/gardens/victory_assets/victory_asset_plant_15.png" +dest_files=["res://.godot/imported/victory_asset_plant_15.png-9fbb88c052309e49bd760212e621cdc9.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/gardens/victory_assets/victory_asset_sand_umbrella.png b/assets/gardens/victory_assets/victory_asset_sand_umbrella.png new file mode 100644 index 0000000000000000000000000000000000000000..7d43217917e80aebd8d1c4c3b1a0e38a6a15f451 GIT binary patch literal 3884 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 KMNUMnLSTXm`_s_? literal 0 HcmV?d00001 diff --git a/assets/gardens/victory_assets/victory_asset_sea_stars.png.import b/assets/gardens/victory_assets/victory_asset_sea_stars.png.import new file mode 100644 index 00000000..65ba5266 --- /dev/null +++ b/assets/gardens/victory_assets/victory_asset_sea_stars.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://qhs2fydvrnhk" +path="res://.godot/imported/victory_asset_sea_stars.png-418c4cb9595aaaafbef0223e050e60dc.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/gardens/victory_assets/victory_asset_sea_stars.png" +dest_files=["res://.godot/imported/victory_asset_sea_stars.png-418c4cb9595aaaafbef0223e050e60dc.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/gardens/victory_assets/victory_asset_see_shells.png b/assets/gardens/victory_assets/victory_asset_see_shells.png new file mode 100644 index 0000000000000000000000000000000000000000..4d252db5794f96bff65a8262f21fe478294f1bd2 GIT binary patch literal 7972 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�uB0Mx4Z3U6QpemS*;-4N1J!WF8T2 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 Date: Tue, 26 May 2026 10:55:25 +0200 Subject: [PATCH 069/111] Gardens animals transform normalization --- resources/gardens/garden_01.tscn | 5 +++-- resources/gardens/garden_02.tscn | 18 ++++++++++-------- resources/gardens/garden_03.tscn | 5 +++-- resources/gardens/garden_04.tscn | 9 +++++---- 4 files changed, 21 insertions(+), 16 deletions(-) diff --git a/resources/gardens/garden_01.tscn b/resources/gardens/garden_01.tscn index 90811a84..b1af03db 100644 --- a/resources/gardens/garden_01.tscn +++ b/resources/gardens/garden_01.tscn @@ -208,8 +208,9 @@ pivot_offset = Vector2(120, 120) layout_mode = 0 offset_left = 1511.0 offset_top = 32.0 -offset_right = 1791.0 -offset_bottom = 512.0 +offset_right = 1650.0 +offset_bottom = 272.0 +scale = Vector2(2, 2) texture = ExtResource("jellyfish_tex") expand_mode = 1 stretch_mode = 5 diff --git a/resources/gardens/garden_02.tscn b/resources/gardens/garden_02.tscn index 0dd23c7b..ebbd6333 100644 --- a/resources/gardens/garden_02.tscn +++ b/resources/gardens/garden_02.tscn @@ -209,19 +209,21 @@ pivot_offset = Vector2(120, 120) layout_mode = 0 offset_left = 500.0 offset_top = 155.0 -offset_right = 800.0 -offset_bottom = 455.0 +offset_right = 640.0 +offset_bottom = 292.0 +scale = Vector2(2, 2) texture = ExtResource("12_v4g1g") expand_mode = 1 stretch_mode = 5 -[node name="Turtle_02" type="TextureRect" parent="." unique_id=1563614410] +[node name="Turtle_02" type="TextureRect" parent="." unique_id=674773067] layout_mode = 0 -offset_left = 381.0 -offset_top = 439.0 -offset_right = 531.0 -offset_bottom = 589.0 -rotation = -0.2443461 +offset_left = 376.99997 +offset_top = 474.99994 +offset_right = 517.0 +offset_bottom = 611.99994 +rotation = -0.33784395 +scale = Vector2(1.2, 1.2) texture = ExtResource("12_v4g1g") expand_mode = 1 stretch_mode = 5 diff --git a/resources/gardens/garden_03.tscn b/resources/gardens/garden_03.tscn index 2ce36635..6ab41d31 100644 --- a/resources/gardens/garden_03.tscn +++ b/resources/gardens/garden_03.tscn @@ -202,8 +202,9 @@ pivot_offset = Vector2(120, 120) layout_mode = 0 offset_left = 547.0 offset_top = 219.0 -offset_right = 967.0 -offset_bottom = 519.0 +offset_right = 701.0 +offset_bottom = 325.0 +scale = Vector2(2.5, 2.5) texture = ExtResource("12_j3ks8") expand_mode = 1 stretch_mode = 5 diff --git a/resources/gardens/garden_04.tscn b/resources/gardens/garden_04.tscn index ff8619d3..b8ddc245 100644 --- a/resources/gardens/garden_04.tscn +++ b/resources/gardens/garden_04.tscn @@ -190,10 +190,11 @@ pivot_offset = Vector2(120, 120) [node name="Crab" type="TextureRect" parent="." unique_id=518902024] layout_mode = 0 -offset_left = 629.0 -offset_top = 259.0 -offset_right = 929.0 -offset_bottom = 559.0 +offset_left = 630.0 +offset_top = 260.0 +offset_right = 782.0 +offset_bottom = 362.0 +scale = Vector2(2, 2) texture = ExtResource("12_2bwv2") expand_mode = 1 stretch_mode = 5 From fdd597f5d69d6d06d4ffef54bad1c02ecc3601b0 Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Tue, 26 May 2026 11:08:06 +0200 Subject: [PATCH 070/111] Yellow Parakeet garden (05) --- assets/gardens/animals/yellow_parakeet.png | Bin 0 -> 4075 bytes .../animals/yellow_parakeet.png.import | 40 +++++ assets/gardens/gardens/garden_05.png | Bin 0 -> 17532 bytes assets/gardens/gardens/garden_05.png.import | 40 +++++ .../victory_asset_bird_treehouse.png | Bin 0 -> 1702 bytes .../victory_asset_bird_treehouse.png.import | 40 +++++ .../victory_assets/victory_asset_clouds.png | Bin 0 -> 2132 bytes .../victory_asset_clouds.png.import | 40 +++++ .../victory_assets/victory_asset_coconut.png | Bin 0 -> 3068 bytes .../victory_asset_coconut.png.import | 40 +++++ .../victory_assets/victory_asset_ladybugs.png | Bin 0 -> 3416 bytes .../victory_asset_ladybugs.png.import | 40 +++++ .../victory_assets/victory_asset_plant_16.png | Bin 0 -> 2902 bytes .../victory_asset_plant_16.png.import | 40 +++++ .../victory_assets/victory_asset_plant_17.png | Bin 0 -> 5035 bytes .../victory_asset_plant_17.png.import | 40 +++++ .../victory_assets/victory_asset_plant_18.png | Bin 0 -> 2602 bytes .../victory_asset_plant_18.png.import | 40 +++++ resources/gardens/garden_05.tscn | 164 ++++++++++++++---- 19 files changed, 492 insertions(+), 32 deletions(-) create mode 100644 assets/gardens/animals/yellow_parakeet.png create mode 100644 assets/gardens/animals/yellow_parakeet.png.import create mode 100644 assets/gardens/gardens/garden_05.png create mode 100644 assets/gardens/gardens/garden_05.png.import create mode 100644 assets/gardens/victory_assets/victory_asset_bird_treehouse.png create mode 100644 assets/gardens/victory_assets/victory_asset_bird_treehouse.png.import create mode 100644 assets/gardens/victory_assets/victory_asset_clouds.png create mode 100644 assets/gardens/victory_assets/victory_asset_clouds.png.import create mode 100644 assets/gardens/victory_assets/victory_asset_coconut.png create mode 100644 assets/gardens/victory_assets/victory_asset_coconut.png.import create mode 100644 assets/gardens/victory_assets/victory_asset_ladybugs.png create mode 100644 assets/gardens/victory_assets/victory_asset_ladybugs.png.import create mode 100644 assets/gardens/victory_assets/victory_asset_plant_16.png create mode 100644 assets/gardens/victory_assets/victory_asset_plant_16.png.import create mode 100644 assets/gardens/victory_assets/victory_asset_plant_17.png create mode 100644 assets/gardens/victory_assets/victory_asset_plant_17.png.import create mode 100644 assets/gardens/victory_assets/victory_asset_plant_18.png create mode 100644 assets/gardens/victory_assets/victory_asset_plant_18.png.import diff --git a/assets/gardens/animals/yellow_parakeet.png b/assets/gardens/animals/yellow_parakeet.png new file mode 100644 index 0000000000000000000000000000000000000000..96bc2a14f170175ccc72a1878077d2dae7590147 GIT binary patch literal 4075 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 literal 0 HcmV?d00001 diff --git a/assets/gardens/animals/yellow_parakeet.png.import b/assets/gardens/animals/yellow_parakeet.png.import new file mode 100644 index 00000000..bc179af0 --- /dev/null +++ b/assets/gardens/animals/yellow_parakeet.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bd5pxoufamqy" +path="res://.godot/imported/yellow_parakeet.png-ce114f4bc0be41f81a9d2e24bceb2fcf.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/gardens/animals/yellow_parakeet.png" +dest_files=["res://.godot/imported/yellow_parakeet.png-ce114f4bc0be41f81a9d2e24bceb2fcf.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/gardens/gardens/garden_05.png b/assets/gardens/gardens/garden_05.png new file mode 100644 index 0000000000000000000000000000000000000000..049a827f678a75ff40dfe3f917dc64996f0f2719 GIT binary patch literal 17532 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 nTr67<4oR{sbHB3vK=f_L7WP#4&oA=3gQle zbl`NL?ZDfCTtVy#kOvAgwk%5k?mfgMbpM&1WHus2eW4+cGO4Q=BUaL||L1elt;p<$ z)*F!7J%Am6|MvfGzN;1Nu>ru%!QcG@V6*s^6l8sm4S0`={ojQ}x1=!3umQ(WQ>JmP z!Umj1O_{~D2pf=xnlg!N4K|<*HDwOh5^O*nYRVL@71#h7YRU|*1=s)`)RYO_*02G( zsHx_-Enx#VsHvv7tzZMVsHtYSEnowdK}|KmT^crES=7|xxJ$wYv_VZRin|nSKwH$* zVz^7d2G~GNErQF24X}lpqT@1Q18kzEsJJZH0Nbc38ZHAiU>&F_3a&P6z`9UV>bRP) z0qaCfsp4wE2CN%3rG~2k8_)-8N(EO68_*YON{lOk4d@d!CBm(R4d@#+RgGH%8*mw@ zsVdx3*nrDIO%>yozy@3&L2jP zF~-e_?HFT>cQM9i!gJ@m=FO4ib}>ez2Mlq>-R}Q9oOm%yz&^(quM3`gh%>NexzBxw zyNNNXT}wM)zJOSx?*Jy$UFAIic!16j@l)kC0MPrC_KVVbB&fjrCOlytBc+L6Q|pU6 zUiShSYU&Zdt$1sMS%STV-c23?fPaPS7$pm9!A`>EpP>KyQ_{V5lq_szk7e97V~2Un zZju$)Eor?Ef@Mv-c}>FQbB=Oq+6tB(&OhYiEbOu0T5kX&3$V;~f@MYLJ}ev{XdPS} zYb37wWLmJ2LMj%Ozth09lOmzAMlGP>UCpC%1hjUVM}g>@V@kk*@(2CT-9@eTCH z!&}JDa*eeMS{Vue-9y>|IwxYr+66UWtDpR!uh2UywFU2Eo2)Fs0>EF8-wZMU_(i-W zb4}m8wEG)%CuK&=hsK&8<2RjdjSA~H><`RGO`D9z4gl^jqiXG`;xs<<+JgJh_Y3B; zRF8OjvSz~kqxu{1xdGs+YM~Xtwyp}+$~@L`Rj*G2*37s@s%mCnaaPbpQrO;y0ibf$ zBZXz2OSRHivycx3q#X8qP2RjF;qq&!*>uZ0lEa>_>ZsC(0#d%m=2bk-I&5CWGXp7X z&u6tn`5v3sSh|42<~5csAc4Jv^90pNU@zg!R%$9;z=r}-J{07&=sfn4hJxacpL{4F zC4n8aHew}>B@cGk{Kk?8`%pm2_t^Z3WLNf}+D(9|}nMP*B#G`#^^+Ys`IME$mde+{NU3Y+2dwEe=~&_H3vY z)_+msOuomKHRV3=+>LoZYKc1!mEL&w@W#E2vTtLhb(>R0Ta*nszk+vTwBmdyAmy;6 zEW@t)e1v7#rnerEW*K(XIV>rMCFQWBdV)1Ii|7f~)aP(L!J5ipNm+%RT5o_ftFWuj zVM#eGDTgK16Rgi;N%@i2CFHQAtiq11H$a-hlClcB`W%*&!;*4XQa!D$nykXEK8Gdcu%sN8RBy0mW)r=^nwd@X25TmVC1n+M z^%p@~grMCDj}3)OrI_y}_EvVM$qpHFLZ#$s(+oGgOi+!gi6vl5$v5 z4oj*xSTi$<-eAqlD0+i6lf#m-2s^gk0F4}$lttJsa#&IhOUhwM^#(h(-hfnZux2hv z>J8RR4ok`+teF!jk}SfSIrS&WB5W5qEGdU2<*=lBgf%g%sQuch+y<1tQ0c5-%3Q}Y z3cg0FG}hNn4FK)|+%Q(I*b{&a2wzvlfE_SzXwf$hH|}=;51K1vjIp;^7b-CSbg9OG zy(X-a-DfEOHaG)zZF?&v2J91IovVuhyCtlX-3yebUJTef%p1CpF07*qoM6N<$f;B-X0ssI2 literal 0 HcmV?d00001 diff --git a/assets/gardens/victory_assets/victory_asset_bird_treehouse.png.import b/assets/gardens/victory_assets/victory_asset_bird_treehouse.png.import new file mode 100644 index 00000000..021fdf82 --- /dev/null +++ b/assets/gardens/victory_assets/victory_asset_bird_treehouse.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bqafuj82xbdqm" +path="res://.godot/imported/victory_asset_bird_treehouse.png-13d9c56abdcabfcb3b744e08f7e7fbf5.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/gardens/victory_assets/victory_asset_bird_treehouse.png" +dest_files=["res://.godot/imported/victory_asset_bird_treehouse.png-13d9c56abdcabfcb3b744e08f7e7fbf5.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/gardens/victory_assets/victory_asset_clouds.png b/assets/gardens/victory_assets/victory_asset_clouds.png new file mode 100644 index 0000000000000000000000000000000000000000..8e68d5a4217d5c6bee212a568e56715bbf48a084 GIT binary patch literal 2132 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 KMNUMnLSTY=$LUl6 literal 0 HcmV?d00001 diff --git a/assets/gardens/victory_assets/victory_asset_coconut.png.import b/assets/gardens/victory_assets/victory_asset_coconut.png.import new file mode 100644 index 00000000..67f8451e --- /dev/null +++ b/assets/gardens/victory_assets/victory_asset_coconut.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c784fmd7v5wkt" +path="res://.godot/imported/victory_asset_coconut.png-931b3a5a5bc8f484fbb35bf25285930f.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/gardens/victory_assets/victory_asset_coconut.png" +dest_files=["res://.godot/imported/victory_asset_coconut.png-931b3a5a5bc8f484fbb35bf25285930f.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/gardens/victory_assets/victory_asset_ladybugs.png b/assets/gardens/victory_assets/victory_asset_ladybugs.png new file mode 100644 index 0000000000000000000000000000000000000000..909db4aa2586398661d5c8e550c23aca1bbdc1c3 GIT binary patch literal 3416 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 YFv;x%lkw%%^H&LAX=-cIU<7;oU&Bw1=Kufz literal 0 HcmV?d00001 diff --git a/assets/gardens/victory_assets/victory_asset_ladybugs.png.import b/assets/gardens/victory_assets/victory_asset_ladybugs.png.import new file mode 100644 index 00000000..b4294b6c --- /dev/null +++ b/assets/gardens/victory_assets/victory_asset_ladybugs.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bpqo8maufc3gr" +path="res://.godot/imported/victory_asset_ladybugs.png-8a903ba7f287aa7dbf9a9a4bc8db8f06.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/gardens/victory_assets/victory_asset_ladybugs.png" +dest_files=["res://.godot/imported/victory_asset_ladybugs.png-8a903ba7f287aa7dbf9a9a4bc8db8f06.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/gardens/victory_assets/victory_asset_plant_16.png b/assets/gardens/victory_assets/victory_asset_plant_16.png new file mode 100644 index 0000000000000000000000000000000000000000..1fe4f11c8d57200c5441768324020b60031d723b GIT binary patch literal 2902 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 literal 0 HcmV?d00001 diff --git a/assets/gardens/victory_assets/victory_asset_plant_16.png.import b/assets/gardens/victory_assets/victory_asset_plant_16.png.import new file mode 100644 index 00000000..a7060191 --- /dev/null +++ b/assets/gardens/victory_assets/victory_asset_plant_16.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://x0skor7vxadl" +path="res://.godot/imported/victory_asset_plant_16.png-5c30e22a3df95565205d259edadc7d23.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/gardens/victory_assets/victory_asset_plant_16.png" +dest_files=["res://.godot/imported/victory_asset_plant_16.png-5c30e22a3df95565205d259edadc7d23.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/gardens/victory_assets/victory_asset_plant_17.png b/assets/gardens/victory_assets/victory_asset_plant_17.png new file mode 100644 index 0000000000000000000000000000000000000000..ffd6dedcfe67b0fd71c48bdb7ae0e4eaa79c7cdc GIT binary patch literal 5035 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 B>68Ef literal 0 HcmV?d00001 diff --git a/assets/gardens/victory_assets/victory_asset_plant_17.png.import b/assets/gardens/victory_assets/victory_asset_plant_17.png.import new file mode 100644 index 00000000..75402244 --- /dev/null +++ b/assets/gardens/victory_assets/victory_asset_plant_17.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bg02dhcrwf5nx" +path="res://.godot/imported/victory_asset_plant_17.png-c6bede2b0255e8ea7e6473f74ca26813.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/gardens/victory_assets/victory_asset_plant_17.png" +dest_files=["res://.godot/imported/victory_asset_plant_17.png-c6bede2b0255e8ea7e6473f74ca26813.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/gardens/victory_assets/victory_asset_plant_18.png b/assets/gardens/victory_assets/victory_asset_plant_18.png new file mode 100644 index 0000000000000000000000000000000000000000..82057327021e16a00040e5c4459b087d71ed282b GIT binary patch literal 2602 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 literal 0 HcmV?d00001 diff --git a/assets/gardens/victory_assets/victory_asset_plant_18.png.import b/assets/gardens/victory_assets/victory_asset_plant_18.png.import new file mode 100644 index 00000000..661c5560 --- /dev/null +++ b/assets/gardens/victory_assets/victory_asset_plant_18.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://chtr4d0a80s61" +path="res://.godot/imported/victory_asset_plant_18.png-9a654bed9e35c4084d3e48f0d10fe8e0.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/gardens/victory_assets/victory_asset_plant_18.png" +dest_files=["res://.godot/imported/victory_asset_plant_18.png-9a654bed9e35c4084d3e48f0d10fe8e0.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/resources/gardens/garden_05.tscn b/resources/gardens/garden_05.tscn index adf8ae85..fc49c0e2 100644 --- a/resources/gardens/garden_05.tscn +++ b/resources/gardens/garden_05.tscn @@ -1,10 +1,17 @@ [gd_scene format=3 uid="uid://bjs0o30gmhv3l"] [ext_resource type="Script" uid="uid://ch5h4p1o54whq" path="res://resources/gardens/garden.gd" id="1_5owem"] -[ext_resource type="Texture2D" uid="uid://l32ekwfso26s" path="res://assets/gardens/gardens/garden_04.png" id="2_l6rp4"] -[ext_resource type="Texture2D" uid="uid://dro75vltqiq6j" path="res://assets/gardens/victory_assets/victory_asset_plant_07.png" id="3_fja20"] +[ext_resource type="Texture2D" uid="uid://d3bu30iutptwx" path="res://assets/gardens/gardens/garden_05.png" id="2_l6rp4"] +[ext_resource type="Texture2D" uid="uid://c0lcx7x0naofl" path="res://assets/gardens/victory_assets/victory_asset_clouds.png" id="3_l6rp4"] +[ext_resource type="Texture2D" uid="uid://x0skor7vxadl" path="res://assets/gardens/victory_assets/victory_asset_plant_16.png" id="4_0y47p"] [ext_resource type="PackedScene" uid="uid://delcgui3v0eek" path="res://sources/lesson_screen/lesson_button.tscn" id="4_epm30"] -[ext_resource type="Texture2D" uid="uid://d3vt2qpngkkjs" path="res://assets/gardens/animals/crab.png" id="5_vy4mu"] +[ext_resource type="Texture2D" uid="uid://bqafuj82xbdqm" path="res://assets/gardens/victory_assets/victory_asset_bird_treehouse.png" id="5_fja20"] +[ext_resource type="Texture2D" uid="uid://bd5pxoufamqy" path="res://assets/gardens/animals/yellow_parakeet.png" id="5_l6rp4"] +[ext_resource type="Texture2D" uid="uid://bg02dhcrwf5nx" path="res://assets/gardens/victory_assets/victory_asset_plant_17.png" id="6_oapcv"] +[ext_resource type="Texture2D" uid="uid://chtr4d0a80s61" path="res://assets/gardens/victory_assets/victory_asset_plant_18.png" id="7_sjfs7"] +[ext_resource type="Texture2D" uid="uid://c784fmd7v5wkt" path="res://assets/gardens/victory_assets/victory_asset_coconut.png" id="8_se3av"] +[ext_resource type="Texture2D" uid="uid://bpqo8maufc3gr" path="res://assets/gardens/victory_assets/victory_asset_ladybugs.png" id="9_r7c56"] +[ext_resource type="Texture2D" uid="uid://its5dfr0ipak" path="res://assets/gardens/victory_assets/victory_asset_butterfly.png" id="10_s6qsy"] [node name="Garden" type="Control" unique_id=167073905] custom_minimum_size = Vector2(2400, 2.08165e-12) @@ -24,7 +31,7 @@ completed_lesson_text = Color(0.7490196, 0.2784314, 0, 1) [node name="Background" type="TextureRect" parent="." unique_id=1058030897] unique_name_in_owner = true -modulate = Color(1, 0.49803922, 0.2, 1) +modulate = Color(0.92156863, 0.6431373, 0, 1) layout_mode = 0 offset_left = 350.0 offset_top = 50.0 @@ -45,14 +52,106 @@ grow_vertical = 2 mouse_filter = 2 [node name="Victory_Asset_01" type="TextureRect" parent="Victory_Assets" unique_id=1278004645] -modulate = Color(0.7490196, 0.2784314, 0, 1) +modulate = Color(0.7019608, 0.44313726, 0, 1) layout_mode = 0 -offset_left = 761.0 -offset_top = 1263.0 -offset_right = 939.0 -offset_bottom = 1575.0 +offset_left = 624.0 +offset_top = 138.0 +offset_right = 841.0 +offset_bottom = 254.0 +scale = Vector2(2, 2) mouse_filter = 2 -texture = ExtResource("3_fja20") +texture = ExtResource("3_l6rp4") +expand_mode = 1 +stretch_mode = 5 + +[node name="Victory_Asset_02" type="TextureRect" parent="Victory_Assets" unique_id=948698376] +modulate = Color(0.7019608, 0.44313726, 0, 1) +layout_mode = 0 +offset_left = 1132.0 +offset_top = 1289.0 +offset_right = 1208.0 +offset_bottom = 1450.0 +scale = Vector2(2, 2) +mouse_filter = 2 +texture = ExtResource("4_0y47p") +expand_mode = 1 +stretch_mode = 5 + +[node name="Victory_Asset_03" type="TextureRect" parent="Victory_Assets" unique_id=1120198189] +modulate = Color(0.7019608, 0.44313726, 0, 1) +layout_mode = 0 +offset_left = 1732.0 +offset_top = 554.0 +offset_right = 1818.0 +offset_bottom = 752.0 +scale = Vector2(2, 2) +mouse_filter = 2 +texture = ExtResource("5_fja20") +expand_mode = 1 +stretch_mode = 5 + +[node name="Victory_Asset_04" type="TextureRect" parent="Victory_Assets" unique_id=1510363231] +modulate = Color(0.7019608, 0.44313726, 0, 1) +layout_mode = 0 +offset_left = 629.0 +offset_top = 1161.0 +offset_right = 809.0 +offset_bottom = 1342.0 +scale = Vector2(2, 2) +mouse_filter = 2 +texture = ExtResource("6_oapcv") +expand_mode = 1 +stretch_mode = 5 + +[node name="Victory_Asset_05" type="TextureRect" parent="Victory_Assets" unique_id=1851075152] +modulate = Color(0.7019608, 0.44313726, 0, 1) +layout_mode = 0 +offset_left = 1107.0 +offset_top = 347.0 +offset_right = 1235.0 +offset_bottom = 516.0 +scale = Vector2(2, 2) +mouse_filter = 2 +texture = ExtResource("7_sjfs7") +expand_mode = 1 +stretch_mode = 5 + +[node name="Victory_Asset_06" type="TextureRect" parent="Victory_Assets" unique_id=852394586] +modulate = Color(0.7019608, 0.44313726, 0, 1) +layout_mode = 0 +offset_left = 1355.0 +offset_top = 1179.0 +offset_right = 1453.0 +offset_bottom = 1280.0 +scale = Vector2(2, 2) +mouse_filter = 2 +texture = ExtResource("8_se3av") +expand_mode = 1 +stretch_mode = 5 + +[node name="Victory_Asset_07" type="TextureRect" parent="Victory_Assets" unique_id=1383257948] +modulate = Color(0.7019608, 0.44313726, 0, 1) +layout_mode = 0 +offset_left = 1426.0 +offset_top = 345.0 +offset_right = 1585.0 +offset_bottom = 509.0 +scale = Vector2(2, 2) +mouse_filter = 2 +texture = ExtResource("9_r7c56") +expand_mode = 1 +stretch_mode = 5 + +[node name="Victory_Asset_08" type="TextureRect" parent="Victory_Assets" unique_id=1370235462] +modulate = Color(0.7019608, 0.44313726, 0, 1) +layout_mode = 0 +offset_left = 635.0 +offset_top = 522.0 +offset_right = 801.0 +offset_bottom = 639.0 +scale = Vector2(2, 2) +mouse_filter = 2 +texture = ExtResource("10_s6qsy") expand_mode = 1 stretch_mode = 5 @@ -67,34 +166,34 @@ mouse_filter = 2 [node name="Slot1" parent="Buttons" unique_id=1361620593 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 494.0 -offset_top = 1052.0 -offset_right = 734.0 -offset_bottom = 1292.0 +offset_left = 404.0 +offset_top = 751.0 +offset_right = 644.0 +offset_bottom = 991.0 pivot_offset = Vector2(120, 120) [node name="Slot2" parent="Buttons" unique_id=1025579258 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 762.0 -offset_top = 887.0 -offset_right = 1002.0 -offset_bottom = 1127.0 +offset_left = 753.0 +offset_top = 869.0 +offset_right = 993.0 +offset_bottom = 1109.0 pivot_offset = Vector2(120, 120) [node name="Slot3" parent="Buttons" unique_id=353688519 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 1066.0 -offset_top = 810.0 -offset_right = 1306.0 -offset_bottom = 1050.0 +offset_left = 1087.0 +offset_top = 792.0 +offset_right = 1327.0 +offset_bottom = 1032.0 pivot_offset = Vector2(120, 120) [node name="Slot4" parent="Buttons" unique_id=1536126098 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 1405.0 -offset_top = 885.0 -offset_right = 1645.0 -offset_bottom = 1125.0 +offset_left = 1428.0 +offset_top = 853.0 +offset_right = 1668.0 +offset_bottom = 1093.0 pivot_offset = Vector2(120, 120) [node name="Slot5" parent="Buttons" unique_id=960033946 instance=ExtResource("4_epm30")] @@ -105,12 +204,13 @@ offset_right = 1960.0 offset_bottom = 1260.0 pivot_offset = Vector2(120, 120) -[node name="Crab" type="TextureRect" parent="." unique_id=518902024] +[node name="Yellow Parakeet" type="TextureRect" parent="." unique_id=518902024] layout_mode = 0 -offset_left = 629.0 -offset_top = 259.0 -offset_right = 929.0 -offset_bottom = 559.0 -texture = ExtResource("5_vy4mu") +offset_left = 1625.0 +offset_top = 1303.0 +offset_right = 1745.0 +offset_bottom = 1460.0 +scale = Vector2(2, 2) +texture = ExtResource("5_l6rp4") expand_mode = 1 stretch_mode = 5 From e5d628897c1f161ad2abf63e10d2a6f33665352b Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Tue, 26 May 2026 11:32:46 +0200 Subject: [PATCH 071/111] Garden Caterpillar (06) --- assets/gardens/animals/caterpillar.png | Bin 0 -> 5055 bytes assets/gardens/animals/caterpillar.png.import | 40 ++++ assets/gardens/gardens/garden_06.png | Bin 0 -> 16901 bytes assets/gardens/gardens/garden_06.png.import | 40 ++++ .../victory_assets/victory_asset_bees.png | Bin 2222 -> 3659 bytes .../victory_asset_butterfly_2.png | Bin 0 -> 4880 bytes .../victory_asset_butterfly_2.png.import | 40 ++++ .../victory_assets/victory_asset_leaves.png | Bin 0 -> 3310 bytes .../victory_asset_leaves.png.import | 40 ++++ .../victory_assets/victory_asset_mushroom.png | Bin 1422 -> 2709 bytes .../victory_assets/victory_asset_plant_19.png | Bin 0 -> 2692 bytes .../victory_asset_plant_19.png.import | 40 ++++ .../victory_assets/victory_asset_plant_20.png | Bin 0 -> 2906 bytes .../victory_asset_plant_20.png.import | 40 ++++ .../victory_assets/victory_asset_snail.png | Bin 0 -> 3545 bytes .../victory_asset_snail.png.import | 40 ++++ resources/gardens/garden_03.tscn | 16 +- resources/gardens/garden_05.tscn | 8 +- resources/gardens/garden_06.tscn | 172 ++++++++++++++---- 19 files changed, 428 insertions(+), 48 deletions(-) create mode 100644 assets/gardens/animals/caterpillar.png create mode 100644 assets/gardens/animals/caterpillar.png.import create mode 100644 assets/gardens/gardens/garden_06.png create mode 100644 assets/gardens/gardens/garden_06.png.import create mode 100644 assets/gardens/victory_assets/victory_asset_butterfly_2.png create mode 100644 assets/gardens/victory_assets/victory_asset_butterfly_2.png.import create mode 100644 assets/gardens/victory_assets/victory_asset_leaves.png create mode 100644 assets/gardens/victory_assets/victory_asset_leaves.png.import create mode 100644 assets/gardens/victory_assets/victory_asset_plant_19.png create mode 100644 assets/gardens/victory_assets/victory_asset_plant_19.png.import create mode 100644 assets/gardens/victory_assets/victory_asset_plant_20.png create mode 100644 assets/gardens/victory_assets/victory_asset_plant_20.png.import create mode 100644 assets/gardens/victory_assets/victory_asset_snail.png create mode 100644 assets/gardens/victory_assets/victory_asset_snail.png.import diff --git a/assets/gardens/animals/caterpillar.png b/assets/gardens/animals/caterpillar.png new file mode 100644 index 0000000000000000000000000000000000000000..9623840d3585235a092a123072945b76651b399d GIT binary patch literal 5055 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 literal 0 HcmV?d00001 diff --git a/assets/gardens/gardens/garden_06.png.import b/assets/gardens/gardens/garden_06.png.import new file mode 100644 index 00000000..982f16a5 --- /dev/null +++ b/assets/gardens/gardens/garden_06.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bhamsdjj677b3" +path="res://.godot/imported/garden_06.png-943860b612f9520e74a0732cde3cbfe6.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/gardens/gardens/garden_06.png" +dest_files=["res://.godot/imported/garden_06.png-943860b612f9520e74a0732cde3cbfe6.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/gardens/victory_assets/victory_asset_bees.png b/assets/gardens/victory_assets/victory_asset_bees.png index c0222356cd85a2fd857562bbef57b0d1195b7650..005785bd6c726d4b1d589df9e5c48e1ad83f4d46 100644 GIT binary patch literal 3659 zcmV-R4z%%!P)!pr(8Q+*({`Wl={dK}D$)xkH3kMSz{SU7bcshKh20tY~h9UM%a~H!RyH zwydWVP*IMH71G&bnhDd^BN|k^?<317b?lI(5v2ht%5f1QL&q!ZoGnEj5y8}PP5Hdh z)=EC2!`H^BD91%WJ_HRLe140)1uF{BBM%a&L)R$JKt(xRB4nL!-|4a?A6j}1uWKuq zo5DSU@@hwH(Dli)P*Dz(5b=U8Id+&lBcXA&L&+iuA{-m;E51KPevX@^`9wEcr4PrfGhiiwxXN!6}?5rffPe^-}Gf+_un*iB~acb8^fC$WN!%8f# zy+ACosqY~I-{)cP`?~T~cFhENIOwuSLsXQ*Cq_EFPqkOmM?_$2(G2g&t*Z|_70TZf z?s2L-jf8-PHg1iKG$QCc1YdWB!96npbN_|Hx z(H80C_lQ_;`f8X1A30ugRVw&P-wjZ#*di9wN9K?L!?cX2Fl(+pI@dgjTFP+|(=3sXEZCpNmP{MV#V>Y#28tl^UF$9l;fglSl!StkwQudD#~#& z1uJO?Eb7eCnyM(rgWq=pTBdF(Ct#*?PZi~O@Jrr%K%#OU3h(cL4_TRQUY-W8~dt|ZR1RmI=0O=c#yxkv>5WS?w_Vk7Z4~&>3%W8sUarH>L$%ICMxU87j*0uthwqRk>GVM3^4q*v=K9M;nx) zj-GLGYIt{r%pb=fNX>e80u|-Bh_TPvI%L-9khKyO<@g8~M=(GYFN|Z(+Z!s%@sTjz zn9v=%JEWGOIC?ztb1SxVvrgsjeLr@O-y;&+`nB(dI57L509*RDl;*s}A4tg66Oy$p zp&e_mK!!@&z3V>#eeiufOptsI`5ke^3a`iP=GCciZVb1SmrIfMyx<|#`R75 z#m|(-ecmDBZ+a^75O_w~|G+TknXiaN_Zj!da43>#cKY490E=>!{5nzg=|_VSKK4L);6{V>y~*)Dta5-NkiMwDx0 zt?!2B$9Wft8h$P~v%HK~RFukqun}c(>7or!WrAcYbLG?n!J}E~3*GIm3hEwmw_Su&`5n#H+-3Q`#`X84+rchtI0 z9w76vB{C-qT4+a9TjQ7|VkMizx$4kW87#&9l;(7%choyU%!yBsr_GPa6YP4pS<)wm zy65nMJV?~ZqYRTYP4{2-sqmbp>7r0p_VUv-jnj6BORgVQ)GcdE8DUAi{q{bmX}V6+ zbX9Rped+7sucG&Ljm+tyB6OI&(q}#W}{a4{cc@mNV?R9m-6p3P|6Qr!Krgwr>3( z&rUQge$9Da z^axqIE^eT|2L3}wG1NAqR4bWtDo2pg4<7aBbT)C;-BP~}|B()S4RxaQQ7c)*MU*S_ zNQABlE$g`&7h5aXy3w)`rE-XGS#N~|T4-XfZt*Saxf~SbW1sV>^>zEEqI?BDAxFqn zZBTy6%0DrV(}r!a`DghYZevrr!zE!_&~m*_s1v1E^4=?A1=h$!*ymW7FWLK1R&PHW z-W2dF-ro<>HwV%x-Qv=(Zm3@>@o~KsIR0K|b)u}^wxrHf zSdsrN{v`j0Zcs~k3Llvd`e$AzcC24F2Mipq*ZPqcO^;WN%~RYWO9~)M7JsFA=ibkNVSDcd)qOH>ynp0azm_IP;RVRT>02o;)Sx z3+qU(0l=;+~FXDMwmzP$kNOI}m*wpOu2 z4hedX{F9SD8#6FGBu?}*G6xR|n= zr*iv@o$rVU-ysfz0QIt#5!Cz)?Ve8))z&y<|DdQQNxeH;O{f#4?EyTGVdI5A~|QTaeZHh4Yt@nhs&Zj_>1yjVQw|8!$4Wz8f$yBJ%!IH9R!g6L-kk z_nPKG{Li@gGECH!%Q8sk4`!R-fdm;AOfj9L3$IK!Dyd5%#0rK~Kh&Pd!!kdTM@Yq4 zS%UqJn;5r|nrpu{{*uJ;bM{!KQeUKLx=p(!F1c@5QMas(WrQX5;)dR;yn zxVESpq-mPi{6kLQSKNP}V&Cvf>Xh}#V)=b)cf^PF%Qm8C%e*)DenIDw=debGmBtF5 zB4IpBOE<_U;7{_k*Ryd6vx||5``p+tuMoj5Fc0-tWZwA5@lbSui1&$RCv*3WIp*W+ zzTz7D8Zj?nZkYE7p-mEGUbsQl2ot0~-I6b(xdfIEkt@V%7dQUF=ZlT{`H>eKHSZw3}>2( z5@h({BTv04r2E(*XQp_lQ|D3yOgHii#9}(nG0zdDAtHb3ePLVz-63IKACTW6M2D-F z!e<_9-yx1(**9sLcF~Xp`Nma`VFjnh+1G^exZbBof?Fhw3-39My$zAwD*HTe7_H`W zoKa%K@eYO-$YW*4$P@DWRRv50ppG787~BK@B~RN}bc)=QFR`r|_pY5P zL4F{MmsLxtT$-|osU`4l#2PM;ofi8TC&?G47YVc@KT!ZsQ7V_GYWKu7r?+n1FwT9J zr!aeU5B?@9O6AhnY-uVx`eDoXgV%S+@BfTg#?rrqic+~WTg1zFYX4-2%ptdXKaX9I zU$C4DtD{HhgQ%w5WZjPtYf=m*A0v@%MHQve2NCs=Iai27X9^h!HaKJ=P*Ey7^`vMIw(HrI}PwDnlSbI`Np2u2r!i--^`;6{Rv1o{`S{z&NeuD`N3|&di9YqEv>& zmOLfnC&uBO-H@j!joP?iS1BeHr7b+fg1YRXeCE(vc^q%9PB_dix1Sc(u;q9d>Stf$ dlKZs6{{aV=uzs;FQip63KkA_C^c>#BIab!)Zj8GuEk7f}l>rW?4+aiGWuPk25%epv;Ugi$Z5bQ<)JI>$;f-;i=@9>K%b*xJ~pA~Dw54#G2ph~LE&K%eQ8_zyl;L)<~71GRsh)MUg z6pK2Q8wx>C!UXt{^5U+LW~h#DlRDPTv{#)SSJd1=5R_trT-+)P;4A#1%8+KuL{jX3 zXIYNk}K4hg{^gd0@bnDhSF!dJcASCpBAUO!?5dDIE$9~XrjXjWgPGarz z42fIydfYDv%FWM+gZ`gN+5dt6wQ%kmBz&<%LK^QFKp^xlU00yzd;1MaYkwg`5eQ&cd z!G|(q@>Qm^Yn{>-&viC}pv){dOlN76M|$3yvk?SkW=nT>qO2KUQ>VCupd!RvXB?NB z5f}TZ{p0ggt1%hyFWR+Ku6z0h!MUCC2{JlghT)4qd7+Mx^29`f78GvQF&3ep56-i{t;y^m9K0>nICl( zoKsLShqqZ*`9S%jnn-b5fwx@2Kls{d(<#5j?hlQ)qT8{bGA=h#1C?Q@Jj)mDwT z2YQaOP!ao9V?^2WXdUk{T8t{5$+otb+-7& zpsF*IMEJ$@o*<^d@SJkeEWLSCcf8IU9rq?B%I3EyaX#Xd)xTqWVvs=W2;_A+3~Emn6^g zZC;;wW#75Bu6o?8Ql4q+bkaP}BTN0l(u1WMhsqFNX~-XlTBD!Zb*57;c! zf?-+PV~HH=?yzUdx_+CZX74izO20U2CfhOlqKb?1mvoO_=P@!=^aUZj0PalLvr;Fg z{0GW;yj2E*ddAyN$iJhF`I21Rus=NWBhqZI8LpsG>eoHvum!0y<#3RFg4+t&9y#Kq zj-b9oF4C`*ioOH>iZpp2(~rRCeX*z?X~%H=r!gXeDfO*L>RGQhZ$4MRcRVwO@tB!m z4DA>$F_u@CEYI^%e&%ti3om2sv--{IevgsoH`!FSjXc|~j{P1c3za$a_gQ7>x|yq@ zItY(Q-C~B7gPtJGbXqA>6L!QkkFmwwOjR>web(vd*q&|Z#dbe`QoN4oM>D6GQFaot zE-P{*%D;&!Wh$L|LH#7d)U$q894m2bbJ7#CY(A7tp;KhgSf78OORnJ&VGCq(*o{^` zM}(D8FS#+p-E!Pxeok_gloPDGZL$m%zv=71aFqqaYTj%tkU#63QdnEc*=Sb9YxS10 zF^AS`OBo*=vEP!sFOIi1l&j;dDzD9PI9Q3tar4oJQ+~Ab*wZB|zLUujZ_-&(`@|=d zZ*sYAjXF23utCa^v51x!a#+BI`aT)^&bS(HYm-}KY;Z$^0H`kxl^~Oc_Kgq755DQP z8fQl}aVwL*Lgx3W!<3)poo+Jq1`7!)aXXS?e=x*u@_nuDPFOCRqi+~K(aGzhA{ zr1UR+NX>y@B?zkD%n;|d57e5tHwdcVY!L_et#88%vP06B(mERlK@EdBlDhK^?M24d w$TS2I4Q>KC_X8LM?GVxYX<0Hvj+t07*qoM6N<$f-B%ctpET3 diff --git a/assets/gardens/victory_assets/victory_asset_butterfly_2.png b/assets/gardens/victory_assets/victory_asset_butterfly_2.png new file mode 100644 index 0000000000000000000000000000000000000000..4d016e5bab037912b60bb13e7ff6b2e72e9c42d2 GIT binary patch literal 4880 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 literal 0 HcmV?d00001 diff --git a/assets/gardens/victory_assets/victory_asset_butterfly_2.png.import b/assets/gardens/victory_assets/victory_asset_butterfly_2.png.import new file mode 100644 index 00000000..d74d225d --- /dev/null +++ b/assets/gardens/victory_assets/victory_asset_butterfly_2.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://db6cwc8crw6wo" +path="res://.godot/imported/victory_asset_butterfly_2.png-724be0e4156fad981c3fd18ec904c631.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/gardens/victory_assets/victory_asset_butterfly_2.png" +dest_files=["res://.godot/imported/victory_asset_butterfly_2.png-724be0e4156fad981c3fd18ec904c631.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/gardens/victory_assets/victory_asset_leaves.png b/assets/gardens/victory_assets/victory_asset_leaves.png new file mode 100644 index 0000000000000000000000000000000000000000..148513793edb9938703f57fb7a3e7c95f1596709 GIT binary patch literal 3310 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 literal 0 HcmV?d00001 diff --git a/assets/gardens/victory_assets/victory_asset_leaves.png.import b/assets/gardens/victory_assets/victory_asset_leaves.png.import new file mode 100644 index 00000000..392b1d61 --- /dev/null +++ b/assets/gardens/victory_assets/victory_asset_leaves.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bokqjqq5uaar3" +path="res://.godot/imported/victory_asset_leaves.png-95e00928f462a81afaadabdcca7254fd.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/gardens/victory_assets/victory_asset_leaves.png" +dest_files=["res://.godot/imported/victory_asset_leaves.png-95e00928f462a81afaadabdcca7254fd.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/gardens/victory_assets/victory_asset_mushroom.png b/assets/gardens/victory_assets/victory_asset_mushroom.png index 784d5712ca781e110d30b3bea572826dfe3fc5e3..0dd78fa504b879a521761ec91bdeadf00a0ff0d5 100644 GIT binary patch literal 2709 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 Kh%yVWr2hazk>t?; literal 0 HcmV?d00001 diff --git a/assets/gardens/victory_assets/victory_asset_plant_19.png.import b/assets/gardens/victory_assets/victory_asset_plant_19.png.import new file mode 100644 index 00000000..262fd8d5 --- /dev/null +++ b/assets/gardens/victory_assets/victory_asset_plant_19.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://ctc6i4o6rtj2m" +path="res://.godot/imported/victory_asset_plant_19.png-dd0fe0b3b37a8dba586e903bd433af5f.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/gardens/victory_assets/victory_asset_plant_19.png" +dest_files=["res://.godot/imported/victory_asset_plant_19.png-dd0fe0b3b37a8dba586e903bd433af5f.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/gardens/victory_assets/victory_asset_plant_20.png b/assets/gardens/victory_assets/victory_asset_plant_20.png new file mode 100644 index 0000000000000000000000000000000000000000..dcd9cd034a985266b812de7b7ff06d43832e8ac2 GIT binary patch literal 2906 zcma)8XE+;-7N(_2mBii}F{@TpE9OOF6p5h2NY$SN{di!sToRYcL=I6 zW3)a}qDJizT)p?#{da$y@x1TzocDds`ExL4aD&S%0xWcNbeD|`q2^~b@GNRCUO3B2 zAW+*`VfHb!@~5M_#PK)iM`ogEXAP?nRL3#|yIO<@BCB#F684D?T4P3~k`5V&*ehTB z?%KnL2budKV}szso6J*?PD3d^H|?#$DWbU=y(_ZI@a}dZ9Sg(7f5H(%>0pj4(a=&e zy5#k#CJDW2+0*gg+LN2j6Wkk4=LP^ksgL0)j=>*U?h8e}|1m>nL*)Z*(yIf}b>}G` zInSd%>v068UOb>nJ(st`s&U=SH&Kkr>ZY@&nRi6)nD!c44D;n}J9mo@Ecpkq&3GJ_ zKkY#~zwA-@#hFQB@tK;wH_n9+I*`8R5|NmH9QvXamtBps_z{0XT$Srkq_el+3QSd% zE-eDx%jUh=s5P2zE2={PvkmIM)OFo|(sMLHvZe~{|MsN?_gGwD)~796l^Flt{e>8j zg;$jiZg6rvc;0*AepvB32bkk#XH}AWf_w+bfPjdx;~EUbWC+#hn!j?063tR7y&(81 z7tXxy=><^6a>+DUa-Mvj7jY|mNXzw8QQy_AF>_`bg+_B2mR_)PXt4s8O@h z29l<{?eazaoa;K1#vRSa?9*~~}b-jJ(!5qK>;U3f%SYGP|w3gQ=I-l0=Zss&-THU-S`c;$$na!7JwkON6Dg_Pgt@L&HOSo zTZ8`8%f=`d{V`-RgXPz`02}u-jYz^jL3JwgW~`vFm-y{~xcl`N%9Y;g8;{Pqv_QqQ zRF*^gjGa7>l^*g7z8W1wA%1|}VJ&qOw#h4vGtt#_&H=q99}$^h+dD5H8NMj!n7X2i${~lbYni2nz-^Viq$=9mh}lzgT-11z7bDFAPghTnux!N&-3L1&RzvoNf|uS^ zS%Dp^#FheQ!7aTRxnV^VPNJ36j{NxY?;}>c);Gu(TJ#R%S%h`G?m=q4iCQ3P(Mp1} zdyi5x?HA8SsW0;ew+xZrKn5lrT|5*%sLk_dM`U|@`IJXY~SyiXYZF(rz?|109RK6CB+mD_0{-qP zcqxHNXMMxdR$c6{ztN5HBLV_ay^gmkEbJzOSrrVwDhdV)(uBDjFk=DL9|L9axWjHUZemaGzv)GWTNkON+Zd z2iC5UQBW_Tbfp^Kb%V=@ZK-PhCj4~+kuG$4KibFVA_|I96*|wfX7+G3SMzoGep+~DQuNFuIhe$4A-d&EwTC}$9 zRyA3`Tt29Dqs;2v2|*gOxsx5X_ttnG2`T9R@@C0*@GRU@CZtUlZY8BVx>mm^y zLjdhA*8>dRo71r6CTIPEc>co_M4z%nr@~OM70DaGUZlBoc$urCCAn4Ypnd-E#^Qy7s^yt&-RT=a+-> zm%t@L#0HQlAa>WW^k7qT8qAX%61m{qijJ0!iS`sC%PP}g=f%~TBl3DQ>$E&Ej<|8N!%1RvtcVo|yZdhrhmi{nQ^N&JTb z5}a>WrZyX9U$s<(5IPmZo!SZ=yKR+>o3YAnnN;CIw$*{* zt)fzA0FLkRUjV(u7$0{hGJ8cp;W6j!y z%&wr}4}nNiwx3eh0p9_-B<5v?4~SnHr{`(B`?ti(fPN;Yuh)1>;X-0BPLm=lh|Qnc z%%tSg%@eqg%CG+Cw8=Prb0{%W%>DnMKx5LTEgc&*`U-ltztDuO7J@J^T&&}7@e=yz zUDP9nSh;I$FxD;g{252R^6e`7iJog3V=J%yD=}6fZdGSGm-R@IkUD7lcEV5FBr5B( zXN90TC^7Q>mLw5m*5Xgkk6BxT}_n;hd1hE0T!esm#YBN-z+^`Dy@21vb{9w_nx=^`Y(Gn zJArHKb;?Rg*d2@vRm@?s)UfOD>0b-5)s@J~$gH?6UK^6QcdS@1ji(E6))srhcFMke=U r%m&thpEZ8sGh=c1;hwjTe@3fx)zvh#&xW2o%XCICIP|UV!`OcV{l$Va literal 0 HcmV?d00001 diff --git a/assets/gardens/victory_assets/victory_asset_plant_20.png.import b/assets/gardens/victory_assets/victory_asset_plant_20.png.import new file mode 100644 index 00000000..23033082 --- /dev/null +++ b/assets/gardens/victory_assets/victory_asset_plant_20.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://d1jhhus8v37ik" +path="res://.godot/imported/victory_asset_plant_20.png-c7efc1e34db98d0ee13b14addd7fd702.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/gardens/victory_assets/victory_asset_plant_20.png" +dest_files=["res://.godot/imported/victory_asset_plant_20.png-c7efc1e34db98d0ee13b14addd7fd702.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/gardens/victory_assets/victory_asset_snail.png b/assets/gardens/victory_assets/victory_asset_snail.png new file mode 100644 index 0000000000000000000000000000000000000000..fac8d7983fa1cda919f9b2618714fb8a3894c1f9 GIT binary patch literal 3545 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 Date: Tue, 26 May 2026 12:05:02 +0200 Subject: [PATCH 072/111] Frog garden (07) --- assets/gardens/animals/frog.png | Bin 0 -> 6640 bytes assets/gardens/animals/frog.png.import | 40 +++++ assets/gardens/gardens/garden_07.png | Bin 0 -> 14896 bytes assets/gardens/gardens/garden_07.png.import | 40 +++++ ...fly.png => victory_asset_butterfly_01.png} | Bin ... => victory_asset_butterfly_01.png.import} | 6 +- ...y_2.png => victory_asset_butterfly_02.png} | Bin ... => victory_asset_butterfly_02.png.import} | 6 +- ....png => victory_asset_dragon_flies_01.png} | Bin ... victory_asset_dragon_flies_01.png.import} | 6 +- .../victory_asset_dragon_flies_02.png | Bin 0 -> 3675 bytes .../victory_asset_dragon_flies_02.png.import | 40 +++++ .../victory_assets/victory_asset_fish_01.png | Bin 3138 -> 3399 bytes .../victory_assets/victory_asset_flies.png | Bin 0 -> 1494 bytes .../victory_asset_flies.png.import | 40 +++++ .../victory_assets/victory_asset_frog.png | Bin 0 -> 2233 bytes .../victory_asset_frog.png.import | 40 +++++ .../victory_assets/victory_asset_hearts.png | Bin 0 -> 1489 bytes .../victory_asset_hearts.png.import | 40 +++++ .../victory_assets/victory_asset_plant_07.png | Bin 3001 -> 4703 bytes .../victory_assets/victory_asset_plant_21.png | Bin 0 -> 2565 bytes .../victory_asset_plant_21.png.import | 40 +++++ .../victory_assets/victory_asset_plant_22.png | Bin 0 -> 3232 bytes .../victory_asset_plant_22.png.import | 40 +++++ resources/gardens/garden_01.tscn | 5 +- resources/gardens/garden_02.tscn | 13 +- resources/gardens/garden_03.tscn | 3 +- resources/gardens/garden_04.tscn | 1 + resources/gardens/garden_05.tscn | 3 +- resources/gardens/garden_06.tscn | 11 +- resources/gardens/garden_07.tscn | 144 +++++++++++++++--- 31 files changed, 472 insertions(+), 46 deletions(-) create mode 100644 assets/gardens/animals/frog.png create mode 100644 assets/gardens/animals/frog.png.import create mode 100644 assets/gardens/gardens/garden_07.png create mode 100644 assets/gardens/gardens/garden_07.png.import rename assets/gardens/victory_assets/{victory_asset_butterfly.png => victory_asset_butterfly_01.png} (100%) rename assets/gardens/victory_assets/{victory_asset_butterfly.png.import => victory_asset_butterfly_01.png.import} (78%) rename assets/gardens/victory_assets/{victory_asset_butterfly_2.png => victory_asset_butterfly_02.png} (100%) rename assets/gardens/victory_assets/{victory_asset_butterfly_2.png.import => victory_asset_butterfly_02.png.import} (78%) rename assets/gardens/victory_assets/{victory_asset_dragon_fly.png => victory_asset_dragon_flies_01.png} (100%) rename assets/gardens/victory_assets/{victory_asset_dragon_fly.png.import => victory_asset_dragon_flies_01.png.import} (77%) create mode 100644 assets/gardens/victory_assets/victory_asset_dragon_flies_02.png create mode 100644 assets/gardens/victory_assets/victory_asset_dragon_flies_02.png.import create mode 100644 assets/gardens/victory_assets/victory_asset_flies.png create mode 100644 assets/gardens/victory_assets/victory_asset_flies.png.import create mode 100644 assets/gardens/victory_assets/victory_asset_frog.png create mode 100644 assets/gardens/victory_assets/victory_asset_frog.png.import create mode 100644 assets/gardens/victory_assets/victory_asset_hearts.png create mode 100644 assets/gardens/victory_assets/victory_asset_hearts.png.import create mode 100644 assets/gardens/victory_assets/victory_asset_plant_21.png create mode 100644 assets/gardens/victory_assets/victory_asset_plant_21.png.import create mode 100644 assets/gardens/victory_assets/victory_asset_plant_22.png create mode 100644 assets/gardens/victory_assets/victory_asset_plant_22.png.import diff --git a/assets/gardens/animals/frog.png b/assets/gardens/animals/frog.png new file mode 100644 index 0000000000000000000000000000000000000000..3c27309416ddd7729a999bbdddacc94b6bc89323 GIT binary patch literal 6640 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 literal 0 HcmV?d00001 diff --git a/assets/gardens/gardens/garden_07.png.import b/assets/gardens/gardens/garden_07.png.import new file mode 100644 index 00000000..8523e609 --- /dev/null +++ b/assets/gardens/gardens/garden_07.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://clcff3fg5jd2k" +path="res://.godot/imported/garden_07.png-552b63ddceeb7d6136f933619623d519.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/gardens/gardens/garden_07.png" +dest_files=["res://.godot/imported/garden_07.png-552b63ddceeb7d6136f933619623d519.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/gardens/victory_assets/victory_asset_butterfly.png b/assets/gardens/victory_assets/victory_asset_butterfly_01.png similarity index 100% rename from assets/gardens/victory_assets/victory_asset_butterfly.png rename to assets/gardens/victory_assets/victory_asset_butterfly_01.png diff --git a/assets/gardens/victory_assets/victory_asset_butterfly.png.import b/assets/gardens/victory_assets/victory_asset_butterfly_01.png.import similarity index 78% rename from assets/gardens/victory_assets/victory_asset_butterfly.png.import rename to assets/gardens/victory_assets/victory_asset_butterfly_01.png.import index b0344641..64429c39 100644 --- a/assets/gardens/victory_assets/victory_asset_butterfly.png.import +++ b/assets/gardens/victory_assets/victory_asset_butterfly_01.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://its5dfr0ipak" -path="res://.godot/imported/victory_asset_butterfly.png-a87e26e51c4bff22c7ac3a71e5d65e98.ctex" +path="res://.godot/imported/victory_asset_butterfly_01.png-7a4e0e5887a2eebe8906426e3e1ed1ba.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://assets/gardens/victory_assets/victory_asset_butterfly.png" -dest_files=["res://.godot/imported/victory_asset_butterfly.png-a87e26e51c4bff22c7ac3a71e5d65e98.ctex"] +source_file="res://assets/gardens/victory_assets/victory_asset_butterfly_01.png" +dest_files=["res://.godot/imported/victory_asset_butterfly_01.png-7a4e0e5887a2eebe8906426e3e1ed1ba.ctex"] [params] diff --git a/assets/gardens/victory_assets/victory_asset_butterfly_2.png b/assets/gardens/victory_assets/victory_asset_butterfly_02.png similarity index 100% rename from assets/gardens/victory_assets/victory_asset_butterfly_2.png rename to assets/gardens/victory_assets/victory_asset_butterfly_02.png diff --git a/assets/gardens/victory_assets/victory_asset_butterfly_2.png.import b/assets/gardens/victory_assets/victory_asset_butterfly_02.png.import similarity index 78% rename from assets/gardens/victory_assets/victory_asset_butterfly_2.png.import rename to assets/gardens/victory_assets/victory_asset_butterfly_02.png.import index d74d225d..6d570f12 100644 --- a/assets/gardens/victory_assets/victory_asset_butterfly_2.png.import +++ b/assets/gardens/victory_assets/victory_asset_butterfly_02.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://db6cwc8crw6wo" -path="res://.godot/imported/victory_asset_butterfly_2.png-724be0e4156fad981c3fd18ec904c631.ctex" +path="res://.godot/imported/victory_asset_butterfly_02.png-ed95a0eecd9f0f5244861b57d354ca85.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://assets/gardens/victory_assets/victory_asset_butterfly_2.png" -dest_files=["res://.godot/imported/victory_asset_butterfly_2.png-724be0e4156fad981c3fd18ec904c631.ctex"] +source_file="res://assets/gardens/victory_assets/victory_asset_butterfly_02.png" +dest_files=["res://.godot/imported/victory_asset_butterfly_02.png-ed95a0eecd9f0f5244861b57d354ca85.ctex"] [params] diff --git a/assets/gardens/victory_assets/victory_asset_dragon_fly.png b/assets/gardens/victory_assets/victory_asset_dragon_flies_01.png similarity index 100% rename from assets/gardens/victory_assets/victory_asset_dragon_fly.png rename to assets/gardens/victory_assets/victory_asset_dragon_flies_01.png diff --git a/assets/gardens/victory_assets/victory_asset_dragon_fly.png.import b/assets/gardens/victory_assets/victory_asset_dragon_flies_01.png.import similarity index 77% rename from assets/gardens/victory_assets/victory_asset_dragon_fly.png.import rename to assets/gardens/victory_assets/victory_asset_dragon_flies_01.png.import index bfa1cec2..5429dd42 100644 --- a/assets/gardens/victory_assets/victory_asset_dragon_fly.png.import +++ b/assets/gardens/victory_assets/victory_asset_dragon_flies_01.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://bv510d5r4dn82" -path="res://.godot/imported/victory_asset_dragon_fly.png-e8b19f1b238dd7e64214f9f295f1484b.ctex" +path="res://.godot/imported/victory_asset_dragon_flies_01.png-5858ef66117e89feb4417da84d8707d1.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://assets/gardens/victory_assets/victory_asset_dragon_fly.png" -dest_files=["res://.godot/imported/victory_asset_dragon_fly.png-e8b19f1b238dd7e64214f9f295f1484b.ctex"] +source_file="res://assets/gardens/victory_assets/victory_asset_dragon_flies_01.png" +dest_files=["res://.godot/imported/victory_asset_dragon_flies_01.png-5858ef66117e89feb4417da84d8707d1.ctex"] [params] diff --git a/assets/gardens/victory_assets/victory_asset_dragon_flies_02.png b/assets/gardens/victory_assets/victory_asset_dragon_flies_02.png new file mode 100644 index 0000000000000000000000000000000000000000..7ab326372506d89407b0f8072bfb2fd873b42f9a GIT binary patch literal 3675 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 diff --git a/assets/gardens/victory_assets/victory_asset_flies.png b/assets/gardens/victory_assets/victory_asset_flies.png new file mode 100644 index 0000000000000000000000000000000000000000..0fd724d68d1a886eccea31431c57b737532b49d7 GIT binary patch literal 1494 zcmV;{1u6Q8P)1I8s5N1E+$B z3eK+J8Ym97ZjZ!!ZN4ha(R( z7BxPE9zdilfEDmt&HEeR7I;(|k1AI+uTPLKodeH+L++A03Q>%a>7k7v$~++A*!mchA~R%4JokGS?2(&l+wnY6Q1}#Gf0)m} zf5;p=6o2Cu_=oO-;BbzGhx0_i$T>GdejH!yfhA&+V`PHd1fM*g_X)8UgXaqW3jc_B z?~jOij)?^_F5iNnr*j73ivIq%PlyG|kh?P^W5hcA#Lsk5M-rA|BhAcDC=MB`o^kB9e`y!|K4>Cc&LB2&IzZ;YIC84}A6#S_Q(6bIRl)mvd^`a=q5v%bHxl=BYHOFl3i=b}$c#9&q^jB}A ziHjY_=;%f9o~0=BjD(i|K+I{%Y&d3iUmR^L#cSrs8eL;cT8oQuCY$IYih>nlK|)0o zeer|{eH(Zj!D%yn)UiUG(IJP**CdpU-4!2}qRfo*b~;0m!gDL$@nI>-}(2$M+r7D=Sw_l<_7fH*w-*c{$y(Go?bbe$%$&;u9>TGI!F zokEgI!S5R_O95dMTths=I#@I<1&D8<9RfEi(GpEd0kY4aox!!h1knm@QEZWIb}fEz z;kgm#pgnyQERX^seX=2;I#ilyTZ)1V*-7mS6GR6>i2_6zU-0W=>=CgoJf8F72q_9U zK0@%r!?}w5h|I&eE}Bq2#am1eCv?u~$-sNWkxaIDdI(|?MVTp*hcTsES??JUKu#Qc zD#;P6D2#xF_9=`AF;N&5OcX{16NOR1L}64gQ5Y3W6h;LTg;BvoVN@_t7!^zuMgLYHh5sOjo{ygTG*bFZdnW1~H7IQR}@X^uniRP(b zkBDKx`6aQ<(NrcU?n=bJmZauW=rJeWx?4r(qerkXwwWL=F*uN9eBUNXV|2MHh&EB^IDW&i*H07*qoM6N<$f}qi~O#lD@ literal 0 HcmV?d00001 diff --git a/assets/gardens/victory_assets/victory_asset_flies.png.import b/assets/gardens/victory_assets/victory_asset_flies.png.import new file mode 100644 index 00000000..d2d2f4b3 --- /dev/null +++ b/assets/gardens/victory_assets/victory_asset_flies.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bf77plws02i6k" +path="res://.godot/imported/victory_asset_flies.png-ce7e1e93fc88b385023434b2f574979b.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/gardens/victory_assets/victory_asset_flies.png" +dest_files=["res://.godot/imported/victory_asset_flies.png-ce7e1e93fc88b385023434b2f574979b.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/gardens/victory_assets/victory_asset_frog.png b/assets/gardens/victory_assets/victory_asset_frog.png new file mode 100644 index 0000000000000000000000000000000000000000..de34c95ff0d90bb515a5913c7bbc2cd671ca0cb7 GIT binary patch literal 2233 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 WVFlAUVD#Qz$AhqPu&g=j9s37cRo;*Q literal 0 HcmV?d00001 diff --git a/assets/gardens/victory_assets/victory_asset_plant_21.png.import b/assets/gardens/victory_assets/victory_asset_plant_21.png.import new file mode 100644 index 00000000..934f7c87 --- /dev/null +++ b/assets/gardens/victory_assets/victory_asset_plant_21.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://n4pv6f7bbtiy" +path="res://.godot/imported/victory_asset_plant_21.png-0f25f8f686068370618987ed14e7165c.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/gardens/victory_assets/victory_asset_plant_21.png" +dest_files=["res://.godot/imported/victory_asset_plant_21.png-0f25f8f686068370618987ed14e7165c.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/gardens/victory_assets/victory_asset_plant_22.png b/assets/gardens/victory_assets/victory_asset_plant_22.png new file mode 100644 index 0000000000000000000000000000000000000000..f00bf2491bb3f8cabfb84b287584b756d4b176ce GIT binary patch literal 3232 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 SB3U>90000 Date: Tue, 26 May 2026 14:11:52 +0200 Subject: [PATCH 073/111] Monkey garden (08) --- assets/gardens/animals/monkey.png | Bin 0 -> 6353 bytes assets/gardens/animals/monkey.png.import | 40 ++++ assets/gardens/gardens/garden_08.png | Bin 0 -> 12993 bytes assets/gardens/gardens/garden_08.png.import | 40 ++++ .../victory_assets/victory_asset_coconut.png | Bin 3068 -> 1601 bytes .../victory_asset_coconut.png.import | 2 +- .../victory_assets/victory_asset_crown.png | Bin 0 -> 1272 bytes .../victory_asset_crown.png.import | 40 ++++ .../victory_assets/victory_asset_monkey.png | Bin 0 -> 12588 bytes .../victory_asset_monkey.png.import | 40 ++++ .../victory_assets/victory_asset_plant_23.png | Bin 0 -> 2007 bytes .../victory_asset_plant_23.png.import | 40 ++++ .../victory_assets/victory_asset_plant_24.png | Bin 0 -> 5053 bytes .../victory_asset_plant_24.png.import | 40 ++++ .../victory_assets/victory_asset_plant_25.png | Bin 0 -> 2893 bytes .../victory_asset_plant_25.png.import | 40 ++++ .../victory_assets/victory_asset_torch.png | Bin 0 -> 1595 bytes .../victory_asset_torch.png.import | 40 ++++ .../victory_asset_tumbleweeds.png | Bin 0 -> 3068 bytes .../victory_asset_tumbleweeds.png.import | 40 ++++ resources/gardens/garden_05.tscn | 2 +- resources/gardens/garden_08.tscn | 178 ++++++++++++++---- 22 files changed, 500 insertions(+), 42 deletions(-) create mode 100644 assets/gardens/animals/monkey.png create mode 100644 assets/gardens/animals/monkey.png.import create mode 100644 assets/gardens/gardens/garden_08.png create mode 100644 assets/gardens/gardens/garden_08.png.import create mode 100644 assets/gardens/victory_assets/victory_asset_crown.png create mode 100644 assets/gardens/victory_assets/victory_asset_crown.png.import create mode 100644 assets/gardens/victory_assets/victory_asset_monkey.png create mode 100644 assets/gardens/victory_assets/victory_asset_monkey.png.import create mode 100644 assets/gardens/victory_assets/victory_asset_plant_23.png create mode 100644 assets/gardens/victory_assets/victory_asset_plant_23.png.import create mode 100644 assets/gardens/victory_assets/victory_asset_plant_24.png create mode 100644 assets/gardens/victory_assets/victory_asset_plant_24.png.import create mode 100644 assets/gardens/victory_assets/victory_asset_plant_25.png create mode 100644 assets/gardens/victory_assets/victory_asset_plant_25.png.import create mode 100644 assets/gardens/victory_assets/victory_asset_torch.png create mode 100644 assets/gardens/victory_assets/victory_asset_torch.png.import create mode 100644 assets/gardens/victory_assets/victory_asset_tumbleweeds.png create mode 100644 assets/gardens/victory_assets/victory_asset_tumbleweeds.png.import diff --git a/assets/gardens/animals/monkey.png b/assets/gardens/animals/monkey.png new file mode 100644 index 0000000000000000000000000000000000000000..1a129af54efbf1109f061f9d2926d0a5b92c81c4 GIT binary patch literal 6353 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 Ns3~bFR?1t2{||acMA!fT literal 0 HcmV?d00001 diff --git a/assets/gardens/animals/monkey.png.import b/assets/gardens/animals/monkey.png.import new file mode 100644 index 00000000..703e3d6b --- /dev/null +++ b/assets/gardens/animals/monkey.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://kygm5ieixgne" +path="res://.godot/imported/monkey.png-723d94951cc580ff3e0ae5233294daa2.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/gardens/animals/monkey.png" +dest_files=["res://.godot/imported/monkey.png-723d94951cc580ff3e0ae5233294daa2.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/gardens/gardens/garden_08.png b/assets/gardens/gardens/garden_08.png new file mode 100644 index 0000000000000000000000000000000000000000..67ff5e34b52c430076bb20d5b435128d41aa8e8b GIT binary patch literal 12993 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 literal 3068 zcmV=RgXf}u_@s-;(EoxrN4SElxkuyg`=k<0-Ef-mtQm1_P7MwKWKgzzJQL}mi`V2t4o zumBQZRsJ6Vd!PU^Aiqkfdf>wy5U~bQ;GrSS79r|p@rP>{U?4K!bBA=rw8a>Xk2Ak7 zLb{GIkkXBW1F#wCos(fMA{Izx{0G>LkY5CR>yYk*j2p)h-Z?4eAYy?GmS4-ye*u;Q z^IUgGa{yvw(7t)hF-By-lXq`Lw+dQ%R|GtEeD4tlCEqPahhkyftrkhZcY4u~?*l=rBZS|W1VTW44393bzQUNt5k zI!9U2-rcEoH@S&qDk5S;I~k%Coyt74yNZ$4-IrMH|8uHD#z;js84pionlWr-wU~m4 zHSqTV&uhg&_pzccp0P9R0+HUfInB>>vvFMpW6YRWW-N}T9!22ZvAo~(+!WXuV^&7W zzc9w64Q1GuX~wR%QHWRu3Z9qu_ulf{c+gyCigOaaBWmG2kkAF%=$2R&H%1!m5?e27yxibVHhYNAA|RT3V@zbu2eib5yRLhN zjwi-+S4wuq>DKy4gzs%Tm8@^DHk>brB#dSLeoOdL{{02`H}Izp&)9Cwbd!cO!06hX zYeyRso>RORs1_Bft0v^8qt>*ndD!iKRAUP1-0um6v6|z5dpwtPiEGNd&nKii(&)KY zWKh~Lo~8Az;t{E@6%wlS55#uXgcGo68zVvnyzk|Up2|$r*8gkYQr|ItLdMEpfxiNO zq#7cmX8jB(nut*Uu&b)7^IfC%ek?Qd)4g|S1KnT);~LS_HHA#V8J2`+gp@Rp?!Dsy zsjD^8pwqSo>Lj908VW>JJs~Vdz`rgm?0di`q&r$;0~3O%lZcQs?6LEOw9NG8!`-ip z3|mKyPNh1DC^+}$p2~Yqh-5^J8@F`N*m55J8I+2UM1-8`N33d^dVhaMGd?3Ry$>`< zMMxrcRD*#v4oIaTLKdC;j(*VktH76t1>uNn9WT=I?{rRdnIOKiXqvI+4JU+vsLbCV$ab7J zj(b2ai3pACSyM(AK%=g+mUMf>WN#uan{&FM1-*GkfsZU+NMHb_C5}X&*T%L4u2@GKO-92mfMi5 z`0SIhE>Vrd+ts-9xWsqppfKJ1<4srGkbho&-!&p7HP`j8XKtBXiBOFx)aumHF$DR* z=j(7n)Z4hnJC4ZUA7O*X=0@ax2pRoC6|O5fhoDQh(id(>&m}mP&u>R6Paj0?hY%5U z6@CjuxQ#?f7$e_=X(b~xCY@Qh`|M6L`;ylH+%lw$D`m-udHHBn*Siu?3@ZmP&W2g8 zEo^M>V1dk`ra;k_AVkCzeK`!5s02H|nQA^UMq>#fYD*9zA|ytw8Fj!ABK$~*DTs&| zw!1+SinatU5jvnmQZu|EQLBzCP$5yyR zG>z<0%lBRJjecEJOxRyBmQO^nW7;4&w~+_UD+F8Bbzzx{m%U@Bz}W;+cezX% zwx3>KJRsfFH?Kghk%KGJW%o5}>B$Sz2K>tyVyPLfaF_l-us zQ25G}M7aAj^+ATXMsF24Rf%x#70^t?Bh~rDl=^lt;MtVxdD_~rqq>)1fz{Z4lZd<_ zlee@=^r|L`8oUr5AKY;;2O%PxzC5#F&vjg$O~|O4V{{j2aHRMnA}0P1c&p)!>9q^s zVMmpS%(?fQIbX+!HRt2On)zE-*F9OAP%xdBtuMCJZ)sX_a48WQ&G3q-gFA$bxdXAr zuxH&$G~kA+kK>v1(AGk~@Xg?EnEa9XSB)kk>{xnHye52VaH zUL;IEX`BNo)kf?N($JF#nAe5)!0ipVeW9nt_+vwgRk62trkpNByo4@jkC%umLxK(!&?O0D}G=Gb~_v>IG;Xl#LZPmQtt^Bwk3Xv;LmeP<#@0@O z6GFfq>wHRRKF96{ItJwp?V4O@H|1MupUV5+x!sVLHav5_&uxM9{~Ma4$-8?T>!#cT zuex~JO*!qKI)-*E337zXC zH4(0K)Kzq0>;Zg{vFjM-vZn5gZT&t0sSyHP$=3V&+v<0&5<9O*QALNf;8%5fz?v>*h)A$pZ8AM7)yX!Nb~YLy{C97%Nr`onyU4=?ZER2 zu0@0*Mt+FfqO?NXC^)Xjg{3X>cscBvk@)NkIGg2O~U1ZVlyo(gOX#S#ARkuP!A4J|2Gdyng z6=}sg=GlRvg11P7kG>Y*7wmYEb3UG24fjBV3wQ8#;SSU{iT?xj@VPC;%3G5F0000< KMNUMnLSTY=$LUl6 diff --git a/assets/gardens/victory_assets/victory_asset_coconut.png.import b/assets/gardens/victory_assets/victory_asset_coconut.png.import index 67f8451e..766f05f6 100644 --- a/assets/gardens/victory_assets/victory_asset_coconut.png.import +++ b/assets/gardens/victory_assets/victory_asset_coconut.png.import @@ -2,7 +2,7 @@ importer="texture" type="CompressedTexture2D" -uid="uid://c784fmd7v5wkt" +uid="uid://d3i313p52n6h8" path="res://.godot/imported/victory_asset_coconut.png-931b3a5a5bc8f484fbb35bf25285930f.ctex" metadata={ "vram_texture": false diff --git a/assets/gardens/victory_assets/victory_asset_crown.png b/assets/gardens/victory_assets/victory_asset_crown.png new file mode 100644 index 0000000000000000000000000000000000000000..c963a5ab67851b64cfd455fcf40548a5c2baa0ad GIT binary patch literal 1272 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 b%`Ua7mM0@11N`NIh)7*UTe(WnBJ}?Osde^$ literal 0 HcmV?d00001 diff --git a/assets/gardens/victory_assets/victory_asset_monkey.png.import b/assets/gardens/victory_assets/victory_asset_monkey.png.import new file mode 100644 index 00000000..23613d24 --- /dev/null +++ b/assets/gardens/victory_assets/victory_asset_monkey.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dlxljmb4wnx2o" +path="res://.godot/imported/victory_asset_monkey.png-b0d3931ac5452f3ae9049211f1be3938.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/gardens/victory_assets/victory_asset_monkey.png" +dest_files=["res://.godot/imported/victory_asset_monkey.png-b0d3931ac5452f3ae9049211f1be3938.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/gardens/victory_assets/victory_asset_plant_23.png b/assets/gardens/victory_assets/victory_asset_plant_23.png new file mode 100644 index 0000000000000000000000000000000000000000..823650f8e1b0eed5c4868f7b27df491c2b1e40a8 GIT binary patch literal 2007 zcmV;|2PpW7P)-c<<<=CFN_r&v? zbI(2ZkB?TX6^7x$JK6>q`-6$aaK^-9IAdZloH4N&&X`yXXG|=HGbR?p854`)jESY0 z6Kw-x!^F}|227Q0h>9Z{8>%G*-V}d-3M|wti3sy7^<)iyA2cSG`%Hn+#_PwxnT{!O zVa?E8PLL+&xbprDkPK~1Y?x=c%Q^Rj0^(_&4{S?xm}gm&0B^T^zATQp9m1FxG0(DQ zy5sX>4&1w#XAu&%dzF$U2b`=k&my>bjALLD(2l4vu?UM6$4&#;5IrUq$)U6fT1QBR z_u$YF%LH-zv9$eDq|3Z)agL_#2})UI4Y4G^E5!9r(f#7bz$p@o)a6&2m@&NFDUc(9 z_|t*w26V(SE1r*m7wC#+(&3yN1nYy-C1&QV(VL7WEl&v%J`G+_mR=ozM`=!tuDrgpCb+TxefnIRRcHH_2$nv1(|g z``cFfA%5eSG4O|{vV6o26X3@d$6uq6>xr=$s-sMtrJl<3RSxv?F6T(jq-_~_k2*V} zC6=~r?i2||-{2?Ro_Z*wPgy5O6ZaCLO_&lRsZ>NbI#Sw2U zu`H0LU)!g_ql7u)L2@HgxU*55WzI%VM5NC zNs8wQeuCLL@<8P}p`Gr(3RLch`aDc%v5W~P6gY6P%ir2 zMO!SP|M{m3w~Fuw{APx$T%){nR$D9!{3pn&ydtbeDfuLD`Kn$8^u+?hENdtO-dL8O zbRp9=AO^7vamS31Udj+2CInYRuzN!cVp$NbSG37K@7|=|1VJ2P0lDi#$1eNoRW6C3 z34(aUQcjr+DVSs6-GJqX;F5@TZHPrIAi-ybq_jivPr$N$bBW@hVI47T=F_zKpHKb< zJ_=aAZ_KkaaLfISt8ey6C=l6RFfoY*+HZaFkhvtXoxNid%MjjWUzlneP^BqmNsH%% zyAyj(Sa(4)r2k(Xd&!IE8Ql^|L&Pqz(zo3OrSY4Lj7b+{^yX*2J6Uf7WX z+0kmXN~zy3B_#90fbvoI#Vm+;k$6B}Qr`rXq9`9jdfquOE}Nk#ySI4=ZA^x^$wl#A z%J3rArurKJrPtr(y+iW|m~F-^GyE*g=u0V_3~66g_D@sdOT^1gibo7_+jkV5j!m&7 zh+twc5Txz?8u*oXYzoN*A{0#zU*%4qz1ekM5ZB1;F(QDr(4al zSo0r(U6T-%5WkEj{M z+%}My5tm?$VR%Nv{F!ZHDW?papuAbH5u9?RW5$+=RxVQ%#z>&kci&hePHw0lwz-GP zK;nY-!vMzqFv4+?m5W%0nDS`o(HNstah;-Yi+Gp5TYDLC;VcwrKY@8tJX_t8THV-ZTICEGd{p^`3ZpeIY5#kW zcj!9@x9lk$!eHONa)YGrr+o|Zxo#-o?(|H{&FC;ka$~dNk>hDmeW*odQ$#p6OfW1< zL>%V?*o7+8QjjcAxyEivZ{nTM%U4rGIEOg#dT1^YkG=?1LFh$hITFh}BkY3rL*^O@ zU?&7#!8p{4#0(RSZ?2FD-YEm^wxG3(!Wl9oZUJyRmdJF1DGKYLwYS_z5YbGqZuU0j zNDt>VihIjxi)E9ujfV+mJt-+8l1+VL5(}&sbAJJRR{88>;H$wc3d?_p7(S@H{~Pc- zk%*)u7O|Wm?Qje$B4Z$SLP^h&#Jxi(?q%c zec}}5<;B`!NtNs0HxAmf*qG5Cp)D4hW!H{_{=K1Gx&D3Qpnu8i99z8R$_2`~7HzSV zTVk1DwsXO7Ki}7gcAjOE3F|F74Pl0j4H^50b~9w`5hfPH854`)jETi?#>8ScV`4F! pF|ioVm{<&FOe}^oCKkh){{hT@p_Sh;KM()_002ovPDHLkV1lj3!Y=>- literal 0 HcmV?d00001 diff --git a/assets/gardens/victory_assets/victory_asset_plant_23.png.import b/assets/gardens/victory_assets/victory_asset_plant_23.png.import new file mode 100644 index 00000000..4e1f926b --- /dev/null +++ b/assets/gardens/victory_assets/victory_asset_plant_23.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://8kmojsnwp657" +path="res://.godot/imported/victory_asset_plant_23.png-8d59d618d65212c4f9d08923e91f3338.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/gardens/victory_assets/victory_asset_plant_23.png" +dest_files=["res://.godot/imported/victory_asset_plant_23.png-8d59d618d65212c4f9d08923e91f3338.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/gardens/victory_assets/victory_asset_plant_24.png b/assets/gardens/victory_assets/victory_asset_plant_24.png new file mode 100644 index 0000000000000000000000000000000000000000..94db5957b3d22f8d5c959305a2bd50935afb35d3 GIT binary patch literal 5053 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 SC;C2);flGfS)GY@@_zu<7I^6Z literal 0 HcmV?d00001 diff --git a/assets/gardens/victory_assets/victory_asset_plant_24.png.import b/assets/gardens/victory_assets/victory_asset_plant_24.png.import new file mode 100644 index 00000000..1453ee0d --- /dev/null +++ b/assets/gardens/victory_assets/victory_asset_plant_24.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dyau6e65xdsb8" +path="res://.godot/imported/victory_asset_plant_24.png-b14751e055dbba58a46a778cd6633dbb.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/gardens/victory_assets/victory_asset_plant_24.png" +dest_files=["res://.godot/imported/victory_asset_plant_24.png-b14751e055dbba58a46a778cd6633dbb.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/gardens/victory_assets/victory_asset_plant_25.png b/assets/gardens/victory_assets/victory_asset_plant_25.png new file mode 100644 index 0000000000000000000000000000000000000000..37f83ca9fae04946a7bed3b890c3b65720c32ca2 GIT binary patch literal 2893 zcmV-T3$pZyP)qnK z6o1xNq{tu1A7AWtI}%_4tbnuq-#5UW7+4=21xM8q}ls`uF&l$bWS z0RGT>S8cTUN<7H?AG$?s0AgGdJi=lI!?DLME6hthJe12jvkD;3cR23UNDTvq{ z`Fv|JkNYE^uPx@`j1)wy7{16WjkGr$8bf0YookD|XRcdzyIl&e#csFz*Y3bSG}4s& z-)?rhU7_*&s&oFeW|}BoDU?Kj4e;mA-#?r9{RQxTe|&=Kjw~k9G@au+5@?mSq$1)R z3RD%`(K+7e8WjV+MJzaYL#C>?F^+XF zRvhmxfGUlJ#`#S|JVVt0wLw}Lo*%;3yT?>B8xTz=?V|TxvD4%3$ho`B`Ja}%-LCGX z_u44(T@shQzb}DL=$Fi3w6lo)nb_wN_^;)2 zp7OZL{3~{64LBz?5dpq%c<%2=Oh8CeM3?+1v;ih$5#8Z!I4g_j4sQd?K1HlO=Ji>T zOQJiTWp$d=ycG+0`+ui8`>ToX>)!hqNzGdk@}T*<1{r?G4|zD>$J9K zN5+t;iCdE*ZgftPamwVfcAb7=CAT9Zz>0{r0~}=Z`GCgiEFBRyz^&Apj1gJ|NH==M z5;a{t!?h)*(=+Z+ zcTL6~*BHjmk%Y?3)v7&=s?iq7M5&D=y?;ISDqwkQEblgMmLS-c^4 zJ4`9DFtyQU_~;tX0S6N23QJ?PHYX2Xa6I^H<}tTe9Bj8K;s)iG%R-KGi{*Z{?P>g3 z$Z@O-2yWJ5WFd!fA|SY1P?Lpx%o`lKDqXIM+Mw1OeD2+kD;x)e_q9XKHS@!2rOp;r z8#!O%=5w2&C3fP&q`*Du|Mjw*&-Zfgg6BWQ;~nZT@+?;h!=b_R)^ol-*aBZ6k2g1) zkh``mc|O&v*XpxR$iNFVs@h4t8{)nC>=QbAMuWNl?*iLl!WQ@)0jkeFp+#)DM)jv` z?!@Mjw)%`>u~94{g7WGwiNAWi#Z&)JmzYEZbzzpo>*cw^!brSrViOS#QzG90{|jr% z58MO4Cej7Bv2P6hd*E+@ZFr0FeMVLKy2LIbgbiTyOA^>eF~;h&k8X%9+k7Me0U-?$ zLp9^;K>5xli+G$WP`hgu^bUwnjTXqUQc2DIlcv zOdR4G)si%MPCo3@R`$$!#2Kn|FL1k2bd|b@aEP=0C*W6_Y5oHI(UC1B>gMtlCi`tl z`zIb_gDOo8`hk-E>A;SQy&b+MeyyK_h%r!Mw(qbF)+sh@VxuCQfDb^EMU+tyPQW(* zB)b@~a6woBx9nG2Wf9G(0_R_{_bz1-%_s@G{NR?(IBOQsj51)}PnL~m5$977E?&>z zvhgh9d_t_fxJAvp8(cP?JNxq~1!=eFJK7r#TNjQFk7W_(Q6g*5+>uBeo99d^OkY{B z;R#tpeF|g^ns#Sb>tqr2DTV2s#j?pF>Qf5SJDUWZMbzU0*&wgh7J8;+5%nmA=_?C1 z93_i5O@VBe?sjK$XJiqlDTV1P3pR|BMVzJ-rgs`)5weI=ERi*6?(wj?DvLNyDNOIY z6hanpj0N)P7hV>~W)Y853e(^64C9@qhIHJpvSEY{S;S$M$Qm@xoZUmbL@g@WIegWq zXTvo!_sR`ODNJ8kut6IiCGi~P@%RS#gc9`3L%yciXwXy^?9k>V{@3Nb2EIi#zZahK z)r9r2z(?TfC6YgBmT zP@E99G$vVte7-0*a^GC274tyZ| zLZeAyD2ZUlIc{4(h`d455=%)0RT|g$+W~ZnE%B^i9wnBN2zH#~HmO1zpi4|8v85r7 z(io+)dx)4yVoQi^eEN6^acPSfMYQ1@mlA#7uuF{9Dfk&19OLIi>?`dPV@U)%&T&(M zuKG10RuLiGMw3;be2s}�I%@d@j*DyN8HbM98D}TEs45gWNejhstAK)`+!r+Qo)* zT!$o_-9yA)62XphT!-j~oQ@IGcC-bmBn&y7e}ZyIyDE+U-{-$N^8K2KMUJI9Jwvq$ zU00bBp6qWQ3$ci}Mjl(u2UkSc_=)A2n1X;1>23nCh!`?p?i`|Y$HgMzDzpI_+!J9{ r3h_J>L5*Dan$bO%HR?u-vLt>FH0cEB#b>8c00000NkvXXu0mjfY0HC| literal 0 HcmV?d00001 diff --git a/assets/gardens/victory_assets/victory_asset_plant_25.png.import b/assets/gardens/victory_assets/victory_asset_plant_25.png.import new file mode 100644 index 00000000..9acac3cc --- /dev/null +++ b/assets/gardens/victory_assets/victory_asset_plant_25.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c7lgiyapshr23" +path="res://.godot/imported/victory_asset_plant_25.png-62e3a6db42f3d39cb4d0166728b56741.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/gardens/victory_assets/victory_asset_plant_25.png" +dest_files=["res://.godot/imported/victory_asset_plant_25.png-62e3a6db42f3d39cb4d0166728b56741.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/gardens/victory_assets/victory_asset_torch.png b/assets/gardens/victory_assets/victory_asset_torch.png new file mode 100644 index 0000000000000000000000000000000000000000..8d1a2faa7cf5a2a89bda15e3e5121a63f23e1552 GIT binary patch literal 1595 zcmcgt`#Tc~0NuP-$TmXUn_^p0%{Js2YM2_S?N*paCF`;4nMZB%xHXTYw2CoYLi8}g z7s;bCug3ByR7%5W+B`;>-MPE}#Qou%^L^(#Kb-IUa?*XgJ+wA$+XMgrv^;Ux;|j$n zFr=ZTVAQygjzT~YINxXhU^C=D00+jd$p8RVktf!b7|#+Fh+;n5=(>c{q~Ct3gd(bK zG#p%qK!=a|oJ%n`YJlD=H0e`Y5gJP9~+B!3vElk~Wh5xESnQrl#Ym_B7eqZ(2Cyg4{vi-yDpYmf2X3+nqxP zE7Mr!DUCudBq$ROO}-NHvF&7_zC~pDzEHjS_4Y_d%(*_|^>p1zus4hVE;PMzv6Rq7 zY}b2c1i4XqPVD)_)a~%(T{H|yT^g}0Su?SEPa3C2qzhK`cc$7v>=@r?(}~W{vzm|X zB#S+ffdM5^2y61DNjHEQit>Ap9^`3G%XD`};K)F!lr zbQ-1#MUJ~Y58D_JlhHKZS46adEjxL--_?QqKofE5iAG)2qrD6nZSvrk2xFlY+Ae2y z6t?So6F#ygq|2vmJ-bo$xqIjm#T#|gU9fjJhtAPMrmluFe`c&@jJzEJbC>aw?KH`n z)oEi62|e4_%CJo3?r(9PV9z&NseZPQDRGF73s)Zp@YSpMq{uV%hmxKnWO)}llGn>~ zoxF8c$@CX@h+QwjnnL9y5U+p#*xD6dwq0wB2`5_Fa!Eh4m|eJ3)5$9~6Y@-H;k`CW zK$|^=L0c|`eB_%a6;G9&Iw7Vl2pz=GiQWM6*i*b_#4I2C@@7{5LaefvZw;+}mwvo% z_QC;nSgdkpZ$V56j&h9sd1b|EpaPUAU&Npb!nI{a5&y93{P-<3zJ|F;>XYtZ>xs@V z5o-H;WUZ=v6D}#F_JGYR<%Gl~=u{kKjs^OVbB7+>A2(OI+vRlwDu2mk`O7YO*i0S) zO@$j*c|fb*zKFqXuf( z$vYi2AoyjN-ur5ZPS7Js8D1s1nJ2#9=MsyGe8;Jatem$Dr)z0-Z;x7ss8=2=2pFWY z14iuM2u6a^OI;6_hUY@xd@MtznY|0?ypF4m12rc;#$#l6%A0+WGikp8Lskzve%SYk zho$u1zRx_XE(%xK_n>_Vb4f6|-v_*U%9#i!w~QSfE{?p>qbbs5W#|DLq2>g&z@nZQ z9BT(!HD?rTdv!Rhf(tWf?qA;9m6^33;046HTR1=E-lI~meC_PfjxtlGvT0mkvnsQH zf!_5qH`br8^Y9U{SgXx`UP>%9kdOqp3OwgkW36_hZTW@5O9v!4mns()mtLKqgfdQB z&Ghdvy`_b8K9Ar4ovSs!YUHDpPVH>vq5V__QZcZ37%G!4sC~EK&wy?PHf>I+vB;+) z>NrQFs9=0>kdCnR+Q_lmtBO{Y=*_bBZt%%9pqw%mRAvURw|$Z$>N9j9UhvZ;h7u8{`Ns;pAvli zL9*YN6-VZ=v-u~Q>82W2+7Zr~C`G&i)7h literal 0 HcmV?d00001 diff --git a/assets/gardens/victory_assets/victory_asset_torch.png.import b/assets/gardens/victory_assets/victory_asset_torch.png.import new file mode 100644 index 00000000..7f2eecec --- /dev/null +++ b/assets/gardens/victory_assets/victory_asset_torch.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://yag8afxcasm1" +path="res://.godot/imported/victory_asset_torch.png-9453b552d5c63d67001ddab22498dabd.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/gardens/victory_assets/victory_asset_torch.png" +dest_files=["res://.godot/imported/victory_asset_torch.png-9453b552d5c63d67001ddab22498dabd.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/gardens/victory_assets/victory_asset_tumbleweeds.png b/assets/gardens/victory_assets/victory_asset_tumbleweeds.png new file mode 100644 index 0000000000000000000000000000000000000000..5f778670596864eac2038ffefd149c12056a6fec GIT binary patch literal 3068 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 KMNUMnLSTY=$LUl6 literal 0 HcmV?d00001 diff --git a/assets/gardens/victory_assets/victory_asset_tumbleweeds.png.import b/assets/gardens/victory_assets/victory_asset_tumbleweeds.png.import new file mode 100644 index 00000000..01e08f96 --- /dev/null +++ b/assets/gardens/victory_assets/victory_asset_tumbleweeds.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c784fmd7v5wkt" +path="res://.godot/imported/victory_asset_tumbleweeds.png-72bc0db853483cfc636357f54602cdef.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/gardens/victory_assets/victory_asset_tumbleweeds.png" +dest_files=["res://.godot/imported/victory_asset_tumbleweeds.png-72bc0db853483cfc636357f54602cdef.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/resources/gardens/garden_05.tscn b/resources/gardens/garden_05.tscn index a91782f9..282e7805 100644 --- a/resources/gardens/garden_05.tscn +++ b/resources/gardens/garden_05.tscn @@ -9,7 +9,7 @@ [ext_resource type="Texture2D" uid="uid://bd5pxoufamqy" path="res://assets/gardens/animals/yellow_parakeet.png" id="5_l6rp4"] [ext_resource type="Texture2D" uid="uid://bg02dhcrwf5nx" path="res://assets/gardens/victory_assets/victory_asset_plant_17.png" id="6_oapcv"] [ext_resource type="Texture2D" uid="uid://chtr4d0a80s61" path="res://assets/gardens/victory_assets/victory_asset_plant_18.png" id="7_sjfs7"] -[ext_resource type="Texture2D" uid="uid://c784fmd7v5wkt" path="res://assets/gardens/victory_assets/victory_asset_coconut.png" id="8_se3av"] +[ext_resource type="Texture2D" uid="uid://c784fmd7v5wkt" path="res://assets/gardens/victory_assets/victory_asset_tumbleweeds.png" id="8_se3av"] [ext_resource type="Texture2D" uid="uid://bpqo8maufc3gr" path="res://assets/gardens/victory_assets/victory_asset_ladybugs.png" id="9_r7c56"] [ext_resource type="Texture2D" uid="uid://its5dfr0ipak" path="res://assets/gardens/victory_assets/victory_asset_butterfly_01.png" id="10_s6qsy"] diff --git a/resources/gardens/garden_08.tscn b/resources/gardens/garden_08.tscn index 664c5c8c..4e9b7989 100644 --- a/resources/gardens/garden_08.tscn +++ b/resources/gardens/garden_08.tscn @@ -1,10 +1,17 @@ [gd_scene format=3 uid="uid://blk1dw8m5qrxx"] [ext_resource type="Script" uid="uid://ch5h4p1o54whq" path="res://resources/gardens/garden.gd" id="1_5owem"] -[ext_resource type="Texture2D" uid="uid://l32ekwfso26s" path="res://assets/gardens/gardens/garden_04.png" id="2_fd7lh"] -[ext_resource type="Texture2D" uid="uid://dro75vltqiq6j" path="res://assets/gardens/victory_assets/victory_asset_plant_07.png" id="3_08dq4"] +[ext_resource type="Texture2D" uid="uid://kgeoctiggnxx" path="res://assets/gardens/gardens/garden_08.png" id="2_fd7lh"] +[ext_resource type="Texture2D" uid="uid://br5gguush2y12" path="res://assets/gardens/victory_assets/victory_asset_plant_14.png" id="3_6wkbm"] [ext_resource type="PackedScene" uid="uid://delcgui3v0eek" path="res://sources/lesson_screen/lesson_button.tscn" id="4_epm30"] -[ext_resource type="Texture2D" uid="uid://d3vt2qpngkkjs" path="res://assets/gardens/animals/crab.png" id="5_nrben"] +[ext_resource type="Texture2D" uid="uid://yag8afxcasm1" path="res://assets/gardens/victory_assets/victory_asset_torch.png" id="4_xgdw6"] +[ext_resource type="Texture2D" uid="uid://kygm5ieixgne" path="res://assets/gardens/animals/monkey.png" id="5_fd7lh"] +[ext_resource type="Texture2D" uid="uid://8kmojsnwp657" path="res://assets/gardens/victory_assets/victory_asset_plant_23.png" id="5_sqwgp"] +[ext_resource type="Texture2D" uid="uid://dlxljmb4wnx2o" path="res://assets/gardens/victory_assets/victory_asset_monkey.png" id="6_04ydh"] +[ext_resource type="Texture2D" uid="uid://dyau6e65xdsb8" path="res://assets/gardens/victory_assets/victory_asset_plant_24.png" id="7_xgdw6"] +[ext_resource type="Texture2D" uid="uid://d3i313p52n6h8" path="res://assets/gardens/victory_assets/victory_asset_coconut.png" id="8_1by5a"] +[ext_resource type="Texture2D" uid="uid://c7lgiyapshr23" path="res://assets/gardens/victory_assets/victory_asset_plant_25.png" id="9_08dq4"] +[ext_resource type="Texture2D" uid="uid://uepox6kvky5" path="res://assets/gardens/victory_assets/victory_asset_crown.png" id="10_7g80l"] [node name="Garden" type="Control" unique_id=167073905] custom_minimum_size = Vector2(2400, 2.08165e-12) @@ -17,14 +24,14 @@ grow_vertical = 2 mouse_filter = 2 script = ExtResource("1_5owem") title = "Purple Turtle Garden" -unlocked_lesson = Color(0.7490196, 0.2784314, 0, 1) -unlocked_lesson_text = Color(1, 0.7921569, 0.6901961, 1) -completed_lesson = Color(1, 0.7921569, 0.6901961, 1) -completed_lesson_text = Color(0.7490196, 0.2784314, 0, 1) +unlocked_lesson = Color(0.36078432, 0.19607843, 0.03137255, 1) +unlocked_lesson_text = Color(1, 0.8784314, 0.7607843, 1) +completed_lesson = Color(1, 0.8784314, 0.7607843, 1) +completed_lesson_text = Color(0.36078432, 0.19607843, 0.03137255, 1) [node name="Background" type="TextureRect" parent="." unique_id=1058030897] unique_name_in_owner = true -modulate = Color(1, 0.49803922, 0.2, 1) +modulate = Color(0.54901963, 0.40784314, 0.26666668, 1) layout_mode = 0 offset_left = 350.0 offset_top = 50.0 @@ -45,14 +52,105 @@ grow_vertical = 2 mouse_filter = 2 [node name="Victory_Asset_01" type="TextureRect" parent="Victory_Assets" unique_id=1278004645] -modulate = Color(0.7490196, 0.2784314, 0, 1) +modulate = Color(0.36078432, 0.19607843, 0.03137255, 1) layout_mode = 0 -offset_left = 761.0 -offset_top = 1263.0 -offset_right = 939.0 -offset_bottom = 1575.0 +offset_left = 575.0 +offset_top = 154.0 +offset_right = 815.0 +offset_bottom = 567.0 mouse_filter = 2 -texture = ExtResource("3_08dq4") +texture = ExtResource("3_6wkbm") +expand_mode = 1 +stretch_mode = 5 + +[node name="Victory_Asset_02" type="TextureRect" parent="Victory_Assets" unique_id=1630745727] +modulate = Color(0.36078432, 0.19607843, 0.03137255, 1) +layout_mode = 0 +offset_left = 1331.0 +offset_top = 1168.0 +offset_right = 1382.0 +offset_bottom = 1380.0 +scale = Vector2(2, 2) +mouse_filter = 2 +texture = ExtResource("4_xgdw6") +expand_mode = 1 +stretch_mode = 5 + +[node name="Victory_Asset_03" type="TextureRect" parent="Victory_Assets" unique_id=1794013317] +modulate = Color(0.36078432, 0.19607843, 0.03137255, 1) +layout_mode = 0 +offset_left = 1207.0 +offset_top = 649.0 +offset_right = 1346.0 +offset_bottom = 757.0 +scale = Vector2(2, 2) +mouse_filter = 2 +texture = ExtResource("5_sqwgp") +expand_mode = 1 +stretch_mode = 5 + +[node name="Victory_Asset_04" type="TextureRect" parent="Victory_Assets" unique_id=454634667] +modulate = Color(0.36078432, 0.19607843, 0.03137255, 1) +layout_mode = 0 +offset_left = 1016.0 +offset_top = 103.0 +offset_right = 1491.0 +offset_bottom = 506.0 +scale = Vector2(0.8, 0.8) +mouse_filter = 2 +texture = ExtResource("6_04ydh") +expand_mode = 1 +stretch_mode = 5 + +[node name="Victory_Asset_05" type="TextureRect" parent="Victory_Assets" unique_id=496718290] +modulate = Color(0.36078432, 0.19607843, 0.03137255, 1) +layout_mode = 0 +offset_left = 581.0 +offset_top = 1105.0 +offset_right = 849.0 +offset_bottom = 1313.0 +scale = Vector2(2, 2) +mouse_filter = 2 +texture = ExtResource("7_xgdw6") +expand_mode = 1 +stretch_mode = 5 + +[node name="Victory_Asset_06" type="TextureRect" parent="Victory_Assets" unique_id=1049631704] +modulate = Color(0.36078432, 0.19607843, 0.03137255, 1) +layout_mode = 0 +offset_left = 992.0 +offset_top = 555.0 +offset_right = 1062.0 +offset_bottom = 629.0 +scale = Vector2(2, 2) +mouse_filter = 2 +texture = ExtResource("8_1by5a") +expand_mode = 1 +stretch_mode = 5 + +[node name="Victory_Asset_07" type="TextureRect" parent="Victory_Assets" unique_id=1645385804] +modulate = Color(0.36078432, 0.19607843, 0.03137255, 1) +layout_mode = 0 +offset_left = 1536.0001 +offset_top = 335.0 +offset_right = 1649.0001 +offset_bottom = 504.0 +scale = Vector2(1.5, 1.5) +mouse_filter = 2 +texture = ExtResource("9_08dq4") +expand_mode = 1 +stretch_mode = 5 + +[node name="Victory_Asset_08" type="TextureRect" parent="Victory_Assets" unique_id=1819785466] +modulate = Color(0.36078432, 0.19607843, 0.03137255, 1) +layout_mode = 0 +offset_left = 1558.0 +offset_top = 1258.0 +offset_right = 1648.0 +offset_bottom = 1327.0 +scale = Vector2(1.5, 1.5) +mouse_filter = 2 +texture = ExtResource("10_7g80l") expand_mode = 1 stretch_mode = 5 @@ -67,50 +165,50 @@ mouse_filter = 2 [node name="Slot1" parent="Buttons" unique_id=1361620593 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 494.0 -offset_top = 1052.0 -offset_right = 734.0 -offset_bottom = 1292.0 +offset_left = 434.0 +offset_top = 650.0 +offset_right = 674.0 +offset_bottom = 890.0 pivot_offset = Vector2(120, 120) [node name="Slot2" parent="Buttons" unique_id=1025579258 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 762.0 -offset_top = 887.0 -offset_right = 1002.0 -offset_bottom = 1127.0 +offset_left = 738.0 +offset_top = 835.0 +offset_right = 978.0 +offset_bottom = 1075.0 pivot_offset = Vector2(120, 120) [node name="Slot3" parent="Buttons" unique_id=353688519 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 1066.0 -offset_top = 810.0 -offset_right = 1306.0 -offset_bottom = 1050.0 +offset_left = 1084.0 +offset_top = 982.0 +offset_right = 1324.0 +offset_bottom = 1222.0 pivot_offset = Vector2(120, 120) [node name="Slot4" parent="Buttons" unique_id=1536126098 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 1405.0 -offset_top = 885.0 -offset_right = 1645.0 -offset_bottom = 1125.0 +offset_left = 1449.0 +offset_top = 871.0 +offset_right = 1689.0 +offset_bottom = 1111.0 pivot_offset = Vector2(120, 120) [node name="Slot5" parent="Buttons" unique_id=960033946 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 1720.0 -offset_top = 1020.0 -offset_right = 1960.0 -offset_bottom = 1260.0 +offset_left = 1732.0 +offset_top = 624.0 +offset_right = 1972.0 +offset_bottom = 864.0 pivot_offset = Vector2(120, 120) -[node name="Crab" type="TextureRect" parent="." unique_id=518902024] +[node name="Monkey" type="TextureRect" parent="." unique_id=518902024] layout_mode = 0 -offset_left = 629.0 -offset_top = 259.0 -offset_right = 929.0 -offset_bottom = 559.0 -texture = ExtResource("5_nrben") +offset_left = 1473.0 +offset_top = 1369.0 +offset_right = 1773.0 +offset_bottom = 1669.0 +texture = ExtResource("5_fd7lh") expand_mode = 1 stretch_mode = 5 From ab1ad7f27e568b1a2d843937b87edeee30b1221f Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Tue, 26 May 2026 14:30:58 +0200 Subject: [PATCH 074/111] Red Parakeet garden (09) --- assets/gardens/animals/red_parakeet.png | Bin 0 -> 4257 bytes .../gardens/animals/red_parakeet.png.import | 40 ++++ assets/gardens/gardens/garden_09.png | Bin 0 -> 17997 bytes assets/gardens/gardens/garden_09.png.import | 40 ++++ .../victory_asset_butterfly_01.png | Bin 3074 -> 4258 bytes resources/gardens/garden_05.tscn | 6 +- resources/gardens/garden_08.tscn | 9 +- resources/gardens/garden_09.tscn | 176 ++++++++++++++---- 8 files changed, 226 insertions(+), 45 deletions(-) create mode 100644 assets/gardens/animals/red_parakeet.png create mode 100644 assets/gardens/animals/red_parakeet.png.import create mode 100644 assets/gardens/gardens/garden_09.png create mode 100644 assets/gardens/gardens/garden_09.png.import diff --git a/assets/gardens/animals/red_parakeet.png b/assets/gardens/animals/red_parakeet.png new file mode 100644 index 0000000000000000000000000000000000000000..1145355f79ba42cd3ab247d84f42e45e6d209460 GIT binary patch literal 4257 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 Y{ikz}^zZY+-W};5GxN?w@7{uK+v*jvLx|k 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 Qp8x;=07*qoM6N<$f~zU(T>t<8 diff --git a/resources/gardens/garden_05.tscn b/resources/gardens/garden_05.tscn index 282e7805..04c3ec58 100644 --- a/resources/gardens/garden_05.tscn +++ b/resources/gardens/garden_05.tscn @@ -148,9 +148,9 @@ modulate = Color(0.7019608, 0.44313726, 0, 1) layout_mode = 0 offset_left = 635.0 offset_top = 522.0 -offset_right = 801.0 -offset_bottom = 639.0 -scale = Vector2(2, 2) +offset_right = 862.0 +offset_bottom = 681.0 +scale = Vector2(1.5, 1.5) mouse_filter = 2 texture = ExtResource("10_s6qsy") expand_mode = 1 diff --git a/resources/gardens/garden_08.tscn b/resources/gardens/garden_08.tscn index 4e9b7989..3c1e3c8c 100644 --- a/resources/gardens/garden_08.tscn +++ b/resources/gardens/garden_08.tscn @@ -205,10 +205,11 @@ pivot_offset = Vector2(120, 120) [node name="Monkey" type="TextureRect" parent="." unique_id=518902024] layout_mode = 0 -offset_left = 1473.0 -offset_top = 1369.0 -offset_right = 1773.0 -offset_bottom = 1669.0 +offset_left = 1467.0 +offset_top = 1372.0 +offset_right = 1625.0 +offset_bottom = 1507.0 +scale = Vector2(2, 2) texture = ExtResource("5_fd7lh") expand_mode = 1 stretch_mode = 5 diff --git a/resources/gardens/garden_09.tscn b/resources/gardens/garden_09.tscn index 95bab7ae..fe6e4897 100644 --- a/resources/gardens/garden_09.tscn +++ b/resources/gardens/garden_09.tscn @@ -1,10 +1,17 @@ [gd_scene format=3 uid="uid://bboubmocwjw80"] [ext_resource type="Script" uid="uid://ch5h4p1o54whq" path="res://resources/gardens/garden.gd" id="1_5owem"] -[ext_resource type="Texture2D" uid="uid://l32ekwfso26s" path="res://assets/gardens/gardens/garden_04.png" id="2_30y1d"] -[ext_resource type="Texture2D" uid="uid://dro75vltqiq6j" path="res://assets/gardens/victory_assets/victory_asset_plant_07.png" id="3_j4wf1"] +[ext_resource type="Texture2D" uid="uid://dqk14m4demy3a" path="res://assets/gardens/gardens/garden_09.png" id="2_30y1d"] +[ext_resource type="Texture2D" uid="uid://c0lcx7x0naofl" path="res://assets/gardens/victory_assets/victory_asset_clouds.png" id="3_30y1d"] [ext_resource type="PackedScene" uid="uid://delcgui3v0eek" path="res://sources/lesson_screen/lesson_button.tscn" id="4_epm30"] -[ext_resource type="Texture2D" uid="uid://d3vt2qpngkkjs" path="res://assets/gardens/animals/crab.png" id="5_t8cqc"] +[ext_resource type="Texture2D" uid="uid://x0skor7vxadl" path="res://assets/gardens/victory_assets/victory_asset_plant_16.png" id="4_pac6c"] +[ext_resource type="Texture2D" uid="uid://da7ppeamjqjpw" path="res://assets/gardens/animals/red_parakeet.png" id="5_30y1d"] +[ext_resource type="Texture2D" uid="uid://bqafuj82xbdqm" path="res://assets/gardens/victory_assets/victory_asset_bird_treehouse.png" id="5_j4wf1"] +[ext_resource type="Texture2D" uid="uid://bg02dhcrwf5nx" path="res://assets/gardens/victory_assets/victory_asset_plant_17.png" id="6_ym7nb"] +[ext_resource type="Texture2D" uid="uid://chtr4d0a80s61" path="res://assets/gardens/victory_assets/victory_asset_plant_18.png" id="7_6bl1j"] +[ext_resource type="Texture2D" uid="uid://c784fmd7v5wkt" path="res://assets/gardens/victory_assets/victory_asset_tumbleweeds.png" id="8_j8gqo"] +[ext_resource type="Texture2D" uid="uid://bpqo8maufc3gr" path="res://assets/gardens/victory_assets/victory_asset_ladybugs.png" id="9_2xyhj"] +[ext_resource type="Texture2D" uid="uid://its5dfr0ipak" path="res://assets/gardens/victory_assets/victory_asset_butterfly_01.png" id="10_cr4yr"] [node name="Garden" type="Control" unique_id=167073905] custom_minimum_size = Vector2(2400, 2.08165e-12) @@ -17,14 +24,14 @@ grow_vertical = 2 mouse_filter = 2 script = ExtResource("1_5owem") title = "Purple Turtle Garden" -unlocked_lesson = Color(0.7490196, 0.2784314, 0, 1) -unlocked_lesson_text = Color(1, 0.7921569, 0.6901961, 1) -completed_lesson = Color(1, 0.7921569, 0.6901961, 1) -completed_lesson_text = Color(0.7490196, 0.2784314, 0, 1) +unlocked_lesson = Color(0.6, 0, 0, 1) +unlocked_lesson_text = Color(1, 0.7254902, 0.7019608, 1) +completed_lesson = Color(1, 0.7254902, 0.7019608, 1) +completed_lesson_text = Color(0.6, 0, 0, 1) [node name="Background" type="TextureRect" parent="." unique_id=1058030897] unique_name_in_owner = true -modulate = Color(1, 0.49803922, 0.2, 1) +modulate = Color(0.92156863, 0.3882353, 0.3882353, 1) layout_mode = 0 offset_left = 350.0 offset_top = 50.0 @@ -45,14 +52,106 @@ grow_vertical = 2 mouse_filter = 2 [node name="Victory_Asset_01" type="TextureRect" parent="Victory_Assets" unique_id=1278004645] -modulate = Color(0.7490196, 0.2784314, 0, 1) +modulate = Color(0.6, 0, 0, 1) layout_mode = 0 -offset_left = 761.0 -offset_top = 1263.0 -offset_right = 939.0 -offset_bottom = 1575.0 +offset_left = 685.0 +offset_top = 125.0 +offset_right = 902.0 +offset_bottom = 241.0 +scale = Vector2(2, 2) mouse_filter = 2 -texture = ExtResource("3_j4wf1") +texture = ExtResource("3_30y1d") +expand_mode = 1 +stretch_mode = 5 + +[node name="Victory_Asset_02" type="TextureRect" parent="Victory_Assets" unique_id=155087516] +modulate = Color(0.6, 0, 0, 1) +layout_mode = 0 +offset_left = 1195.0 +offset_top = 1383.0 +offset_right = 1271.0 +offset_bottom = 1544.0 +scale = Vector2(2, 2) +mouse_filter = 2 +texture = ExtResource("4_pac6c") +expand_mode = 1 +stretch_mode = 5 + +[node name="Victory_Asset_03" type="TextureRect" parent="Victory_Assets" unique_id=492879557] +modulate = Color(0.6, 0, 0, 1) +layout_mode = 0 +offset_left = 1641.0 +offset_top = 541.0 +offset_right = 1727.0 +offset_bottom = 739.0 +scale = Vector2(1.5, 1.5) +mouse_filter = 2 +texture = ExtResource("5_j4wf1") +expand_mode = 1 +stretch_mode = 5 + +[node name="Victory_Asset_04" type="TextureRect" parent="Victory_Assets" unique_id=1151142486] +modulate = Color(0.6, 0, 0, 1) +layout_mode = 0 +offset_left = 799.0 +offset_top = 1301.0 +offset_right = 979.0 +offset_bottom = 1482.0 +scale = Vector2(1.5, 1.5) +mouse_filter = 2 +texture = ExtResource("6_ym7nb") +expand_mode = 1 +stretch_mode = 5 + +[node name="Victory_Asset_05" type="TextureRect" parent="Victory_Assets" unique_id=1467200212] +modulate = Color(0.6, 0, 0, 1) +layout_mode = 0 +offset_left = 835.0 +offset_top = 499.0 +offset_right = 963.0 +offset_bottom = 668.0 +scale = Vector2(2, 2) +mouse_filter = 2 +texture = ExtResource("7_6bl1j") +expand_mode = 1 +stretch_mode = 5 + +[node name="Victory_Asset_06" type="TextureRect" parent="Victory_Assets" unique_id=306689141] +modulate = Color(0.6, 0, 0, 1) +layout_mode = 0 +offset_left = 1551.0 +offset_top = 1333.0 +offset_right = 1649.0 +offset_bottom = 1434.0 +scale = Vector2(2, 2) +mouse_filter = 2 +texture = ExtResource("8_j8gqo") +expand_mode = 1 +stretch_mode = 5 + +[node name="Victory_Asset_07" type="TextureRect" parent="Victory_Assets" unique_id=1009479170] +modulate = Color(0.6, 0, 0, 1) +layout_mode = 0 +offset_left = 1235.0 +offset_top = 473.0 +offset_right = 1394.0 +offset_bottom = 637.0 +scale = Vector2(1.5, 1.5) +mouse_filter = 2 +texture = ExtResource("9_2xyhj") +expand_mode = 1 +stretch_mode = 5 + +[node name="Victory_Asset_08" type="TextureRect" parent="Victory_Assets" unique_id=1832005076] +modulate = Color(0.6, 0, 0, 1) +layout_mode = 0 +offset_left = 1145.0 +offset_top = 1117.0 +offset_right = 1372.0 +offset_bottom = 1276.0 +scale = Vector2(1.25, 1.25) +mouse_filter = 2 +texture = ExtResource("10_cr4yr") expand_mode = 1 stretch_mode = 5 @@ -67,50 +166,51 @@ mouse_filter = 2 [node name="Slot1" parent="Buttons" unique_id=1361620593 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 494.0 -offset_top = 1052.0 -offset_right = 734.0 -offset_bottom = 1292.0 +offset_left = 572.0 +offset_top = 1008.0 +offset_right = 812.0 +offset_bottom = 1248.0 pivot_offset = Vector2(120, 120) [node name="Slot2" parent="Buttons" unique_id=1025579258 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 762.0 -offset_top = 887.0 -offset_right = 1002.0 -offset_bottom = 1127.0 +offset_left = 850.0 +offset_top = 881.0 +offset_right = 1090.0 +offset_bottom = 1121.0 pivot_offset = Vector2(120, 120) [node name="Slot3" parent="Buttons" unique_id=353688519 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 1066.0 -offset_top = 810.0 -offset_right = 1306.0 -offset_bottom = 1050.0 +offset_left = 1154.0 +offset_top = 820.0 +offset_right = 1394.0 +offset_bottom = 1060.0 pivot_offset = Vector2(120, 120) [node name="Slot4" parent="Buttons" unique_id=1536126098 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 1405.0 -offset_top = 885.0 -offset_right = 1645.0 -offset_bottom = 1125.0 +offset_left = 1457.0 +offset_top = 899.0 +offset_right = 1697.0 +offset_bottom = 1139.0 pivot_offset = Vector2(120, 120) [node name="Slot5" parent="Buttons" unique_id=960033946 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 1720.0 +offset_left = 1732.0 offset_top = 1020.0 -offset_right = 1960.0 +offset_right = 1972.0 offset_bottom = 1260.0 pivot_offset = Vector2(120, 120) -[node name="Crab" type="TextureRect" parent="." unique_id=518902024] +[node name="Red Parakeet" type="TextureRect" parent="." unique_id=518902024] layout_mode = 0 -offset_left = 629.0 -offset_top = 259.0 -offset_right = 929.0 -offset_bottom = 559.0 -texture = ExtResource("5_t8cqc") +offset_left = 429.0 +offset_top = 349.0 +offset_right = 549.0 +offset_bottom = 506.0 +scale = Vector2(2, 2) +texture = ExtResource("5_30y1d") expand_mode = 1 stretch_mode = 5 From 606b87d1b272abdea67c8b4d1736cd6a90e4ce91 Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Tue, 26 May 2026 15:56:41 +0200 Subject: [PATCH 075/111] Last 3 gardens --- assets/gardens/animals/khaki_turtle.png | Bin 0 -> 6908 bytes .../gardens/animals/khaki_turtle.png.import | 40 ++++ assets/gardens/animals/penguin.png | Bin 0 -> 4110 bytes assets/gardens/animals/penguin.png.import | 40 ++++ assets/gardens/animals/pink_jellyfish.png | Bin 0 -> 36224 bytes .../gardens/animals/pink_jellyfish.png.import | 40 ++++ assets/gardens/gardens/garden_10.png | Bin 0 -> 14873 bytes assets/gardens/gardens/garden_10.png.import | 40 ++++ assets/gardens/gardens/garden_11.png | Bin 0 -> 14636 bytes assets/gardens/gardens/garden_11.png.import | 40 ++++ assets/gardens/gardens/garden_12.png | Bin 0 -> 11993 bytes assets/gardens/gardens/garden_12.png.import | 40 ++++ .../victory_asset_cloud_snow.png | Bin 0 -> 1936 bytes .../victory_asset_cloud_snow.png.import | 40 ++++ .../victory_assets/victory_asset_mountain.png | Bin 0 -> 1203 bytes .../victory_asset_mountain.png.import | 40 ++++ .../victory_assets/victory_asset_plant_26.png | Bin 0 -> 2085 bytes .../victory_asset_plant_26.png.import | 40 ++++ .../victory_asset_snowflakes.png | Bin 0 -> 2534 bytes .../victory_asset_snowflakes.png.import | 40 ++++ .../victory_assets/victory_asset_snowman.png | Bin 0 -> 1437 bytes .../victory_asset_snowman.png.import | 40 ++++ .../victory_assets/victory_asset_snowpile.png | Bin 0 -> 1684 bytes .../victory_asset_snowpile.png.import | 40 ++++ .../victory_assets/victory_asset_whale.png | Bin 0 -> 1545 bytes .../victory_asset_whale.png.import | 40 ++++ resources/gardens/garden_10.tscn | 164 ++++++++++++---- resources/gardens/garden_11.tscn | 148 ++++++++++++-- resources/gardens/garden_12.tscn | 180 ++++++++++++++---- 29 files changed, 922 insertions(+), 90 deletions(-) create mode 100644 assets/gardens/animals/khaki_turtle.png create mode 100644 assets/gardens/animals/khaki_turtle.png.import create mode 100644 assets/gardens/animals/penguin.png create mode 100644 assets/gardens/animals/penguin.png.import create mode 100644 assets/gardens/animals/pink_jellyfish.png create mode 100644 assets/gardens/animals/pink_jellyfish.png.import create mode 100644 assets/gardens/gardens/garden_10.png create mode 100644 assets/gardens/gardens/garden_10.png.import create mode 100644 assets/gardens/gardens/garden_11.png create mode 100644 assets/gardens/gardens/garden_11.png.import create mode 100644 assets/gardens/gardens/garden_12.png create mode 100644 assets/gardens/gardens/garden_12.png.import create mode 100644 assets/gardens/victory_assets/victory_asset_cloud_snow.png create mode 100644 assets/gardens/victory_assets/victory_asset_cloud_snow.png.import create mode 100644 assets/gardens/victory_assets/victory_asset_mountain.png create mode 100644 assets/gardens/victory_assets/victory_asset_mountain.png.import create mode 100644 assets/gardens/victory_assets/victory_asset_plant_26.png create mode 100644 assets/gardens/victory_assets/victory_asset_plant_26.png.import create mode 100644 assets/gardens/victory_assets/victory_asset_snowflakes.png create mode 100644 assets/gardens/victory_assets/victory_asset_snowflakes.png.import create mode 100644 assets/gardens/victory_assets/victory_asset_snowman.png create mode 100644 assets/gardens/victory_assets/victory_asset_snowman.png.import create mode 100644 assets/gardens/victory_assets/victory_asset_snowpile.png create mode 100644 assets/gardens/victory_assets/victory_asset_snowpile.png.import create mode 100644 assets/gardens/victory_assets/victory_asset_whale.png create mode 100644 assets/gardens/victory_assets/victory_asset_whale.png.import diff --git a/assets/gardens/animals/khaki_turtle.png b/assets/gardens/animals/khaki_turtle.png new file mode 100644 index 0000000000000000000000000000000000000000..565ac0c9cac9e921e23d499a2749917626744694 GIT binary patch literal 6908 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 literal 0 HcmV?d00001 diff --git a/assets/gardens/animals/penguin.png.import b/assets/gardens/animals/penguin.png.import new file mode 100644 index 00000000..2947a8da --- /dev/null +++ b/assets/gardens/animals/penguin.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cy1nrnl520goj" +path="res://.godot/imported/penguin.png-7b214b7f40894092c07f326efebcbe8d.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/gardens/animals/penguin.png" +dest_files=["res://.godot/imported/penguin.png-7b214b7f40894092c07f326efebcbe8d.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/gardens/animals/pink_jellyfish.png b/assets/gardens/animals/pink_jellyfish.png new file mode 100644 index 0000000000000000000000000000000000000000..fff753f7ced602e0b48d58717ac5c072f305bdaa GIT binary patch literal 36224 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

4O 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 diff --git a/assets/lesson_screen/top_right.png b/assets/lesson_screen/top_right.png deleted file mode 100644 index 48c8f44c7565f18dc7dca51b39ec254d9508c927..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11870 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 lCjTYGf3xBLJ1H2S(f2%&om%OK{&#R}nS void: init_unlocks() +static func get_minigame_count_for_lesson(lesson_number: int) -> int: + return Database.get_exercise_for_lesson(lesson_number).size() + + +static func _build_default_lesson_unlock(lesson_number: int) -> Dictionary: + var minigame_count: int = get_minigame_count_for_lesson(lesson_number) + return { + "look_and_learn": Status.LOCKED, + "games": _make_locked_games_array(minigame_count), + "last_duration": _make_zero_durations(minigame_count), + "total_duration": _make_zero_durations(minigame_count), + } + + +static func _make_locked_games_array(minigame_count: int) -> Array: + var games: Array = [] + for _index: int in range(minigame_count): + games.append(Status.LOCKED) + return games + + +static func _make_zero_durations(minigame_count: int) -> PackedInt32Array: + var durations: PackedInt32Array = PackedInt32Array() + durations.resize(minigame_count) + return durations + + # Make sure the unlocks are correct func init_unlocks() -> void: if not unlocks: @@ -35,22 +62,13 @@ func init_unlocks() -> void: else: unlocks = unlocks # Force ensure_data_integrity() _sanitize_boss_progression() - + # Verify the lessons var number_of_lessons: int = Database.get_lessons_count() if unlocks.size() != number_of_lessons: for index: int in range(number_of_lessons): if not unlocks.has(index+1): - unlocks[index + 1] = { - "look_and_learn": Status.LOCKED, - "games": [ - Status.LOCKED, - Status.LOCKED, - Status.LOCKED, - ], - "last_duration": PackedInt32Array([0, 0, 0]), - "total_duration": PackedInt32Array([0, 0, 0]) - } + unlocks[index + 1] = _build_default_lesson_unlock(index + 1) # Make sure that the first garden is always accessible if unlocks.has(1): @@ -74,37 +92,39 @@ func ensure_data_integrity(data: Dictionary[int, Dictionary]) -> Dictionary: if not result.has(index): if not is_init: Log.warn("StudentProgression: Garden %d missing → added with default values." % index) - result[index] = { - "games": [Status.LOCKED, Status.LOCKED, Status.LOCKED], - "look_and_learn": Status.LOCKED, - "last_duration": PackedInt32Array([0, 0, 0]), - "total_duration": PackedInt32Array([0, 0, 0]) - } + result[index] = _build_default_lesson_unlock(index) # Check internal structure for index: int in result.keys(): var garden: Dictionary = result[index] + var minigame_count: int = get_minigame_count_for_lesson(index) # Check missing keys if not garden.has("games"): if not is_init: Log.warn("StudentProgression: Garden %d: Add missing key 'games'." % index) - garden["games"] = [Status.LOCKED, Status.LOCKED, Status.LOCKED] + garden["games"] = _make_locked_games_array(minigame_count) if not garden.has("look_and_learn"): if not is_init: Log.warn("StudentProgression: Garden %d: Add missing key 'look_and_learn'." % index) garden["look_and_learn"] = Status.LOCKED if not garden.has("last_duration"): - garden["last_duration"] = PackedInt32Array([0, 0, 0]) + garden["last_duration"] = _make_zero_durations(minigame_count) if not garden.has("total_duration"): - garden["total_duration"] = PackedInt32Array([0, 0, 0]) + garden["total_duration"] = _make_zero_durations(minigame_count) # Check array "games" - if typeof(garden["games"]) != TYPE_ARRAY or (garden["games"] as Array).size() != 3: + if typeof(garden["games"]) != TYPE_ARRAY or (garden["games"] as Array).size() != minigame_count: if not is_init: Log.warn("StudentProgression: Garden %d: invalid format for 'games' → reset." % index) - garden["games"] = [Status.LOCKED, Status.LOCKED, Status.LOCKED] + garden["games"] = _make_locked_games_array(minigame_count) + + # Make sure duration arrays match the minigame count + if (garden["last_duration"] as PackedInt32Array).size() != minigame_count: + garden["last_duration"] = _make_zero_durations(minigame_count) + if (garden["total_duration"] as PackedInt32Array).size() != minigame_count: + garden["total_duration"] = _make_zero_durations(minigame_count) # Check value outside of possible enum values - for game_index: int in range(3): + for game_index: int in range((garden["games"] as Array).size()): if garden["games"][game_index] not in [Status.LOCKED, Status.UNLOCKED, Status.COMPLETED]: garden["games"][game_index] = Status.LOCKED if garden["look_and_learn"] not in [Status.LOCKED, Status.UNLOCKED, Status.COMPLETED]: @@ -126,30 +146,57 @@ func ensure_data_integrity(data: Dictionary[int, Dictionary]) -> Dictionary: # First garden (key 1) is always unlocked prev_completed = true + var minigame_count: int = (garden["games"] as Array).size() + # Case: previous garden not completed if not prev_completed: - for game_index: int in range(3): - if garden["games"][game_index] != Status.LOCKED or garden["look_and_learn"] != Status.LOCKED: - if not is_init: - Log.warn("StudentProgression: Garden %d: invalid progression (previous not finished) → reset." % index) - garden["games"] = [Status.LOCKED, Status.LOCKED, Status.LOCKED] - garden["look_and_learn"] = Status.LOCKED - break + var needs_reset: bool = garden["look_and_learn"] != Status.LOCKED + if not needs_reset: + for game_index: int in range(minigame_count): + if garden["games"][game_index] != Status.LOCKED: + needs_reset = true + break + if needs_reset: + if not is_init: + Log.warn("StudentProgression: Garden %d: invalid progression (previous not finished) → reset." % index) + garden["games"] = _make_locked_games_array(minigame_count) + garden["look_and_learn"] = Status.LOCKED continue - # Case: lesson completed → unlock games if needed + # Enforce sequential unlock: first non-COMPLETED game → UNLOCKED, everything + # after it → LOCKED (including out-of-order COMPLETED in old saves). if garden["look_and_learn"] == Status.COMPLETED: - for game_index: int in range(3): - if garden["games"][game_index] == Status.LOCKED: - garden["games"][game_index] = Status.UNLOCKED + var next_to_play: int = -1 + for game_index: int in range(minigame_count): + if garden["games"][game_index] != Status.COMPLETED: + next_to_play = game_index + break + if next_to_play >= 0: + if garden["games"][next_to_play] == Status.LOCKED: + garden["games"][next_to_play] = Status.UNLOCKED if not is_init: - Log.warn("StudentProgression: Garden %d: game %d unlocked because lesson is completed" % [index, game_index + 1]) - - # Case: previous garden completed → unlock lesson if needed - elif garden["look_and_learn"] == Status.LOCKED: - garden["look_and_learn"] = Status.UNLOCKED - if not is_init: - Log.warn("StudentProgression: Garden %d: lesson unlocked because previous garden is completed" % index) + Log.warn("StudentProgression: Garden %d: minigame %d unlocked because it is next to play" % [index, next_to_play]) + for game_index: int in range(next_to_play + 1, minigame_count): + if garden["games"][game_index] != Status.LOCKED: + var was_completed: bool = garden["games"][game_index] == Status.COMPLETED + garden["games"][game_index] = Status.LOCKED + if not is_init: + if was_completed: + Log.warn("StudentProgression: Garden %d: minigame %d demoted from COMPLETED to LOCKED (out of play order — minigame %d not yet completed)" % [index, game_index, next_to_play]) + else: + Log.warn("StudentProgression: Garden %d: minigame %d re-locked (waits for minigame %d to be completed)" % [index, game_index, game_index - 1]) + else: + # L&L not completed → no game may be UNLOCKED (COMPLETED preserved). + for game_index: int in range(minigame_count): + if garden["games"][game_index] == Status.UNLOCKED: + garden["games"][game_index] = Status.LOCKED + if not is_init: + Log.warn("StudentProgression: Garden %d: minigame %d re-locked (look-and-learn not completed)" % [index, game_index]) + # Case: previous garden completed → unlock lesson if needed + if garden["look_and_learn"] == Status.LOCKED: + garden["look_and_learn"] = Status.UNLOCKED + if not is_init: + Log.warn("StudentProgression: Garden %d: lesson unlocked because previous garden is completed" % index) _sanitize_boss_progression() return result @@ -238,19 +285,25 @@ func get_max_unlocked_lesson_index() -> int: func is_lesson_completed(lesson_number: int) -> bool: - return unlocks[lesson_number]["look_and_learn"] == Status.COMPLETED and unlocks[lesson_number]["games"][0] == Status.COMPLETED and unlocks[lesson_number]["games"][1] == Status.COMPLETED and unlocks[lesson_number]["games"][2] == Status.COMPLETED + if unlocks[lesson_number]["look_and_learn"] != Status.COMPLETED: + return false + for game_status: int in unlocks[lesson_number]["games"]: + if game_status != Status.COMPLETED: + return false + return true # Return true if the progression is saved or false if the look and learn was already completed func look_and_learn_completed(lesson_number: int) -> bool: if unlocks[lesson_number]["look_and_learn"] == Status.COMPLETED: return false - + unlocks[lesson_number]["look_and_learn"] = Status.COMPLETED - - for index: int in range(3): - unlocks[lesson_number]["games"][index] = Status.UNLOCKED - + + var games: Array = unlocks[lesson_number]["games"] + if games.size() > 0 and games[0] == Status.LOCKED: + games[0] = Status.UNLOCKED + last_modified = Time.get_datetime_string_from_system(true) progression_changed.emit() return true @@ -258,20 +311,27 @@ func look_and_learn_completed(lesson_number: int) -> bool: # Return true if the progression is saved or false if the game was already completed func game_completed(lesson_number: int, game_number: int) -> bool: - # If the game is already completed, do nothing - if unlocks[lesson_number]["games"][game_number] == Status.COMPLETED: + var games: Array = unlocks[lesson_number]["games"] + + if games[game_number] == Status.COMPLETED: return false - - unlocks[lesson_number]["games"][game_number] = Status.COMPLETED - + + games[game_number] = Status.COMPLETED + + var next_game_index: int = game_number + 1 + if next_game_index < games.size() and games[next_game_index] == Status.LOCKED: + games[next_game_index] = Status.UNLOCKED + var all_completed: bool = true - for index: int in range(3): - all_completed = all_completed and unlocks[lesson_number]["games"][index] == Status.COMPLETED - + for game_status: int in games: + if game_status != Status.COMPLETED: + all_completed = false + break + if all_completed: if unlocks.has(lesson_number + 1): unlocks[lesson_number + 1]["look_and_learn"] = Status.UNLOCKED - + last_modified = Time.get_datetime_string_from_system(true) progression_changed.emit() return true @@ -320,13 +380,14 @@ func clear_boss_block() -> void: func add_level_time(lesson_number: int, game_number: int, time_spent: int) -> void: Log.trace("StudentProgression: Add time to level %d, minigame %d. Time added: %s" % [lesson_number, game_number, time_spent]) - if game_number > 2: - Log.error("StudentProgression: Cannot log a level time for a minigame number superior to 2") - return - if not unlocks.has(lesson_number): Log.error("StudentProgression: Cannot log a level time for lesson %d because it does not exists in progression data" % lesson_number) return + + var minigame_count: int = (unlocks[lesson_number]["games"] as Array).size() + if game_number < 0 or game_number >= minigame_count: + Log.error("StudentProgression: Cannot log a level time for minigame %d in lesson %d (lesson has %d minigame(s))" % [game_number, lesson_number, minigame_count]) + return if not (unlocks[lesson_number] as Dictionary).has("last_duration") or not (unlocks[lesson_number]["last_duration"] as PackedInt32Array).size() > game_number: Log.error("StudentProgression: Cannot log a last_duration for lesson %d, game %d, because it does not exists" % [lesson_number, game_number]) diff --git a/sources/gardens/boss_button.tscn b/sources/gardens/boss_button.tscn index 3b3a2e78..e4aebf58 100644 --- a/sources/gardens/boss_button.tscn +++ b/sources/gardens/boss_button.tscn @@ -14,6 +14,7 @@ offset_bottom = 512.0 pivot_offset = Vector2(180, 180) size_flags_horizontal = 4 size_flags_vertical = 4 +mouse_filter = 1 texture_normal = ExtResource("lesson_circle") texture_pressed = ExtResource("lesson_circle") texture_hover = ExtResource("lesson_circle") @@ -35,6 +36,7 @@ anchor_right = 0.5 anchor_bottom = 0.5 grow_horizontal = 2 grow_vertical = 2 +mouse_filter = 1 [node name="Border" type="TextureRect" parent="." unique_id=758604924] unique_name_in_owner = true diff --git a/sources/gardens/gardens.gd b/sources/gardens/gardens.gd index e134c678..9bfd1d66 100644 --- a/sources/gardens/gardens.gd +++ b/sources/gardens/gardens.gd @@ -4,6 +4,22 @@ extends Control signal minigame_layout_opened() const KALULU: GDScript = preload("res://sources/minigames/base/kalulu_ingame.gd") +const MINIGAME_WEDGE_SCENE: PackedScene = preload("res://sources/gardens/minigame_wedge.tscn") +# Wheel geometry, in MinigameSelection-local coords (canvas 2560×1800). +const WHEEL_CENTER: Vector2 = Vector2(1280, 900) +# Matches the inner edge of big_button.png; past this the gray ring hides everything. +const WHEEL_RADIUS: float = 815.0 +const WHEEL_ARC_SEGMENTS: int = 48 +const WHEEL_ICON_DISTANCE_RATIO: float = 0.55 +const WHEEL_DIVIDER_WIDTH: float = 12.0 +const WHEEL_HIGHLIGHT_WIDTH: float = 12.0 +# Outline around the central Look-and-Learn button. Drawn at the button's visible +# edge. Colored dark by default, gold when L&L is the next-to-play step. +const LESSON_BUTTON_OUTLINE_RADIUS: float = 192.0 +# Top inset of the wheel's central label so the grapheme text sits just below the +# button center, mirroring the movie icon just above it. The 384x384 button has +# its center at y=192; the label (vertical-centered) then centers at y=(this+384)/2. +const LESSON_BUTTON_LABEL_TOP_OFFSET: float = 104.0 const GARDEN_SCENES: Array[PackedScene] = [ preload("res://resources/gardens/garden_01.tscn"), preload("res://resources/gardens/garden_02.tscn"), @@ -48,12 +64,12 @@ static var cached_layout_lessons: int = 0 get: return _gardens_layout @export var starting_garden: int = -1 -@export_category("Colors") -@export var unlocked_color: Color = Color("1c2662") -@export var locked_color: Color = Color("1d2229") -@export_group("Minigames") +@export_category("Minigames") @export var minigame_scene_paths: PackedStringArray = PackedStringArray() -@export var minigames_icons: Array[Texture] = [] +## Animal body (colored by the garden) and face (kept as-is for eyes/mouth details). +## Both arrays must be the same length and aligned with `minigame_scene_paths`. +@export var minigames_body_icons: Array[Texture] = [] +@export var minigames_face_icons: Array[Texture] = [] var _minigame_scene_cache: Dictionary = {} var lessons: Dictionary = {} @@ -84,17 +100,16 @@ var is_back_button_hold_active: bool = false @onready var boss_buttons_container: Control = %BossButtons @onready var minigame_selection: Control = %MinigameSelection @onready var lesson_button: LessonButton = %LessonButton +@onready var lesson_button_outline: Line2D = %LessonButtonOutline +@onready var lesson_button_movie_icon: TextureRect = %MovieIcon @onready var lesson_button_particles: GPUParticles2D = %LessonButtonParticles @onready var back_button: BackButton = %BackButton @onready var right_audio_stream_player: AudioStreamPlayer = $RightAudioStreamPlayer @onready var left_audio_stream_player: AudioStreamPlayer = $LeftAudioStreamPlayer @onready var feedback_audio_stream_player: AudioStreamPlayer = $FeedBackAudioStreamPlayer @onready var feedback_audio_stream_player2: AudioStreamPlayer = $FeedBackAudioStreamPlayer2 -@onready var minigame_layout_1: MinigameLayout = %MinigameBackground1 -@onready var minigame_layout_2: MinigameLayout = %MinigameBackground2 -@onready var minigame_layout_3: MinigameLayout = %MinigameBackground3 -@onready var minigame_background: TextureRect = %MinigameBackground -@onready var minigame_background_center: TextureRect = %MinigameBackgroundCenter +@onready var wedges_container: Control = %WedgesContainer +@onready var background_rect: ColorRect = %BackgroundRect @onready var lock: Control = %Lock @onready var kalulu: KALULU = %Kalulu @onready var kalulu_button: CanvasItem = %KaluluButton @@ -669,7 +684,6 @@ func _process(_delta: float) -> void: _process_back_button_hold(_delta) locked_line.position.x = - scroll_container.scroll_horizontal unlocked_line.position.x = - scroll_container.scroll_horizontal - boss_buttons_container.position.x = - scroll_container.scroll_horizontal parallax_background.scroll_offset.x = - scroll_container.scroll_horizontal clouds.scroll_offset = scroll_container.scroll_horizontal @@ -688,17 +702,191 @@ func _process_back_button_hold(delta: float) -> void: _confirm_back_button_pressed() -func _get_minigame_layouts() -> Array[MinigameLayout]: - return [minigame_layout_1, minigame_layout_2, minigame_layout_3] +# Single source of truth for wedge geometry. Returns the pie-slice's start/end +# angles and the bisector angle along which the icon sits, for wedge `wedge_index` +# of a wheel showing `minigame_count` wedges (1..3). +# N=1: full disc, icon to the left of the L&L button. +# N=2: game 0 left half, game 1 right half. +# N=3: game 0 top-right, game 1 bottom, game 2 top-left. +static func _get_wedge_angles(minigame_count: int, wedge_index: int) -> Dictionary: + if minigame_count == 1: + return {start = 0.0, end = TAU, icon = PI} + if minigame_count == 2: + if wedge_index == 0: + return {start = PI / 2.0, end = 3.0 * PI / 2.0, icon = PI} + return {start = -PI / 2.0, end = PI / 2.0, icon = 0.0} + if wedge_index == 0: + return {start = -PI / 2.0, end = PI / 6.0, icon = -PI / 6.0} + if wedge_index == 1: + return {start = PI / 6.0, end = 5.0 * PI / 6.0, icon = PI / 2.0} + return {start = 5.0 * PI / 6.0, end = 3.0 * PI / 2.0, icon = 7.0 * PI / 6.0} + + +static func _get_wedge_layout(minigame_count: int, wedge_index: int) -> Dictionary: + var angles: Dictionary = _get_wedge_angles(minigame_count, wedge_index) + var polygon: PackedVector2Array = _generate_full_disc_polygon() if minigame_count == 1 \ + else _generate_pie_slice_polygon(angles.start as float, angles.end as float) + return {polygon = polygon, icon_center = _wedge_icon_position(angles.icon as float)} + + +static func _generate_pie_slice_polygon(start_angle: float, end_angle: float, radius: float = WHEEL_RADIUS) -> PackedVector2Array: + var wheel_points: PackedVector2Array = PackedVector2Array() + wheel_points.append(WHEEL_CENTER) + var span: float = end_angle - start_angle + for index: int in range(WHEEL_ARC_SEGMENTS + 1): + var angle: float = start_angle + span * (float(index) / float(WHEEL_ARC_SEGMENTS)) + wheel_points.append(WHEEL_CENTER + Vector2(cos(angle), sin(angle)) * radius) + return wheel_points + + +static func _generate_full_disc_polygon(radius: float = WHEEL_RADIUS) -> PackedVector2Array: + var wheel_points: PackedVector2Array = PackedVector2Array() + for index: int in range(WHEEL_ARC_SEGMENTS): + var angle: float = TAU * float(index) / float(WHEEL_ARC_SEGMENTS) + wheel_points.append(WHEEL_CENTER + Vector2(cos(angle), sin(angle)) * radius) + return wheel_points + + +# Wedge polygon with outer arc inset by half the stroke width so the gold line +# stays inside the wedge. Radial edges keep their angles (fall on the dividers). +static func _generate_wedge_highlight_polygon(minigame_count: int, wedge_index: int) -> PackedVector2Array: + var inset_radius: float = WHEEL_RADIUS - WHEEL_HIGHLIGHT_WIDTH * 0.5 + if minigame_count == 1: + return _generate_full_disc_polygon(inset_radius) + var angles: Dictionary = _get_wedge_angles(minigame_count, wedge_index) + return _generate_pie_slice_polygon(angles.start as float, angles.end as float, inset_radius) + + +static func _wedge_icon_position(angle_rad: float) -> Vector2: + return WHEEL_CENTER + Vector2(cos(angle_rad), sin(angle_rad)) * (WHEEL_RADIUS * WHEEL_ICON_DISTANCE_RATIO) + + +static func _get_divider_segments(minigame_count: int) -> Array[PackedVector2Array]: + var segments: Array[PackedVector2Array] = [] + if minigame_count < 2: + return segments + for wedge_index: int in range(minigame_count): + var start_angle: float = _get_wedge_angles(minigame_count, wedge_index).start as float + var edge: Vector2 = WHEEL_CENTER + Vector2(cos(start_angle), sin(start_angle)) * WHEEL_RADIUS + segments.append(PackedVector2Array([WHEEL_CENTER, edge])) + return segments + + +func _clear_wheel() -> void: + for child: Node in wedges_container.get_children(): + child.queue_free() + + +func _build_wheel(exercises: Array[int], lesson_unlocks: Dictionary) -> void: + _clear_wheel() + var minigame_count: int = exercises.size() + for wedge_index: int in range(minigame_count): + var layout: Dictionary = _get_wedge_layout(minigame_count, wedge_index) + var exercise_type: int = exercises[wedge_index] + var icon_index: int = exercise_type - 1 + var status: StudentProgression.Status = lesson_unlocks["games"][wedge_index] as StudentProgression.Status + var wedge: MinigameWedge = MINIGAME_WEDGE_SCENE.instantiate() + wedges_container.add_child(wedge) + var is_wedge_locked: bool = status == StudentProgression.Status.LOCKED + wedge.configure( + layout.polygon as PackedVector2Array, + layout.icon_center as Vector2, + minigames_body_icons[icon_index], + minigames_face_icons[icon_index], + _wedge_color_for_status(status), + _body_color_for_status(status), + is_wedge_locked, + ) + wedge.is_disabled = is_wedge_locked + wedge.pressed.connect(_on_minigame_button_pressed.bind(icon_index, wedge_index)) + _apply_wedge_status_effects(wedge, status, wedge_index) + + for line_points: PackedVector2Array in _get_divider_segments(minigame_count): + var divider: Line2D = Line2D.new() + divider.width = WHEEL_DIVIDER_WIDTH + divider.default_color = current_garden.wheel_background + divider.points = line_points + wedges_container.add_child(divider) + + _draw_next_to_play_highlight(lesson_unlocks, minigame_count) + + +func _next_to_play_wedge_index(lesson_unlocks: Dictionary) -> int: + if lesson_unlocks["look_and_learn"] != StudentProgression.Status.COMPLETED: + return -1 + var games: Array = lesson_unlocks["games"] + for index: int in range(games.size()): + if games[index] == StudentProgression.Status.UNLOCKED: + return index + return -1 + + +func _draw_next_to_play_highlight(lesson_unlocks: Dictionary, minigame_count: int) -> void: + # L&L's "next to play" cue is the lesson-button outline color swap, handled + # in _configure_lesson_button_outline(). Wedges get a separate gold ring here. + var wedge_index: int = _next_to_play_wedge_index(lesson_unlocks) + if wedge_index < 0: + return + _draw_wedge_highlight(minigame_count, wedge_index) + + +func _draw_wedge_highlight(minigame_count: int, wedge_index: int) -> void: + _add_highlight_line(_generate_wedge_highlight_polygon(minigame_count, wedge_index)) + + +# Adds a gold outline tracing the given polygon to the wheel. The polyline is +# closed automatically. z_index lifts the line above Branches; LessonButton's +# higher z_index keeps it on top in turn. +func _add_highlight_line(polygon_points: PackedVector2Array) -> void: + if polygon_points.is_empty(): + return + var outline: PackedVector2Array = PackedVector2Array(polygon_points) + outline.append(polygon_points[0]) + var line: Line2D = Line2D.new() + line.width = WHEEL_HIGHLIGHT_WIDTH + line.default_color = Garden.WHEEL_HIGHLIGHT + line.joint_mode = Line2D.LINE_JOINT_ROUND + line.begin_cap_mode = Line2D.LINE_CAP_ROUND + line.end_cap_mode = Line2D.LINE_CAP_ROUND + line.points = outline + line.z_index = 5 + wedges_container.add_child(line) + + +func _wedge_color_for_status(status: StudentProgression.Status) -> Color: + match status: + StudentProgression.Status.LOCKED: + return Garden.WHEEL_WEDGE_LOCKED + _: + return current_garden.wheel_wedge_unlocked + + +# Animal body tint: gray when locked, garden's signature color otherwise. +func _body_color_for_status(status: StudentProgression.Status) -> Color: + if status == StudentProgression.Status.LOCKED: + return Garden.ANIMAL_LOCKED_COLOR + return current_garden.animal_unlocked_color + + +func _apply_wedge_status_effects(wedge: MinigameWedge, status: StudentProgression.Status, wedge_index: int) -> void: + if status != StudentProgression.Status.COMPLETED: + return + if not transition_data \ + or not transition_data.get("minigame_completed", false) \ + or transition_data.get("minigame_number", -1) != wedge_index \ + or not transition_data.get("first_clear", false): + return + await minigame_layout_opened + create_tween().tween_property(wedge, "modulate:a", 0.6, 0.5) + wedge.right() func _open_minigames_layout(button: LessonButton, lesson_number: int) -> void: if in_minigame_selection or not UserDataManager.student_progression: return - # Gets the correct exercises for the lesson var exercises: Array[int] = Database.get_exercise_for_lesson(lesson_number) - if not exercises or exercises.size() < 3: - Log.error("Gardens: Cannot open minigame layout for lesson %d: expected 3 exercises, got %d" % [lesson_number, exercises.size() if exercises else 0]) + if exercises.is_empty(): + Log.error("Gardens: Cannot open minigame layout for lesson %d: no minigames defined" % lesson_number) return feedback_audio_stream_player2.pitch_scale = 1.1 feedback_audio_stream_player2.play() @@ -714,69 +902,84 @@ func _open_minigames_layout(button: LessonButton, lesson_number: int) -> void: current_button_global_position = button.global_position # Gets the current lesson unlocks var lesson_unlocks: Dictionary = UserDataManager.student_progression.unlocks[current_lesson_number] - var are_minigames_locked: bool = lesson_unlocks["games"][0] == StudentProgression.Status.LOCKED and lesson_unlocks["games"][1] == StudentProgression.Status.LOCKED and lesson_unlocks["games"][2] == StudentProgression.Status.LOCKED # Deactivate the mouse filters on the buttons behind the layout for lesson_button_item: LessonButton in current_garden.get_lesson_buttons(): lesson_button_item.mouse_filter = Control.MOUSE_FILTER_IGNORE - # Background - if are_minigames_locked: - minigame_background_center.modulate = locked_color - else: - minigame_background_center.modulate = current_garden.color - # Lesson button - _handle_lesson_button(current_lesson_number, lesson_unlocks["look_and_learn"] as StudentProgression.Status) - # Minigames - var minigame_layouts: Array[MinigameLayout] = _get_minigame_layouts() - for layout_index: int in minigame_layouts.size(): - _fill_minigame_choice(minigame_layouts[layout_index], exercises[layout_index], lesson_unlocks["games"][layout_index] as StudentProgression.Status, layout_index) + var ll_status: StudentProgression.Status = lesson_unlocks["look_and_learn"] as StudentProgression.Status + background_rect.color = current_garden.wheel_background + _configure_lesson_button_outline(ll_status) + _center_lesson_button_label() + _handle_lesson_button(current_lesson_number, ll_status) + _build_wheel(exercises, lesson_unlocks) # Animations minigame_selection.show() back_button.hide() kalulu_button.hide() line_particles.hide() - minigame_background.size = 300.0 * Vector2.ONE - minigame_background.global_position = current_button_global_position - minigame_background.show() - minigame_background_center.size = 300.0 * Vector2.ONE - minigame_background_center.global_position = current_button_global_position - minigame_background_center.show() - var tween: Tween = create_tween().set_parallel(true).set_ease(Tween.EASE_OUT).set_trans(Tween.TRANS_BACK) - tween.tween_property(minigame_background_center, "scale", (1800.0 / 300.0) * Vector2.ONE, 0.25) - tween.tween_property(minigame_background_center, "global_position", Vector2(380.0, 0), 0.25) - tween.tween_property(minigame_background, "scale", (1800.0 / 300.0) * Vector2.ONE, 0.25) - tween.tween_property(minigame_background, "global_position", Vector2(380.0, 0), 0.25) - tween.chain().tween_property(minigame_selection, "modulate:a", 1.0, 0.25) + var tween: Tween = create_tween().set_ease(Tween.EASE_OUT).set_trans(Tween.TRANS_BACK) + tween.tween_property(minigame_selection, "modulate:a", 1.0, 0.25) await tween.finished minigame_layout_opened.emit() +# Perfectly centers the grapheme label horizontally and drops it just below the +# button center, so it pairs with the movie icon sitting just above. Done in code +# because instanced-scene property overrides on the inherited Label don't survive +# Godot re-saves. This LessonButton is a dedicated wheel instance, so it doesn't +# affect the garden lesson buttons. +func _center_lesson_button_label() -> void: + var label: Label = lesson_button.label + label.anchor_left = 0.0 + label.anchor_top = 0.0 + label.anchor_right = 1.0 + label.anchor_bottom = 1.0 + label.offset_left = 0.0 + label.offset_right = 0.0 + label.offset_top = LESSON_BUTTON_LABEL_TOP_OFFSET + label.offset_bottom = 0.0 + + +func _configure_lesson_button_outline(ll_status: StudentProgression.Status) -> void: + # Gold when L&L is the next-to-play step (UNLOCKED but not yet COMPLETED), + # divider color otherwise. Replaces the separate gold ring we used to draw. + var color: Color = Garden.WHEEL_HIGHLIGHT if ll_status == StudentProgression.Status.UNLOCKED else current_garden.wheel_background + lesson_button_outline.default_color = color + var circle_points: PackedVector2Array = _generate_full_disc_polygon(LESSON_BUTTON_OUTLINE_RADIUS) + if circle_points.size() > 0: + circle_points.append(circle_points[0]) + lesson_button_outline.points = circle_points + + func _handle_lesson_button(lesson_number: int, status: StudentProgression.Status) -> void: lesson_button.text = lessons[lesson_number][0].grapheme + # Center stays the unlocked-wedge color across all states; pair it with the + # garden's dark color so the label and icon stay readable on it. + lesson_button.set_garden_colors( + current_garden.wheel_wedge_unlocked, + current_garden.unlocked_lesson, + current_garden.wheel_wedge_unlocked, + current_garden.unlocked_lesson, + ) lesson_button.set_button_disabled(status == StudentProgression.Status.LOCKED) lesson_button.completed = status == StudentProgression.Status.COMPLETED + # Override the hardcoded gray LessonButton uses when disabled, so the L&L + # center button keeps a uniform background regardless of progression state. + lesson_button.center.modulate = current_garden.wheel_wedge_unlocked lesson_button_particles.emitting = status == StudentProgression.Status.UNLOCKED + lesson_button_movie_icon.modulate = _lesson_button_label_color(status) if status == StudentProgression.Status.COMPLETED: if transition_data and transition_data.has("look_and_learn_completed") and transition_data.look_and_learn_completed: await minigame_layout_opened lesson_button.right() -func _fill_minigame_choice(minigame_layout: MinigameLayout, exercise_type: int, status: StudentProgression.Status, minigame_number: int) -> void: - minigame_layout.icon.texture = minigames_icons[exercise_type-1] - minigame_layout.is_disabled = status == StudentProgression.Status.LOCKED +# Mirrors LessonButton._update_visual_state() so the movie icon tracks the label. +func _lesson_button_label_color(status: StudentProgression.Status) -> Color: + if status == StudentProgression.Status.LOCKED: + return LessonButton.LOCKED_LABEL_COLOR if status == StudentProgression.Status.COMPLETED: - if transition_data and transition_data.has("minigame_completed") and transition_data.minigame_completed and transition_data.has("minigame_number") and transition_data.minigame_number == minigame_number and transition_data.has("first_clear") and transition_data.first_clear: - minigame_layout.self_modulate = unlocked_color - await minigame_layout_opened - create_tween().tween_property(minigame_layout, "self_modulate:a", 0, 0.5) - minigame_layout.right() - else: - minigame_layout.self_modulate.a = 0 - elif status == StudentProgression.Status.LOCKED: - minigame_layout.self_modulate = locked_color - else: - minigame_layout.self_modulate = unlocked_color - minigame_layout.pressed.connect(_on_minigame_button_pressed.bind(exercise_type - 1, minigame_number)) + return lesson_button.completed_label_color + return lesson_button.unlocked_label_color func _get_minigame_scene(scene_index: int) -> PackedScene: @@ -811,26 +1014,18 @@ func _close_minigames_layout() -> void: in_minigame_selection = false feedback_audio_stream_player2.pitch_scale = 0.75 feedback_audio_stream_player2.play() - var tween: Tween = create_tween().set_parallel(true).set_ease(Tween.EASE_OUT).set_trans(Tween.TRANS_BACK) + var tween: Tween = create_tween().set_ease(Tween.EASE_OUT).set_trans(Tween.TRANS_BACK) tween.tween_property(minigame_selection, "modulate:a", 0.0, 0.25) - var other_tween: Tween = tween.chain() - other_tween.tween_property(minigame_background_center, "scale", Vector2.ONE, 0.25) - other_tween.tween_property(minigame_background_center, "global_position", current_button_global_position, 0.25) - other_tween.tween_property(minigame_background, "scale", Vector2.ONE, 0.25) - other_tween.tween_property(minigame_background, "global_position", current_button_global_position, 0.25) await tween.finished if current_button: current_button.show_placeholder(false) minigame_selection.hide() - minigame_background.hide() - minigame_background_center.hide() back_button.show() kalulu_button.show() line_particles.show() for button: LessonButton in current_garden.get_lesson_buttons(): button.mouse_filter = Control.MOUSE_FILTER_STOP - for layout: MinigameLayout in _get_minigame_layouts(): - layout.pressed.disconnect(_on_minigame_button_pressed) + _clear_wheel() #region Lesson setup and path @@ -967,8 +1162,6 @@ func _sync_boss_buttons_container() -> void: if not boss_buttons_container or not garden_parent: return boss_buttons_container.mouse_filter = Control.MOUSE_FILTER_IGNORE - boss_buttons_container.position = Vector2.ZERO - boss_buttons_container.size = scroll_container.size func _clear_boss_buttons() -> void: @@ -1014,7 +1207,6 @@ func _set_up_boss_buttons() -> void: boss_button.set_button_disabled(true) var garden_index: int = _get_garden_index_for_lesson(gate_lesson) boss_button.pressed.connect(_on_boss_button_pressed.bind(gate_lesson, garden_index)) - boss_button.gui_input.connect(_on_boss_button_gui_input) _set_up_final_boss_button() @@ -1041,7 +1233,6 @@ func _set_up_final_boss_button() -> void: boss_button.position = final_boss_center - final_boss_size * 0.5 boss_button.set_button_disabled(false) boss_button.pressed.connect(_on_final_boss_button_pressed.bind(final_lesson_number, last_garden_index)) - boss_button.gui_input.connect(_on_boss_button_gui_input) _update_final_boss_scroll_space(final_boss_center, final_boss_size) @@ -1268,6 +1459,8 @@ func _on_minigame_button_pressed(scene_index: int, minigame_number: int) -> void if not minigame_scene: Log.error("Gardens: Missing minigame scene for index %d" % scene_index) return + # Block a second wedge click during the curtain-close await below. + _lock() feedback_audio_stream_player.play() await (OpeningCurtain as OpeningCurtainClass).close() Minigame.transition_data = { @@ -1308,19 +1501,6 @@ func _on_scroll_container_gui_input(event: InputEvent) -> void: scroll_container.scroll_horizontal -= int(motion_event.relative.x) -func _on_boss_button_gui_input(event: InputEvent) -> void: - # Boss buttons live outside the ScrollContainer, so without forwarding, - # their default STOP mouse filter would swallow scroll events that pass over them. - if event is InputEventMouseButton: - var mb: InputEventMouseButton = event - if mb.button_index == MOUSE_BUTTON_WHEEL_UP or mb.button_index == MOUSE_BUTTON_WHEEL_DOWN \ - or mb.button_index == MOUSE_BUTTON_WHEEL_LEFT or mb.button_index == MOUSE_BUTTON_WHEEL_RIGHT: - _on_scroll_container_gui_input(event) - return - if is_scrolling and event is InputEventMouseMotion: - _on_scroll_container_gui_input(event) - - func _scroll_by_garden(p_direction: int) -> void: var target_scroll: int = scroll_container.scroll_horizontal + p_direction * 200 scroll_container.scroll_horizontal = target_scroll @@ -1357,6 +1537,31 @@ func _on_area_2d_input_event(_viewport: Node, event: InputEvent, _shape_idx: int _close_minigames_layout() +# BackgroundRect spans the wheel screen with mouse_filter=STOP so it absorbs +# every click that doesn't hit the L&L button (which is on top of it). We +# dispatch the click to the matching wedge via point-in-polygon, or close the +# wheel if the click falls outside every wedge. +func _on_background_rect_gui_input(event: InputEvent) -> void: + if is_locked or not in_minigame_selection: + return + if not event.is_action_pressed("left_click"): + return + var click_pos: Vector2 = (event as InputEventMouseButton).position + for child: Node in wedges_container.get_children(): + if child is MinigameWedge: + var wedge: MinigameWedge = child + if Geometry2D.is_point_in_polygon(click_pos, wedge.polygon.polygon): + # Hit on a wedge — enabled ones launch the minigame; disabled + # ones play the wrong-click feedback. Either way the click is + # consumed so the wheel stays open. + if wedge.is_disabled: + wedge.wrong() + else: + wedge.pressed.emit() + return + _close_minigames_layout() + + func _on_kalulu_button_pressed() -> void: kalulu_button.hide() if current_garden.get_progress_ratio() > 0.75: diff --git a/sources/gardens/gardens.tscn b/sources/gardens/gardens.tscn index f0e14cee..d297d1e0 100644 --- a/sources/gardens/gardens.tscn +++ b/sources/gardens/gardens.tscn @@ -2,36 +2,17 @@ [ext_resource type="Script" uid="uid://djolw68efn6r5" path="res://sources/gardens/gardens.gd" id="1_qlsw4"] [ext_resource type="Texture2D" uid="uid://jlwblk7lj7vi" path="res://assets/vfx/fx_10.png" id="3_xbvhu"] -[ext_resource type="Texture2D" uid="uid://cq5wwf7y1msh7" path="res://assets/minigames/crabs/graphic/gauge_icon_crab_full.png" id="5_h8c5w"] -[ext_resource type="Texture2D" uid="uid://di2qcv6jw8wh0" path="res://assets/minigames/parakeets/graphic/gauge_icon_parakeet_full.png" id="6_hekq6"] -[ext_resource type="Texture2D" uid="uid://cq87j1xw4c31r" path="res://assets/minigames/jellyfish/graphic/gauge_icon_jellyfish_full.png" id="6_p30hm"] -[ext_resource type="Texture2D" uid="uid://cffuqacgb1jra" path="res://assets/lesson_screen/branches.png" id="7_axgdc"] -[ext_resource type="Texture2D" uid="uid://c3okdxpi317x5" path="res://assets/minigames/monkeys/graphic/gauge_icon_monkey_full.png" id="9_68su4"] -[ext_resource type="Texture2D" uid="uid://re7qgivb3n5w" path="res://assets/minigames/frog/graphics/gauge_icon_frog_full.png" id="10_5wvwc"] -[ext_resource type="Texture2D" uid="uid://nwbekpbuu472" path="res://assets/minigames/ants/graphics/gauge_icon_ant_full.png" id="12_ohgqx"] -[ext_resource type="Texture2D" uid="uid://bc3e0qths2cvt" path="res://assets/minigames/boss/boss_icon_full.png" id="16_5rwfp"] -[ext_resource type="Texture2D" uid="uid://bmdhpgxmur1vo" path="res://assets/minigames/caterpillar/graphics/gauge_icon_caterpillar_full.png" id="16_prl1o"] [ext_resource type="AudioStream" uid="uid://4bv1hr6r68op" path="res://assets/gardens/ui_transition_right.mp3" id="17_37f6y"] -[ext_resource type="Texture2D" uid="uid://rnqme2j272qf" path="res://assets/minigames/turtles/graphic/gauge_icon_turtle_full.png" id="18_12pcf"] [ext_resource type="AudioStream" uid="uid://bwgrj3quwtbvm" path="res://assets/gardens/ui_transition_left.mp3" id="18_bdar8"] -[ext_resource type="Texture2D" uid="uid://bb00fhnenbml5" path="res://assets/lesson_screen/big_button.png" id="20_elp7t"] -[ext_resource type="Texture2D" uid="uid://dq23np4euf6da" path="res://assets/minigames/penguin/graphic/gauge_icon_penguin_full.png" id="20_ouafq"] -[ext_resource type="Texture2D" uid="uid://dlnklpyefn0m2" path="res://assets/lesson_screen/big_button_center.png" id="21_r0a4h"] -[ext_resource type="Material" uid="uid://dne7hgkrp4tdy" path="res://resources/gardens/minigame_icon_material.tres" id="22_cgp31"] -[ext_resource type="Texture2D" uid="uid://dkomjpclxvmqf" path="res://assets/lesson_screen/top_left.png" id="23_p1d10"] -[ext_resource type="Texture2D" uid="uid://rux5delnabp5" path="res://assets/lesson_screen/top_right.png" id="24_30f83"] [ext_resource type="AudioStream" uid="uid://bgof22p2ofunc" path="res://assets/sfx/ui_yes_button.mp3" id="24_ljadf"] [ext_resource type="PackedScene" uid="uid://delcgui3v0eek" path="res://sources/lesson_screen/lesson_button.tscn" id="25_0ruwb"] [ext_resource type="Texture2D" uid="uid://dx7w01wdyq0b5" path="res://assets/particles/bigstar_x36_15fps.png" id="25_00sy7"] [ext_resource type="AudioStream" uid="uid://vyj4leik80w2" path="res://assets/sfx/swoosh.mp3" id="25_npbuv"] -[ext_resource type="Texture2D" uid="uid://cqhbpt3lk6f15" path="res://assets/lesson_screen/bottom.png" id="25_tyvq6"] [ext_resource type="AudioStream" uid="uid://dlxvbjp63w6wm" path="res://assets/look_and_learn/effect.wav" id="26_5g3l0"] -[ext_resource type="Script" uid="uid://ddew42fnpmsx1" path="res://sources/gardens/minigame_layout.gd" id="28_kvgph"] [ext_resource type="PackedScene" uid="uid://cyoioissvrkj8" path="res://sources/ui/back_button.tscn" id="29_back_button"] [ext_resource type="Texture2D" uid="uid://dj0ygi5q6kbdw" path="res://assets/minigames/minigame_ui/graphic/button_back_normal.png" id="29_cgp31"] [ext_resource type="Texture2D" uid="uid://gmoc5mxxfqin" path="res://assets/minigames/minigame_ui/graphic/button_back_pressed.png" id="30_wnxkf"] [ext_resource type="Texture2D" uid="uid://bnvx1mujmy3vf" path="res://assets/minigames/minigame_ui/graphic/button_back_disabled.png" id="31_b65yw"] -[ext_resource type="PackedScene" uid="uid://cn2rw06pltyiu" path="res://sources/utils/fx/right.tscn" id="33_5y3ye"] [ext_resource type="Texture2D" uid="uid://iw84x6mx8h2g" path="res://assets/minigames/minigame_ui/graphic/button_kalulu_normal.png" id="41_xcos2"] [ext_resource type="Texture2D" uid="uid://ub1dnysbojn8" path="res://assets/minigames/minigame_ui/graphic/button_kalulu_pressed.png" id="42_l35j3"] [ext_resource type="Texture2D" uid="uid://crnxawhf68po3" path="res://assets/minigames/minigame_ui/graphic/button_kalulu_disabled.png" id="43_jfyfk"] @@ -40,6 +21,25 @@ [ext_resource type="Texture2D" uid="uid://rx270y4n7tul" path="res://assets/minigames/parakeets/graphic/cloud_1.png" id="46_cloud1"] [ext_resource type="Texture2D" uid="uid://dphj3hqfnnw4p" path="res://assets/minigames/parakeets/graphic/cloud_2.png" id="47_cloud2"] [ext_resource type="Texture2D" uid="uid://1btgagsporxa" path="res://assets/minigames/parakeets/graphic/cloud_3.png" id="48_cloud3"] +[ext_resource type="Texture2D" uid="uid://d1j23o6nq476v" path="res://assets/gardens/animals/ant_body.png" id="ant_body"] +[ext_resource type="Texture2D" uid="uid://by3xfdin7jrsn" path="res://assets/gardens/animals/ant_face.png" id="ant_face"] +[ext_resource type="Texture2D" uid="uid://b6nrx0dn0h3f2" path="res://assets/gardens/animals/caterpillar_body.png" id="caterpillar_body"] +[ext_resource type="Texture2D" uid="uid://cnihbmks0piwi" path="res://assets/gardens/animals/caterpillar_face.png" id="caterpillar_face"] +[ext_resource type="Texture2D" uid="uid://b2e61oot7ht35" path="res://assets/gardens/animals/crab_body.png" id="crab_body"] +[ext_resource type="Texture2D" uid="uid://ruclqu4dc13u" path="res://assets/gardens/animals/crab_face.png" id="crab_face"] +[ext_resource type="Texture2D" uid="uid://oagcnmxs0xx1" path="res://assets/gardens/animals/frog_body.png" id="frog_body"] +[ext_resource type="Texture2D" uid="uid://b4243242f34g0" path="res://assets/gardens/animals/frog_face.png" id="frog_face"] +[ext_resource type="Texture2D" uid="uid://bb3we2it550v6" path="res://assets/gardens/animals/jellyfish_body.png" id="jellyfish_body"] +[ext_resource type="Texture2D" uid="uid://dppmdv8u3cwl1" path="res://assets/gardens/animals/jellyfish_face.png" id="jellyfish_face"] +[ext_resource type="Texture2D" uid="uid://dr12efhuotfgt" path="res://assets/gardens/animals/monkey_body.png" id="monkey_body"] +[ext_resource type="Texture2D" uid="uid://dc52xvm4y6rir" path="res://assets/gardens/animals/monkey_face.png" id="monkey_face"] +[ext_resource type="Texture2D" uid="uid://c1ml42sp1vqga" path="res://assets/gardens/buttons/movie_icon.png" id="movie_icon"] +[ext_resource type="Texture2D" uid="uid://c2yalimkyunxi" path="res://assets/gardens/animals/parakeet_body.png" id="parakeet_body"] +[ext_resource type="Texture2D" uid="uid://l52tfb7fdrpt" path="res://assets/gardens/animals/parakeet_face.png" id="parakeet_face"] +[ext_resource type="Texture2D" uid="uid://noekve4gjudr" path="res://assets/gardens/animals/penguin_body.png" id="penguin_body"] +[ext_resource type="Texture2D" uid="uid://dbg7mxg3x7vd4" path="res://assets/gardens/animals/penguin_face.png" id="penguin_face"] +[ext_resource type="Texture2D" uid="uid://b7rqldqdft30a" path="res://assets/gardens/animals/turtle_body.png" id="turtle_body"] +[ext_resource type="Texture2D" uid="uid://nu4kpbywwpgn" path="res://assets/gardens/animals/turtle_face.png" id="turtle_face"] [sub_resource type="CanvasItemMaterial" id="CanvasItemMaterial_ey6av"] blend_mode = 1 @@ -123,7 +123,8 @@ grow_vertical = 2 mouse_filter = 2 script = ExtResource("1_qlsw4") minigame_scene_paths = PackedStringArray("res://sources/minigames/jellyfish/jellyfish_minigame.tscn", "res://sources/minigames/crabs/crabs_minigame.tscn", "res://sources/minigames/parakeets/parakeets_minigame.tscn", "res://sources/minigames/monkeys/monkeys_minigame.tscn", "res://sources/minigames/caterpillar/caterpillar_minigame.tscn", "res://sources/minigames/frog/frog_minigame.tscn", "res://sources/minigames/turtles/turtles_minigame.tscn", "res://sources/minigames/ants/ants_minigame.tscn", "res://sources/minigames/penguin/penguin_minigame.tscn", "res://sources/minigames/boss/boss_minigame.tscn") -minigames_icons = Array[Texture]([ExtResource("6_p30hm"), ExtResource("5_h8c5w"), ExtResource("6_hekq6"), ExtResource("9_68su4"), ExtResource("16_prl1o"), ExtResource("10_5wvwc"), ExtResource("18_12pcf"), ExtResource("12_ohgqx"), ExtResource("20_ouafq"), ExtResource("16_5rwfp")]) +minigames_body_icons = Array[Texture]([ExtResource("jellyfish_body"), ExtResource("crab_body"), ExtResource("parakeet_body"), ExtResource("monkey_body"), ExtResource("caterpillar_body"), ExtResource("frog_body"), ExtResource("turtle_body"), ExtResource("ant_body"), ExtResource("penguin_body")]) +minigames_face_icons = Array[Texture]([ExtResource("jellyfish_face"), ExtResource("crab_face"), ExtResource("parakeet_face"), ExtResource("monkey_face"), ExtResource("caterpillar_face"), ExtResource("frog_face"), ExtResource("turtle_face"), ExtResource("ant_face"), ExtResource("penguin_face")]) [node name="RightAudioStreamPlayer" type="AudioStreamPlayer" parent="." unique_id=941811110] stream = ExtResource("17_37f6y") @@ -207,9 +208,8 @@ size_flags_horizontal = 3 custom_minimum_size = Vector2(80, 2.08165e-12) layout_mode = 2 -[node name="BossButtons" type="Control" parent="." unique_id=1176317047] +[node name="BossButtons" type="Control" parent="ScrollContainer" unique_id=1176317047] unique_name_in_owner = true -anchors_preset = 0 mouse_filter = 2 [node name="LockedLine" type="Line2D" parent="." unique_id=1229207154] @@ -237,20 +237,6 @@ volume_db = -5.0 [node name="CanvasLayer" type="CanvasLayer" parent="." unique_id=1456876816] -[node name="MinigameBackgroundCenter" type="TextureRect" parent="CanvasLayer" unique_id=380724732] -unique_name_in_owner = true -visible = false -modulate = Color(0.109804, 0.14902, 0.384314, 1) -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -grow_horizontal = 2 -grow_vertical = 2 -mouse_filter = 2 -texture = ExtResource("21_r0a4h") -expand_mode = 1 -stretch_mode = 5 - [node name="MinigameSelection" type="Control" parent="CanvasLayer" unique_id=613163331] unique_name_in_owner = true visible = false @@ -265,121 +251,17 @@ grow_vertical = 2 pivot_offset = Vector2(1280, 900) mouse_filter = 2 -[node name="MinigameBackground1" type="TextureRect" parent="CanvasLayer/MinigameSelection" unique_id=405469610] +[node name="BackgroundRect" type="ColorRect" parent="CanvasLayer/MinigameSelection" unique_id=380724732] unique_name_in_owner = true -layout_mode = 0 -offset_right = 40.0 -offset_bottom = 40.0 -mouse_filter = 2 -texture = ExtResource("23_p1d10") -script = ExtResource("28_kvgph") - -[node name="TextureRect" type="TextureRect" parent="CanvasLayer/MinigameSelection/MinigameBackground1" unique_id=1383000761] -material = ExtResource("22_cgp31") -custom_minimum_size = Vector2(256, 256) -layout_mode = 0 -offset_left = 704.0 -offset_top = 576.0 -offset_right = 960.0 -offset_bottom = 832.0 -size_flags_horizontal = 4 -size_flags_vertical = 4 -texture = ExtResource("10_5wvwc") -expand_mode = 1 -stretch_mode = 5 - -[node name="RightFX" parent="CanvasLayer/MinigameSelection/MinigameBackground1/TextureRect" unique_id=1031123340 instance=ExtResource("33_5y3ye")] layout_mode = 1 -anchors_preset = 8 -anchor_left = 0.5 -anchor_top = 0.5 -anchor_right = 0.5 -anchor_bottom = 0.5 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 -[node name="Area2D" type="Area2D" parent="CanvasLayer/MinigameSelection/MinigameBackground1" unique_id=802836280] - -[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="CanvasLayer/MinigameSelection/MinigameBackground1/Area2D" unique_id=1785915721] -polygon = PackedVector2Array(1279, 61.6, 1284, 63.6, 1284, 901.8, 1280.8, 905, 1278.5, 905, 556, 1324.3, 554, 1323.2, 554, 1321.5, 513, 1244.5, 513, 1241.3, 489, 1185.4, 489, 1184.3, 467, 1114.3, 467, 1109, 459, 1080.3, 459, 1079, 458.1, 1066, 455, 1061.6, 455, 1060, 446, 1005.2, 446, 1004, 440, 930.1, 440, 865, 441.1, 865, 445.1, 801, 446.3, 801, 460.3, 713, 461.5, 713, 481.5, 638, 482.6, 638, 500.6, 586, 501.7, 586, 513, 562.5, 513, 561.5, 510.8, 557, 513.7, 557, 540.7, 501, 541.9, 501, 570.8, 450, 572.2, 450, 576, 446.2, 574.6, 444.5, 575.7, 442, 577, 442, 587, 429.3, 587, 425.5, 588.8, 422, 590, 422, 639, 357, 640.1, 357, 691.1, 301, 693.1, 301, 745.2, 252, 747.3, 252, 809.3, 204, 811.4, 204, 865.4, 169, 867.5, 169, 957.5, 124, 960.6, 124, 996, 111.6, 996, 111, 1001.3, 107, 1002.9, 107, 1022, 102.5, 1025.2, 99, 1026.8, 99, 1075.7, 85, 1077.2, 85, 1080, 85.5, 1110.7, 77, 1113.2, 77, 1115.6, 77.6, 1118.2, 75, 1119.7, 75, 1182.8, 65, 1184.8, 65, 1185.8, 66, 1204.8, 63, 1207.6, 63, 1209.2, 64.1, 1212.4, 62, 1214.5, 62, 1216.6, 63.1, 1252, 61.1, 1252, 60, 1279, 60) - -[node name="MinigameBackground2" type="TextureRect" parent="CanvasLayer/MinigameSelection" unique_id=1529070021] +[node name="WedgesContainer" type="Control" parent="CanvasLayer/MinigameSelection" unique_id=1010111213] unique_name_in_owner = true -layout_mode = 0 -offset_right = 2560.0 -offset_bottom = 1800.0 -mouse_filter = 2 -texture = ExtResource("24_30f83") -script = ExtResource("28_kvgph") - -[node name="TextureRect" type="TextureRect" parent="CanvasLayer/MinigameSelection/MinigameBackground2" unique_id=373021186] -material = ExtResource("22_cgp31") -custom_minimum_size = Vector2(256, 256) -layout_mode = 0 -offset_left = 1600.0 -offset_top = 576.0 -offset_right = 1856.0 -offset_bottom = 832.0 -size_flags_horizontal = 4 -size_flags_vertical = 4 -texture = ExtResource("10_5wvwc") -expand_mode = 1 -stretch_mode = 5 - -[node name="RightFX" parent="CanvasLayer/MinigameSelection/MinigameBackground2/TextureRect" unique_id=1160342672 instance=ExtResource("33_5y3ye")] -layout_mode = 1 -anchors_preset = 8 -anchor_left = 0.5 -anchor_top = 0.5 -anchor_right = 0.5 -anchor_bottom = 0.5 -grow_horizontal = 2 -grow_vertical = 2 - -[node name="Area2D" type="Area2D" parent="CanvasLayer/MinigameSelection/MinigameBackground2" unique_id=204471632] - -[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="CanvasLayer/MinigameSelection/MinigameBackground2/Area2D" unique_id=1948283316] -polygon = PackedVector2Array(1378, 65.1, 1378, 66.3, 1457, 78.3, 1457, 79.5, 1537, 99.4, 1537, 100.6, 1608, 125.6, 1608, 126.7, 1663, 151.7, 1663, 153, 1671.5, 159, 1673.3, 159, 1682, 161.5, 1682, 162.9, 1750, 202.9, 1750, 204, 1801, 240, 1801, 241.1, 1839, 272.1, 1839, 273.1, 1879, 310.1, 1879, 312.4, 1880.1, 314, 1885, 315.6, 1885, 318.2, 1936, 374.2, 1936, 376.3, 1983, 438.3, 1983, 439.5, 2026, 511.4, 2026, 515.5, 2044, 547.5, 2044, 548.6, 2045.7, 557, 2046.3, 557, 2061, 587.5, 2061, 590.6, 2082, 646.6, 2082, 651, 2082.7, 655, 2087, 661.4, 2087, 663, 2107, 744.8, 2107, 748, 2119, 835.9, 2119, 837, 2121, 923, 2120, 923, 2120, 955, 2118.8, 955, 2111.8, 1029, 2110.7, 1029, 2104.7, 1068, 2103.7, 1068, 2098.7, 1096, 2097.5, 1096, 2088, 1127.3, 2088, 1128.7, 2089.8, 1134, 2087.4, 1134, 2052.4, 1235, 2051.3, 1235, 2017.3, 1306, 2016.3, 1306, 2010.2, 1317, 2008.5, 1317, 2003, 1320.3, 2001, 1319.2, 2001, 1318.1, 1276, 902.2, 1276, 63.9, 1279, 61.9, 1279, 59.9) - -[node name="MinigameBackground3" type="TextureRect" parent="CanvasLayer/MinigameSelection" unique_id=433963142] -unique_name_in_owner = true -layout_mode = 0 -offset_right = 2560.0 -offset_bottom = 1800.0 -mouse_filter = 2 -texture = ExtResource("25_tyvq6") -script = ExtResource("28_kvgph") - -[node name="TextureRect" type="TextureRect" parent="CanvasLayer/MinigameSelection/MinigameBackground3" unique_id=1532680395] -material = ExtResource("22_cgp31") -custom_minimum_size = Vector2(256, 256) -layout_mode = 0 -offset_left = 1152.0 -offset_top = 1248.0 -offset_right = 1408.0 -offset_bottom = 1504.0 -size_flags_horizontal = 4 -size_flags_vertical = 4 -texture = ExtResource("10_5wvwc") -expand_mode = 1 -stretch_mode = 5 - -[node name="RightFX" parent="CanvasLayer/MinigameSelection/MinigameBackground3/TextureRect" unique_id=151107649 instance=ExtResource("33_5y3ye")] -layout_mode = 1 -anchors_preset = 8 -anchor_left = 0.5 -anchor_top = 0.5 -anchor_right = 0.5 -anchor_bottom = 0.5 -grow_horizontal = 2 -grow_vertical = 2 - -[node name="Area2D" type="Area2D" parent="CanvasLayer/MinigameSelection/MinigameBackground3" unique_id=1208926048] - -[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="CanvasLayer/MinigameSelection/MinigameBackground3/Area2D" unique_id=890040811] -polygon = PackedVector2Array(1902, 1250.8, 1902, 1251.9, 2010.3, 1316.1, 2009.5, 1319, 2008.1, 1319, 1986.2, 1358, 1985, 1358, 1974, 1371.7, 1974, 1372.4, 1970.4, 1382, 1969, 1382, 1916, 1451, 1914.9, 1451, 1865.9, 1504, 1863.8, 1504, 1827.8, 1539, 1825.7, 1539, 1791.7, 1568, 1789.6, 1568, 1720.6, 1617, 1717.7, 1617, 1702.7, 1628, 1700.5, 1628, 1633.5, 1664, 1632.6, 1664, 1556.4, 1695, 1555.1, 1695, 1509, 1707.5, 1509, 1708.3, 1498.4, 1713, 1497.4, 1713, 1407.2, 1732, 1406.2, 1732, 1330.1, 1740, 1328, 1740, 1254, 1741, 1254, 1739.9, 1184, 1735.9, 1184, 1734.8, 1112, 1724.7, 1112, 1723.5, 1094.7, 1718, 1085, 1719.3, 1085, 1717.4, 1072.6, 1713, 1065, 1714.4, 1065, 1712.4, 1030.7, 1701, 1030.1, 1701, 1024, 1702.6, 1024, 1700.5, 1009, 1696.5, 1009, 1695, 1006.3, 1693, 994, 1691.8, 994, 1690.4, 969, 1681.4, 969, 1680.1, 964.3, 1677, 962.8, 1677, 961.5, 1678.4, 959, 1677.3, 959, 1676.4, 924, 1662.4, 924, 1661.3, 875, 1637.2, 875, 1636.1, 826, 1608.2, 826, 1607.1, 781, 1577.1, 781, 1576, 738, 1543, 738, 1541.9, 695, 1503.9, 695, 1502.8, 661, 1468.8, 661, 1466.7, 615, 1414.8, 615, 1412.7, 582, 1368.7, 582, 1365.6, 553.7, 1321.1, 554.8, 1319, 556, 1319, 560, 1314, 562.5, 1314, 619.4, 1279, 621.5, 1279, 1276, 897.9, 1276, 894.6) - -[node name="Branches" type="TextureRect" parent="CanvasLayer/MinigameSelection" unique_id=301987876] layout_mode = 1 anchors_preset = 15 anchor_right = 1.0 @@ -387,10 +269,16 @@ anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 mouse_filter = 2 -texture = ExtResource("7_axgdc") + +[node name="LessonButtonOutline" type="Line2D" parent="CanvasLayer/MinigameSelection" unique_id=1010111290] +unique_name_in_owner = true +z_index = 11 +width = 12.0 +joint_mode = 2 [node name="LessonButton" parent="CanvasLayer/MinigameSelection" unique_id=843010913 instance=ExtResource("25_0ruwb")] unique_name_in_owner = true +z_index = 10 layout_mode = 1 anchors_preset = 8 anchor_left = 0.5 @@ -404,6 +292,25 @@ offset_bottom = 192.0 grow_horizontal = 2 grow_vertical = 2 +[node name="MovieIcon" type="TextureRect" parent="CanvasLayer/MinigameSelection/LessonButton" unique_id=1010111291] +unique_name_in_owner = true +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -42.0 +offset_top = -94.0 +offset_right = 42.0 +offset_bottom = -10.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 +texture = ExtResource("movie_icon") +expand_mode = 1 +stretch_mode = 6 + [node name="LessonButtonParticles" type="GPUParticles2D" parent="CanvasLayer/MinigameSelection/LessonButton" unique_id=1605639976] unique_name_in_owner = true z_index = 1 @@ -414,21 +321,6 @@ emitting = false texture = ExtResource("25_00sy7") process_material = SubResource("ParticleProcessMaterial_4gqpn") -[node name="MinigameBackground" type="TextureRect" parent="CanvasLayer" unique_id=2050203805] -unique_name_in_owner = true -visible = false -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -grow_horizontal = 2 -grow_vertical = 2 -size_flags_horizontal = 4 -size_flags_vertical = 4 -mouse_filter = 2 -texture = ExtResource("20_elp7t") -expand_mode = 1 -stretch_mode = 5 - [node name="BackButton" parent="CanvasLayer" unique_id=1838227918 instance=ExtResource("29_back_button")] custom_minimum_size = Vector2(275, 275) offset_left = 50.0 @@ -513,6 +405,7 @@ texture = ExtResource("47_cloud2") texture = ExtResource("48_cloud3") [connection signal="gui_input" from="ScrollContainer" to="." method="_on_scroll_container_gui_input"] +[connection signal="gui_input" from="CanvasLayer/MinigameSelection/BackgroundRect" to="." method="_on_background_rect_gui_input"] [connection signal="pressed" from="CanvasLayer/MinigameSelection/LessonButton" to="." method="_on_lesson_button_pressed"] [connection signal="button_down" from="CanvasLayer/BackButton" to="." method="_on_back_button_button_down"] [connection signal="button_up" from="CanvasLayer/BackButton" to="." method="_on_back_button_button_up"] diff --git a/sources/gardens/minigame_layout.gd b/sources/gardens/minigame_layout.gd deleted file mode 100644 index b5ee2bcb..00000000 --- a/sources/gardens/minigame_layout.gd +++ /dev/null @@ -1,23 +0,0 @@ -class_name MinigameLayout -extends TextureRect - -signal pressed() - -var is_disabled: bool = false - -@onready var icon: TextureRect = $TextureRect -@onready var area: Area2D = $Area2D -@onready var right_fx: RightFX = $TextureRect/RightFX - - -func _ready() -> void: - area.connect("input_event", _on_click) - - -func _on_click(_viewport: Node, event: InputEvent, _shape_idx: int) -> void: - if event.is_action_pressed("left_click") and not is_disabled: - pressed.emit() - - -func right() -> void: - right_fx.play() diff --git a/sources/gardens/minigame_layout.gd.uid b/sources/gardens/minigame_layout.gd.uid deleted file mode 100644 index 029ed474..00000000 --- a/sources/gardens/minigame_layout.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://ddew42fnpmsx1 diff --git a/sources/gardens/minigame_wedge.gd b/sources/gardens/minigame_wedge.gd new file mode 100644 index 00000000..6ac03ff9 --- /dev/null +++ b/sources/gardens/minigame_wedge.gd @@ -0,0 +1,61 @@ +class_name MinigameWedge +extends Control + +signal pressed() + +const ICON_SIZE: Vector2 = Vector2(256, 256) +const GRAYSCALE_SHADER: Shader = preload("res://resources/shaders/grayscale.gdshader") + +var is_disabled: bool = false + +@onready var polygon: Polygon2D = $Polygon2D +@onready var area: Area2D = $Area2D +@onready var collision: CollisionPolygon2D = $Area2D/CollisionPolygon2D +@onready var icon_body_rect: TextureRect = $IconBodyRect +@onready var icon_face_rect: TextureRect = $IconFaceRect +@onready var right_fx: RightFX = $IconFaceRect/RightFX +@onready var wrong_fx: WrongFX = $IconFaceRect/WrongFX + + +func _ready() -> void: + area.input_event.connect(_on_click) + + +func configure( + wedge_polygon: PackedVector2Array, + icon_center: Vector2, + body_texture: Texture, + face_texture: Texture, + wedge_color: Color, + body_color: Color, + is_locked: bool, +) -> void: + polygon.polygon = wedge_polygon + polygon.color = wedge_color + collision.polygon = wedge_polygon + var icon_origin: Vector2 = icon_center - ICON_SIZE * 0.5 + icon_body_rect.position = icon_origin + icon_body_rect.texture = body_texture + icon_body_rect.modulate = body_color + icon_face_rect.position = icon_origin + icon_face_rect.texture = face_texture + # Desaturate the face when locked. + if is_locked: + var grayscale: ShaderMaterial = ShaderMaterial.new() + grayscale.shader = GRAYSCALE_SHADER + icon_face_rect.material = grayscale + else: + icon_face_rect.material = null + + +func right() -> void: + right_fx.play() + + +func wrong() -> void: + wrong_fx.play() + + +func _on_click(_viewport: Node, event: InputEvent, _shape_idx: int) -> void: + if event.is_action_pressed("left_click") and not is_disabled: + pressed.emit() diff --git a/sources/gardens/minigame_wedge.gd.uid b/sources/gardens/minigame_wedge.gd.uid new file mode 100644 index 00000000..8d05e1ef --- /dev/null +++ b/sources/gardens/minigame_wedge.gd.uid @@ -0,0 +1 @@ +uid://dh555xp8ebnb8 diff --git a/sources/gardens/minigame_wedge.tscn b/sources/gardens/minigame_wedge.tscn new file mode 100644 index 00000000..ffc06c07 --- /dev/null +++ b/sources/gardens/minigame_wedge.tscn @@ -0,0 +1,63 @@ +[gd_scene format=3 uid="uid://b1u0xkalulu01"] + +[ext_resource type="Script" uid="uid://dh555xp8ebnb8" path="res://sources/gardens/minigame_wedge.gd" id="1_wedge"] +[ext_resource type="PackedScene" uid="uid://cn2rw06pltyiu" path="res://sources/utils/fx/right.tscn" id="3_rightfx"] +[ext_resource type="PackedScene" uid="uid://dlmbxcgiv8tpr" path="res://sources/utils/fx/wrong.tscn" id="4_wrongfx"] + +[node name="MinigameWedge" type="Control" unique_id=1762693146] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 +script = ExtResource("1_wedge") + +[node name="Polygon2D" type="Polygon2D" parent="." unique_id=1912619179] + +[node name="Area2D" type="Area2D" parent="." unique_id=870297940] + +[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="Area2D" unique_id=1114106226] + +[node name="IconBodyRect" type="TextureRect" parent="." unique_id=2053672816] +custom_minimum_size = Vector2(256, 256) +layout_mode = 0 +offset_right = 256.0 +offset_bottom = 256.0 +size_flags_horizontal = 4 +size_flags_vertical = 4 +mouse_filter = 2 +expand_mode = 1 +stretch_mode = 5 + +[node name="IconFaceRect" type="TextureRect" parent="." unique_id=2053672817] +custom_minimum_size = Vector2(256, 256) +layout_mode = 0 +offset_right = 256.0 +offset_bottom = 256.0 +size_flags_horizontal = 4 +size_flags_vertical = 4 +mouse_filter = 2 +expand_mode = 1 +stretch_mode = 5 + +[node name="RightFX" parent="IconFaceRect" unique_id=333957231 instance=ExtResource("3_rightfx")] +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="WrongFX" parent="IconFaceRect" unique_id=333957232 instance=ExtResource("4_wrongfx")] +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +grow_horizontal = 2 +grow_vertical = 2 diff --git a/sources/utils/autoloads/database.gd b/sources/utils/autoloads/database.gd index 3e635b07..224f5ad7 100644 --- a/sources/utils/autoloads/database.gd +++ b/sources/utils/autoloads/database.gd @@ -104,13 +104,13 @@ func get_exercise_for_lesson(lesson_nb: int) -> Array[int]: INNER JOIN Lessons ON Lessons.ID = LessonsExercises.LessonID WHERE LessonNB == " + str(lesson_nb) db.query(query) - + # Exercise* == 0 means "no minigame in this slot": drop zeros so size = count. var result: Array[int] = [] for element: Dictionary in db.query_result: - result.append(element.Exercise1) - result.append(element.Exercise2) - result.append(element.Exercise3) - + for column: String in ["Exercise1", "Exercise2", "Exercise3"]: + var exercise_id: int = element[column] as int + if exercise_id > 0: + result.append(exercise_id) return result From fe696c8b20fc5af9c20b6a699e12e92c881fcd94 Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Sat, 6 Jun 2026 17:20:47 +0200 Subject: [PATCH 089/111] debug lessons numbers different from 3 --- resources/user/student_progression.gd | 36 ++++++++++-- sources/menus/settings/lesson_unlock.gd | 77 ++++++++++++------------- 2 files changed, 69 insertions(+), 44 deletions(-) diff --git a/resources/user/student_progression.gd b/resources/user/student_progression.gd index 64b4bf26..67736be5 100644 --- a/resources/user/student_progression.gd +++ b/resources/user/student_progression.gd @@ -55,6 +55,25 @@ static func _make_zero_durations(minigame_count: int) -> PackedInt32Array: return durations +# Resizes a games status array to target_size, keeping the existing statuses for +# the slots that remain (trim surplus / pad new slots with LOCKED). Used when a +# lesson's minigame count changes so old saves don't lose progress on resize. +static func _resize_games_array(games: Array, target_size: int) -> Array: + var resized: Array = [] + for index: int in range(target_size): + resized.append(games[index] if index < games.size() else Status.LOCKED) + return resized + + +# Same idea for the duration metrics: keep recorded times for remaining slots. +static func _resize_durations(durations: PackedInt32Array, target_size: int) -> PackedInt32Array: + var resized: PackedInt32Array = PackedInt32Array() + resized.resize(target_size) + for index: int in range(mini(target_size, durations.size())): + resized[index] = durations[index] + return resized + + # Make sure the unlocks are correct func init_unlocks() -> void: if not unlocks: @@ -111,17 +130,24 @@ func ensure_data_integrity(data: Dictionary[int, Dictionary]) -> Dictionary: if not garden.has("total_duration"): garden["total_duration"] = _make_zero_durations(minigame_count) - # Check array "games" - if typeof(garden["games"]) != TYPE_ARRAY or (garden["games"] as Array).size() != minigame_count: + # Check array "games": a corrupt (non-array) value is reset, but a size + # mismatch (the lesson's minigame count changed) is resized in place so we + # keep existing progress for the slots that remain instead of wiping it. + if typeof(garden["games"]) != TYPE_ARRAY: if not is_init: Log.warn("StudentProgression: Garden %d: invalid format for 'games' → reset." % index) garden["games"] = _make_locked_games_array(minigame_count) + elif (garden["games"] as Array).size() != minigame_count: + if not is_init: + Log.warn("StudentProgression: Garden %d: 'games' resized from %d to %d, progress preserved." % [index, (garden["games"] as Array).size(), minigame_count]) + garden["games"] = _resize_games_array(garden["games"] as Array, minigame_count) - # Make sure duration arrays match the minigame count + # Keep duration metrics aligned with the minigame count, preserving the + # recorded times for the slots that remain. if (garden["last_duration"] as PackedInt32Array).size() != minigame_count: - garden["last_duration"] = _make_zero_durations(minigame_count) + garden["last_duration"] = _resize_durations(garden["last_duration"] as PackedInt32Array, minigame_count) if (garden["total_duration"] as PackedInt32Array).size() != minigame_count: - garden["total_duration"] = _make_zero_durations(minigame_count) + garden["total_duration"] = _resize_durations(garden["total_duration"] as PackedInt32Array, minigame_count) # Check value outside of possible enum values for game_index: int in range((garden["games"] as Array).size()): diff --git a/sources/menus/settings/lesson_unlock.gd b/sources/menus/settings/lesson_unlock.gd index a2d2da6d..82d8b02d 100644 --- a/sources/menus/settings/lesson_unlock.gd +++ b/sources/menus/settings/lesson_unlock.gd @@ -23,7 +23,7 @@ func _ready() -> void: exercise_option_button_1.add_item(tr(status)) exercise_option_button_2.add_item(tr(status)) exercise_option_button_3.add_item(tr(status)) - + reload() @@ -45,77 +45,76 @@ func reload() -> void: func _set_lesson_number(value: int) -> void: lesson_number = value - + if not lesson_label: return - + lesson_label.text = str(lesson_number) - + look_and_learn_option_button.select(unlocks[lesson_number]["look_and_learn"] as int) - exercise_option_button_1.select(unlocks[lesson_number]["games"][0] as int) - exercise_option_button_2.select(unlocks[lesson_number]["games"][1] as int) - exercise_option_button_3.select(unlocks[lesson_number]["games"][2] as int) + # A lesson can have 1–3 minigames, so only populate the buttons that map to a + # real game and disable the surplus ones (the grid keeps all three cells). + var games: Array = unlocks[lesson_number]["games"] + var exercise_buttons: Array[OptionButton] = [exercise_option_button_1, exercise_option_button_2, exercise_option_button_3] + for index: int in range(exercise_buttons.size()): + var button: OptionButton = exercise_buttons[index] + if index < games.size(): + button.disabled = false + button.select(games[index] as int) + else: + button.disabled = true + button.select(-1) func _set_lesson_gps(value: String) -> void: lesson_gps = value if not gps_label: return - + gps_label.text = value func _on_look_and_learn_option_button_item_selected(index: int) -> void: unlocks[lesson_number]["look_and_learn"] = index - + if index == StudentProgression.Status.LOCKED: if lesson_number == 1: unlocks[lesson_number]["look_and_learn"] = StudentProgression.Status.UNLOCKED else: unlocks[lesson_number - 1]["look_and_learn"] = StudentProgression.Status.UNLOCKED - unlocks[lesson_number - 1]["games"][0] = StudentProgression.Status.LOCKED - unlocks[lesson_number - 1]["games"][1] = StudentProgression.Status.LOCKED - unlocks[lesson_number - 1]["games"][2] = StudentProgression.Status.LOCKED - - unlocks[lesson_number]["games"][0] = StudentProgression.Status.LOCKED - unlocks[lesson_number]["games"][1] = StudentProgression.Status.LOCKED - unlocks[lesson_number]["games"][2] = StudentProgression.Status.LOCKED - + _set_lesson_games(lesson_number - 1, StudentProgression.Status.LOCKED) + + _set_lesson_games(lesson_number, StudentProgression.Status.LOCKED) + for lesson: int in unlocks.keys(): if lesson > lesson_number: unlocks[lesson]["look_and_learn"] = StudentProgression.Status.LOCKED - unlocks[lesson]["games"][0] = StudentProgression.Status.LOCKED - unlocks[lesson]["games"][1] = StudentProgression.Status.LOCKED - unlocks[lesson]["games"][2] = StudentProgression.Status.LOCKED - + _set_lesson_games(lesson, StudentProgression.Status.LOCKED) + elif index == StudentProgression.Status.UNLOCKED: - unlocks[lesson_number]["games"][0] = StudentProgression.Status.LOCKED - unlocks[lesson_number]["games"][1] = StudentProgression.Status.LOCKED - unlocks[lesson_number]["games"][2] = StudentProgression.Status.LOCKED + _set_lesson_games(lesson_number, StudentProgression.Status.LOCKED) for lesson: int in unlocks.keys(): if lesson < lesson_number: unlocks[lesson]["look_and_learn"] = StudentProgression.Status.COMPLETED - unlocks[lesson]["games"][0] = StudentProgression.Status.COMPLETED - unlocks[lesson]["games"][1] = StudentProgression.Status.COMPLETED - unlocks[lesson]["games"][2] = StudentProgression.Status.COMPLETED + _set_lesson_games(lesson, StudentProgression.Status.COMPLETED) elif lesson > lesson_number: unlocks[lesson]["look_and_learn"] = StudentProgression.Status.LOCKED - unlocks[lesson]["games"][0] = StudentProgression.Status.LOCKED - unlocks[lesson]["games"][1] = StudentProgression.Status.LOCKED - unlocks[lesson]["games"][2] = StudentProgression.Status.LOCKED + _set_lesson_games(lesson, StudentProgression.Status.LOCKED) elif index == StudentProgression.Status.COMPLETED: - unlocks[lesson_number]["games"][0] = StudentProgression.Status.UNLOCKED - unlocks[lesson_number]["games"][1] = StudentProgression.Status.UNLOCKED - unlocks[lesson_number]["games"][2] = StudentProgression.Status.UNLOCKED + _set_lesson_games(lesson_number, StudentProgression.Status.UNLOCKED) for lesson: int in unlocks.keys(): if lesson < lesson_number: unlocks[lesson]["look_and_learn"] = StudentProgression.Status.COMPLETED - unlocks[lesson]["games"][0] = StudentProgression.Status.COMPLETED - unlocks[lesson]["games"][1] = StudentProgression.Status.COMPLETED - unlocks[lesson]["games"][2] = StudentProgression.Status.COMPLETED + _set_lesson_games(lesson, StudentProgression.Status.COMPLETED) elif lesson > lesson_number: unlocks[lesson]["look_and_learn"] = StudentProgression.Status.LOCKED - unlocks[lesson]["games"][0] = StudentProgression.Status.LOCKED - unlocks[lesson]["games"][1] = StudentProgression.Status.LOCKED - unlocks[lesson]["games"][2] = StudentProgression.Status.LOCKED + _set_lesson_games(lesson, StudentProgression.Status.LOCKED) unlocks_changed.emit() + + +# Sets every minigame of a lesson to the same status, respecting the lesson's +# actual minigame count (1–3) rather than assuming a fixed three. +func _set_lesson_games(lesson: int, status: StudentProgression.Status) -> void: + var games: Array = unlocks[lesson]["games"] + for game_index: int in range(games.size()): + games[game_index] = status From fcd84fdb356948cbf35a20d091dbc2f6c0e3c6e0 Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Sat, 6 Jun 2026 18:11:45 +0200 Subject: [PATCH 090/111] Protect against out of bounds for minigame index --- sources/gardens/gardens.gd | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/sources/gardens/gardens.gd b/sources/gardens/gardens.gd index 9bfd1d66..71deb8cd 100644 --- a/sources/gardens/gardens.gd +++ b/sources/gardens/gardens.gd @@ -784,6 +784,13 @@ func _build_wheel(exercises: Array[int], lesson_unlocks: Dictionary) -> void: var layout: Dictionary = _get_wedge_layout(minigame_count, wedge_index) var exercise_type: int = exercises[wedge_index] var icon_index: int = exercise_type - 1 + # Guard against exercise types with no matching wheel icon (e.g. the + # removed fish minigame, type 10): fall back to the highest available one + # so we never index past the icon arrays. + var max_icon_index: int = minigames_body_icons.size() - 1 + if icon_index < 0 or icon_index > max_icon_index: + Log.error("Gardens: Exercise type %d has no wheel icon (%d available); using the highest available minigame instead." % [exercise_type, minigames_body_icons.size()]) + icon_index = clampi(icon_index, 0, max_icon_index) var status: StudentProgression.Status = lesson_unlocks["games"][wedge_index] as StudentProgression.Status var wedge: MinigameWedge = MINIGAME_WEDGE_SCENE.instantiate() wedges_container.add_child(wedge) From 5fffa870b10cfcd1f6d4713b7d2b938a1c23e762 Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Sat, 6 Jun 2026 19:23:19 +0200 Subject: [PATCH 091/111] Change version number --- project.godot | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project.godot b/project.godot index 5c8d7628..3959e403 100644 --- a/project.godot +++ b/project.godot @@ -16,7 +16,7 @@ compatibility/default_parent_skeleton_in_mesh_instance_3d=true config/name="Kalulu" config/description="Open-source educational app to teach reading skills using Godot, based on the graphemic method, designed for children aged 5+" -config/version="3.0.0" +config/version="3.0.1" run/main_scene="res://sources/menus/splash_screen/splash_screen.tscn" config/features=PackedStringArray("4.6", "Forward Plus") boot_splash/bg_color=Color(0.141176, 0.141176, 0.141176, 1) From cb2edd07de152f1bc8fe0f0a26642235f93af1d3 Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Mon, 8 Jun 2026 17:51:11 +0200 Subject: [PATCH 092/111] Export settings --- export_presets.cfg | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/export_presets.cfg b/export_presets.cfg index 2ab78544..09cab038 100644 --- a/export_presets.cfg +++ b/export_presets.cfg @@ -8,7 +8,7 @@ custom_features="" export_filter="all_resources" include_filter="" exclude_filter="" -export_path="../Export/android/kalulu_app.aab" +export_path="../Export/kalulu_app.aab" patches=PackedStringArray() patch_delta_encoding=false patch_delta_compression_level_zstd=19 @@ -38,7 +38,7 @@ architectures/armeabi-v7a=false architectures/arm64-v8a=true architectures/x86=false architectures/x86_64=false -version/code=77 +version/code=78 version/name="" package/unique_name="org.godotengine.kalulu" package/name="Kalulu" @@ -264,7 +264,7 @@ architectures/armeabi-v7a=false architectures/arm64-v8a=true architectures/x86=false architectures/x86_64=false -version/code=77 +version/code=78 version/name="" package/unique_name="org.godotengine.kalulu" package/name="Kalulu" @@ -490,7 +490,7 @@ architectures/armeabi-v7a=true architectures/arm64-v8a=false architectures/x86=false architectures/x86_64=false -version/code=77 +version/code=78 version/name="" package/unique_name="org.godotengine.kalulu" package/name="Kalulu" @@ -805,7 +805,7 @@ custom_features="" export_filter="all_resources" include_filter="" exclude_filter="" -export_path="../Export/macOS/Kalulu_macOS.dmg" +export_path="../Export/macos/Kalulu_macOS.dmg" patches=PackedStringArray() patch_delta_encoding=false patch_delta_compression_level_zstd=19 @@ -1072,7 +1072,7 @@ custom_features="" export_filter="all_resources" include_filter="" exclude_filter="" -export_path="../Export/IOS/KaluluApp.ipa" +export_path="../Export/ios/KaluluApp.ipa" patches=PackedStringArray() patch_delta_encoding=false patch_delta_compression_level_zstd=19 From 94c841bf7ad25dd8f7ac889af20d86c1f2a4f3c7 Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Mon, 8 Jun 2026 18:11:48 +0200 Subject: [PATCH 093/111] Debug device selection list too long --- .../menus/device_selection/device_selection.gd | 2 +- .../device_selection/device_selection.tscn | 17 +++++++++++------ 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/sources/menus/device_selection/device_selection.gd b/sources/menus/device_selection/device_selection.gd index a8f23ddf..d2ed845c 100644 --- a/sources/menus/device_selection/device_selection.gd +++ b/sources/menus/device_selection/device_selection.gd @@ -20,7 +20,7 @@ func _refresh() -> void: for device: int in UserDataManager.teacher_settings.students.keys(): var button: DeviceButton = DEVICE_BUTTON_SCENE.instantiate() button.number = device - button.background_color = Globals.device_colors[device-1 % Globals.device_colors.size()] + button.background_color = Globals.device_colors[(device - 1) % Globals.device_colors.size()] container.add_child(button) button.pressed.connect(_device_button_pressed.bind(device)) OpeningCurtain.open() diff --git a/sources/menus/device_selection/device_selection.tscn b/sources/menus/device_selection/device_selection.tscn index 0ecac0c2..1b9bdfd3 100644 --- a/sources/menus/device_selection/device_selection.tscn +++ b/sources/menus/device_selection/device_selection.tscn @@ -17,15 +17,14 @@ layout_mode = 1 [node name="PanelContainer" type="PanelContainer" parent="." unique_id=268912689] layout_mode = 1 -anchors_preset = 8 +anchors_preset = 14 anchor_left = 0.5 -anchor_top = 0.5 anchor_right = 0.5 -anchor_bottom = 0.5 +anchor_bottom = 1.0 offset_left = -332.5 -offset_top = -1.0 +offset_top = 50.0 offset_right = 332.5 -offset_bottom = 1.0 +offset_bottom = -50.0 grow_horizontal = 2 grow_vertical = 2 theme_type_variation = &"PanelKaluluBig" @@ -48,7 +47,13 @@ text = "PICK_YOUR_DEVICE" horizontal_alignment = 1 vertical_alignment = 1 -[node name="GridContainer" type="GridContainer" parent="PanelContainer/MarginContainer/VBoxContainer" unique_id=505066062] +[node name="ScrollContainer" type="ScrollContainer" parent="PanelContainer/MarginContainer/VBoxContainer"] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 +horizontal_scroll_mode = 0 + +[node name="GridContainer" type="GridContainer" parent="PanelContainer/MarginContainer/VBoxContainer/ScrollContainer" unique_id=505066062] unique_name_in_owner = true layout_mode = 2 size_flags_horizontal = 4 From 07770f0a01c4c39d71b6fb8d7ef2c844a43c06bb Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Tue, 9 Jun 2026 09:40:12 +0200 Subject: [PATCH 094/111] Prevent crash when launching frog minigame --- sources/minigames/frog/frog_minigame.gd | 48 +++++++++++++++++++++-- sources/minigames/frog/frog_minigame.tscn | 15 +------ sources/minigames/frog/lilypad_track.gd | 8 +++- 3 files changed, 51 insertions(+), 20 deletions(-) diff --git a/sources/minigames/frog/frog_minigame.gd b/sources/minigames/frog/frog_minigame.gd index cc473084..1aa8b037 100644 --- a/sources/minigames/frog/frog_minigame.gd +++ b/sources/minigames/frog/frog_minigame.gd @@ -1,7 +1,9 @@ class_name FrogMinigame extends WordsMinigame -const LILYPAD_TRACK_SCENE: PackedScene = preload("res://sources/minigames/frog/lilypad_track.tscn") +const RIVER_SCENE_PATH: String = "res://sources/minigames/frog/river.tscn" +const FROG_SCENE_PATH: String = "res://sources/minigames/frog/frog.tscn" +const LILYPAD_TRACK_SCENE_PATH: String = "res://sources/minigames/frog/lilypad_track.tscn" var difficulty_settings: Array[DifficultySettings] = [ DifficultySettings.new(0.75, 100., 200.), @@ -10,14 +12,52 @@ var difficulty_settings: Array[DifficultySettings] = [ DifficultySettings.new(0.25, 250., 350.), DifficultySettings.new(0.25, 300., 400.) ] +var river: River +var frog: Frog +var lilypad_track_scene: PackedScene @onready var start: Control = %Start @onready var end: Control = %End @onready var frog_spawn_point: Control = %FrogSpawnPoint @onready var frog_despawn_point: Control = %FrogDespawnPoint -@onready var river: River = $GameRoot/Background/River @onready var lilypad_tracks_container: HBoxContainer = %LilypadTracksContainer -@onready var frog: Frog = %Frog + + +func _setup_minigame() -> void: + super() + await _instantiate_subscenes() + + +func _instantiate_subscenes() -> void: + var background_node: Control = $GameRoot/Background + var game_root_node: Control = $GameRoot + + await get_tree().process_frame + if not is_inside_tree(): + return + + river = (load(RIVER_SCENE_PATH) as PackedScene).instantiate() + river.name = "River" + background_node.add_child(river) + background_node.move_child(river, 0) + + await get_tree().process_frame + if not is_inside_tree(): + return + + frog = (load(FROG_SCENE_PATH) as PackedScene).instantiate() + frog.name = "Frog" + frog.offset_left = 360.0 + frog.offset_top = 900.0 + frog.offset_right = 360.0 + frog.offset_bottom = 900.0 + game_root_node.add_child(frog) + + await get_tree().process_frame + if not is_inside_tree(): + return + + lilypad_track_scene = load(LILYPAD_TRACK_SCENE_PATH) as PackedScene func _setup_word_progression() -> void: @@ -65,7 +105,7 @@ func _create_tracks() -> void: var current_word: Dictionary = _get_current_stimulus() var current_distractors: Array = _get_current_distractors() for index: int in range((current_word.GPs as Array).size()): - var track: LilypadTrack = LILYPAD_TRACK_SCENE.instantiate() + var track: LilypadTrack = lilypad_track_scene.instantiate() lilypad_tracks_container.add_child(track) track.difficulty_settings = difficulty_settings[difficulty] track.gp = current_word.GPs[index] diff --git a/sources/minigames/frog/frog_minigame.tscn b/sources/minigames/frog/frog_minigame.tscn index 524feb9e..74c6229d 100644 --- a/sources/minigames/frog/frog_minigame.tscn +++ b/sources/minigames/frog/frog_minigame.tscn @@ -4,9 +4,7 @@ [ext_resource type="Script" uid="uid://b7q0v031ffg1v" path="res://sources/minigames/frog/frog_minigame.gd" id="2_0xg3r"] [ext_resource type="Texture2D" uid="uid://jvpu77isfi5b" path="res://assets/minigames/frog/graphics/gauge_icon_frog_empty.png" id="2_e38i1"] [ext_resource type="Texture2D" uid="uid://re7qgivb3n5w" path="res://assets/minigames/frog/graphics/gauge_icon_frog_full.png" id="3_vjlmb"] -[ext_resource type="PackedScene" uid="uid://sumrd1i3g6f7" path="res://sources/minigames/frog/river.tscn" id="5_3fy8q"] [ext_resource type="Texture2D" uid="uid://bgi4vveige3qv" path="res://assets/minigames/frog/graphics/background.png" id="6_t6p6q"] -[ext_resource type="PackedScene" uid="uid://bloyucpsbvpx8" path="res://sources/minigames/frog/frog.tscn" id="13_o6mls"] [node name="FrogMinigame" unique_id=37863016 instance=ExtResource("1_ng5er")] script = ExtResource("2_0xg3r") @@ -32,10 +30,7 @@ grow_horizontal = 2 grow_vertical = 2 mouse_filter = 2 -[node name="River" parent="GameRoot/Background" index="0" unique_id=1451318535 instance=ExtResource("5_3fy8q")] -layout_mode = 1 - -[node name="background" type="TextureRect" parent="GameRoot/Background" index="1" unique_id=1762725401] +[node name="background" type="TextureRect" parent="GameRoot/Background" index="0" unique_id=1762725401] layout_mode = 1 anchors_preset = 11 anchor_left = 1.0 @@ -99,11 +94,3 @@ offset_bottom = 250.0 grow_horizontal = 2 grow_vertical = 2 alignment = 1 - -[node name="Frog" parent="GameRoot" parent_id_path=PackedInt32Array(1053321881) index="3" unique_id=1044684229 instance=ExtResource("13_o6mls")] -unique_name_in_owner = true -layout_mode = 0 -offset_left = 360.0 -offset_top = 900.0 -offset_right = 360.0 -offset_bottom = 900.0 diff --git a/sources/minigames/frog/lilypad_track.gd b/sources/minigames/frog/lilypad_track.gd index 6077624a..83fc810e 100644 --- a/sources/minigames/frog/lilypad_track.gd +++ b/sources/minigames/frog/lilypad_track.gd @@ -3,7 +3,9 @@ extends Control signal lilypad_in_center(lilypad: Lilypad) -const LILYPAD_SCENE: PackedScene = preload("res://sources/minigames/frog/lilypad.tscn") +const LILYPAD_SCENE_PATH: String = "res://sources/minigames/frog/lilypad.tscn" + +static var _lilypad_scene: PackedScene var top_to_bottom: bool = false var is_stopped: bool = false @@ -79,7 +81,9 @@ func pick_distractor() -> Dictionary: #region Lilypads func _spawn_lilypad() -> void: - var lilypad: Lilypad = LILYPAD_SCENE.instantiate() + if not _lilypad_scene: + _lilypad_scene = load(LILYPAD_SCENE_PATH) as PackedScene + var lilypad: Lilypad = _lilypad_scene.instantiate() lilypads.append(lilypad) add_child(lilypad) From 708f0fe0911b3e6811ecd9ab8ef6efb2f74b8f2f Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Tue, 9 Jun 2026 10:52:42 +0200 Subject: [PATCH 095/111] Auto-heal language account at every login --- .../language_selection/language_check.gd | 66 +++++++++---------- 1 file changed, 31 insertions(+), 35 deletions(-) diff --git a/sources/menus/language_selection/language_check.gd b/sources/menus/language_selection/language_check.gd index 5f167350..a7b599f4 100644 --- a/sources/menus/language_selection/language_check.gd +++ b/sources/menus/language_selection/language_check.gd @@ -24,42 +24,38 @@ func _ready() -> void: UserDataManager.logout() _show_error(ERROR_MESSAGES[0]) return - if not teacher_settings.language or not teacher_settings.server_language_validated: - Log.trace("LanguageCheck: TeacherSettings needs to be updated") - if not await ServerManager.check_internet_access(): - Log.trace("LanguageCheck: No internet access") - try_with_local_data() - return - else: - Log.trace("LanguageCheck: Internet access confirmed. Asking server for user language") - var res: Dictionary = await ServerManager.get_user_language() - if not res.has("code") or res.code != 200 or not res.has("body") or not (res.body as Dictionary).has("language"): - Log.trace("LanguageCheck: Server answer is not usable") - try_with_local_data() + Log.trace("LanguageCheck: Re-validating language with server on every login") + if not await ServerManager.check_internet_access(): + Log.trace("LanguageCheck: No internet access") + try_with_local_data() + return + Log.trace("LanguageCheck: Internet access confirmed. Asking server for user language") + var res: Dictionary = await ServerManager.get_user_language() + if not res.has("code") or res.code != 200 or not res.has("body") or not (res.body as Dictionary).has("language"): + Log.trace("LanguageCheck: Server answer is not usable") + try_with_local_data() + return + var server_language: Variant = (res.body as Dictionary).language + if server_language is String and server_language in Utils.SUPPORTED_LOCALES.keys(): + Log.trace("LanguageCheck: Language validated by server") + teacher_settings.language = server_language + teacher_settings.server_language_validated = true + UserDataManager.set_language(server_language as String, true) + else: + Log.warn("LanguageCheck: Language received from server is invalid or not defined") + var local_language: String = teacher_settings.language + if not local_language in Utils.SUPPORTED_LOCALES.keys(): + if not device_language in Utils.SUPPORTED_LOCALES.keys(): + UserDataManager.logout() + _show_error(ERROR_MESSAGES[2]) return - else: - var server_language: Variant = (res.body as Dictionary).language - if server_language is String and server_language in Utils.SUPPORTED_LOCALES.keys(): - teacher_settings.language = server_language - Log.trace("LanguageCheck: Language validated by server") - teacher_settings.server_language_validated = true - UserDataManager.set_language(server_language as String, true) - else: - Log.trace("LanguageCheck: Language received from server is invalid or not defined") - var local_language: String = teacher_settings.language - if not local_language in Utils.SUPPORTED_LOCALES.keys(): - if not device_language in Utils.SUPPORTED_LOCALES.keys(): - UserDataManager.logout() - _show_error(ERROR_MESSAGES[2]) - return - else: - local_language = device_language - res = await ServerManager.set_user_language(local_language) - if res.has("code") and res.code == 200: - UserDataManager.set_language(local_language, true) - else: - UserDataManager.set_language(local_language, false) - + local_language = device_language + res = await ServerManager.set_user_language(local_language) + if res.has("code") and res.code == 200: + UserDataManager.set_language(local_language, true) + else: + UserDataManager.set_language(local_language, false) + UserDataManager.save_all() go_to_package_download() From f50a739b3df5761b99cf50d63b5656bbddc95cee Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Tue, 9 Jun 2026 11:43:23 +0200 Subject: [PATCH 096/111] Optimize turtle minigame --- sources/minigames/turtles/turtle.gd | 59 +++++++++++++------ sources/minigames/turtles/turtle.tscn | 36 ----------- sources/minigames/turtles/turtles_minigame.gd | 18 +++++- sources/minigames/turtles/water.gd | 25 ++++++-- sources/minigames/turtles/water.gdshader | 35 +---------- 5 files changed, 79 insertions(+), 94 deletions(-) diff --git a/sources/minigames/turtles/turtle.gd b/sources/minigames/turtles/turtle.gd index a9cbed90..26d19389 100644 --- a/sources/minigames/turtles/turtle.gd +++ b/sources/minigames/turtles/turtle.gd @@ -4,25 +4,22 @@ extends Node2D signal pressed(gp: Dictionary) signal animation_changed(position: Vector2) -enum Colors { - GREEN, - KHAKI, - PURPLE, -} - -const ANIMATIONS: Array[SpriteFrames] = [ - preload("res://sources/minigames/turtles/green_turtle_animations.tres"), - preload("res://sources/minigames/turtles/khaki_turtle_animations.tres"), - preload("res://sources/minigames/turtles/purple_turtle_animations.tres") -] const TURTLE_BACK_RIGHT: CompressedTexture2D = preload("res://assets/minigames/turtles/graphic/turtle_back_right.png") const TURTLE_BACK_WRONG: CompressedTexture2D = preload("res://assets/minigames/turtles/graphic/turtle_back_wrong.png") +# Only used when a turtle lands on the island, so they're instantiated on +# demand instead of sitting idle inside every spawned turtle. +const RIGHT_FX_SCENE: PackedScene = preload("res://sources/utils/fx/right.tscn") +const WRONG_FX_SCENE: PackedScene = preload("res://sources/utils/fx/wrong.tscn") +const RIGHT_STARS_SCENE: PackedScene = preload("res://sources/utils/fx/right_stars.tscn") -@export var color: Colors = Colors.PURPLE: +# Set by the minigame after the random color is picked, so only one of the three +# 6400x4800 turtle spritesheets is ever in memory. +@export var sprite_frames: SpriteFrames: set(value): - color = value - if sprite: - sprite.sprite_frames = ANIMATIONS[color] + sprite_frames = value + if sprite and value: + sprite.sprite_frames = value + sprite.play("swim") var gp: Dictionary = {}: set(value): @@ -37,6 +34,9 @@ var direction: Vector2 = Vector2(0,-1): var is_moving: bool = true var is_changing_direction: bool = false var is_visible_on_screen: bool = false +var right_fx: RightFX +var right_stars: RightStarsFX +var wrong_fx: WrongFX @onready var body: Node2D = $Body @onready var body_back: Sprite2D = $Body/AnimatedSprite2D/Sprite2D_Back @@ -45,9 +45,8 @@ var is_visible_on_screen: bool = false @onready var head_area_collision_shape: CollisionShape2D = $Body/HeadArea/CollisionShape2D @onready var body_area_collision_shape: CollisionShape2D = $Body/BodyArea/CollisionShape2D @onready var highlight_fx: HighlightFX = %HighlightFX -@onready var right_fx: RightFX = %RightFX -@onready var right_stars: RightStarsFX = %Right_Stars -@onready var wrong_fx: WrongFX = %WrongFX +@onready var back_fx: Control = $BackFX +@onready var front_fx: Control = $FrontFX @onready var delete_timer: Timer = $DeleteTimer @onready var audio_stream_player: AudioStreamPlayer2D = $AudioStreamPlayer2D @@ -92,6 +91,28 @@ func highlight(value: bool = true) -> void: highlight_fx.stop() +func _ensure_right_fx() -> void: + if right_fx: + return + right_fx = RIGHT_FX_SCENE.instantiate() + right_fx.set_anchors_and_offsets_preset(Control.PRESET_CENTER) + right_fx.size_flags_horizontal = Control.SIZE_SHRINK_CENTER + right_fx.size_flags_vertical = Control.SIZE_SHRINK_CENTER + back_fx.add_child(right_fx) + right_stars = RIGHT_STARS_SCENE.instantiate() + front_fx.add_child(right_stars) + + +func _ensure_wrong_fx() -> void: + if wrong_fx: + return + wrong_fx = WRONG_FX_SCENE.instantiate() + wrong_fx.set_anchors_and_offsets_preset(Control.PRESET_CENTER) + wrong_fx.size_flags_horizontal = Control.SIZE_SHRINK_CENTER + wrong_fx.size_flags_vertical = Control.SIZE_SHRINK_CENTER + back_fx.add_child(wrong_fx) + + func right() -> void: is_moving = false change_font_color_after_collision() @@ -99,6 +120,7 @@ func right() -> void: sprite.play("victory") await sprite.animation_finished sprite.play_backwards("victory") + _ensure_right_fx() right_fx.play() right_stars.play() await sprite.animation_finished @@ -109,6 +131,7 @@ func wrong() -> void: is_moving = false change_font_color_after_collision() body_back.texture = TURTLE_BACK_WRONG + _ensure_wrong_fx() wrong_fx.play() sprite.play("defeat") await sprite.animation_finished diff --git a/sources/minigames/turtles/turtle.tscn b/sources/minigames/turtles/turtle.tscn index 58a914cb..038b8aba 100644 --- a/sources/minigames/turtles/turtle.tscn +++ b/sources/minigames/turtles/turtle.tscn @@ -1,13 +1,9 @@ [gd_scene format=3 uid="uid://djykrpdu58f3v"] [ext_resource type="Script" uid="uid://doq6myv45i4w6" path="res://sources/minigames/turtles/turtle.gd" id="1_vx1yr"] -[ext_resource type="PackedScene" uid="uid://cn2rw06pltyiu" path="res://sources/utils/fx/right.tscn" id="2_d5x3l"] [ext_resource type="PackedScene" uid="uid://cge0uyn30tcpv" path="res://sources/utils/fx/highlight.tscn" id="2_rllc5"] -[ext_resource type="PackedScene" uid="uid://dlmbxcgiv8tpr" path="res://sources/utils/fx/wrong.tscn" id="4_yhidj"] -[ext_resource type="SpriteFrames" uid="uid://gm2hqn76oaib" path="res://sources/minigames/turtles/purple_turtle_animations.tres" id="5_xbpgw"] [ext_resource type="Texture2D" uid="uid://bhahju7y2n5ke" path="res://assets/minigames/turtles/graphic/turtle_back_neutral.png" id="6_4juk7"] [ext_resource type="LabelSettings" uid="uid://dn32fpff81uu" path="res://resources/themes/minigames_label_settings_turtles.tres" id="6_8k7c6"] -[ext_resource type="PackedScene" uid="uid://cs6g7fhc0bjvh" path="res://sources/utils/fx/right_stars.tscn" id="8_xbpgw"] [ext_resource type="AudioStream" uid="uid://cmsn7q4fxnghr" path="res://assets/sfx/splash.mp3" id="42_p3fqk"] [ext_resource type="PackedScene" uid="uid://cjg6pgc7yfp1p" path="res://sources/utils/swipe_detector.tscn" id="49_0qwwy"] @@ -29,19 +25,6 @@ anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 -[node name="RightFX" parent="BackFX" unique_id=1787877717 instance=ExtResource("2_d5x3l")] -unique_name_in_owner = true -layout_mode = 1 -anchors_preset = 8 -anchor_left = 0.5 -anchor_top = 0.5 -anchor_right = 0.5 -anchor_bottom = 0.5 -grow_horizontal = 2 -grow_vertical = 2 -size_flags_horizontal = 4 -size_flags_vertical = 4 - [node name="HighlightFX" parent="BackFX" unique_id=462139651 instance=ExtResource("2_rllc5")] unique_name_in_owner = true layout_mode = 1 @@ -54,19 +37,6 @@ grow_horizontal = 2 grow_vertical = 2 scale = Vector2(0.6, 0.6) -[node name="WrongFX" parent="BackFX" unique_id=777978196 instance=ExtResource("4_yhidj")] -unique_name_in_owner = true -layout_mode = 1 -anchors_preset = 8 -anchor_left = 0.5 -anchor_top = 0.5 -anchor_right = 0.5 -anchor_bottom = 0.5 -grow_horizontal = 2 -grow_vertical = 2 -size_flags_horizontal = 4 -size_flags_vertical = 4 - [node name="AudioStreamPlayer2D" type="AudioStreamPlayer2D" parent="." unique_id=799402224] stream = ExtResource("42_p3fqk") bus = &"Effects" @@ -77,9 +47,6 @@ bus = &"Effects" unique_name_in_owner = true position = Vector2(0, -16) scale = Vector2(0.8, 0.8) -sprite_frames = ExtResource("5_xbpgw") -animation = &"swim" -autoplay = "swim" [node name="Sprite2D_Back" type="Sprite2D" parent="Body/AnimatedSprite2D" unique_id=1980717066] position = Vector2(0, 19.999998) @@ -139,9 +106,6 @@ anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 -[node name="Right_Stars" parent="FrontFX" unique_id=1474432273 instance=ExtResource("8_xbpgw")] -unique_name_in_owner = true - [node name="DeleteTimer" type="Timer" parent="." unique_id=94467327] wait_time = 3.0 one_shot = true diff --git a/sources/minigames/turtles/turtles_minigame.gd b/sources/minigames/turtles/turtles_minigame.gd index 28578a9e..483c232e 100644 --- a/sources/minigames/turtles/turtles_minigame.gd +++ b/sources/minigames/turtles/turtles_minigame.gd @@ -7,6 +7,12 @@ const TURTLE_SCENE: PackedScene = preload("res://sources/minigames/turtles/turtl const MAX_TURTLE_COUNT: int = 5 # Defines the minimum distance between turtles when spawning them const MIN_DISTANCE: int = 500 +# Each spritesheet is ~123 MB of VRAM; never preload — load only the picked one. +const TURTLE_ANIMATIONS_PATHS: Array[String] = [ + "res://sources/minigames/turtles/green_turtle_animations.tres", + "res://sources/minigames/turtles/khaki_turtle_animations.tres", + "res://sources/minigames/turtles/purple_turtle_animations.tres", +] var difficulty_settings: Array[DifficultySettings] = [ DifficultySettings.new(.75, 200., 4.), @@ -22,7 +28,8 @@ var turtle_count: int = 0: can_spawn_turtle.emit() turtle_count = value var stimulus_spawned: bool = false -var color: Turtle.Colors +# Single shared SpriteFrames assigned to every spawned turtle this round. +var turtle_sprite_frames: SpriteFrames @onready var water: Water = $GameRoot/Water @onready var island: Island = $GameRoot/Island @@ -61,7 +68,12 @@ func _setup_minigame() -> void: func pick_random_color() -> void: - color = randi_range(0, Turtle.Colors.size() - 1) as Turtle.Colors + # Drop the previous color first so its ~123 MB texture can be freed by + # refcount before we load the next one (turtles still fading out also + # hold a ref, so peak overlap is brief). + turtle_sprite_frames = null + var index: int = randi_range(0, TURTLE_ANIMATIONS_PATHS.size() - 1) + turtle_sprite_frames = load(TURTLE_ANIMATIONS_PATHS[index]) func _highlight() -> void: @@ -121,7 +133,7 @@ func _on_spawn_timer_timeout() -> void: ) turtles.add_child(turtle) - turtle.color = color + turtle.sprite_frames = turtle_sprite_frames # Set the direction of the turtle var random_offset: float = deg_to_rad(randf_range(-5, 5)) diff --git a/sources/minigames/turtles/water.gd b/sources/minigames/turtles/water.gd index 84e45383..fb1c5a91 100644 --- a/sources/minigames/turtles/water.gd +++ b/sources/minigames/turtles/water.gd @@ -2,14 +2,31 @@ class_name Water extends TextureRect const WATER_RING_SCENE: PackedScene = preload("res://sources/utils/fx/water_ring.tscn") +# Up to MAX_TURTLE_COUNT (5) turtles each loop the swim animation roughly +# every 0.7s, so ~7-8 rings/second. The pool absorbs the bursts without +# instantiate/queue_free churn on every loop. +const POOL_SIZE: int = 12 @export var ring_color: Color +var _available_rings: Array[WaterRingFX] = [] + + +func _ready() -> void: + for _index: int in POOL_SIZE: + var fx: WaterRingFX = WATER_RING_SCENE.instantiate() + fx.modulate = ring_color + fx.hide() + add_child(fx) + _available_rings.append(fx) + func spawn_water_ring(pos: Vector2) -> void: - var fx: WaterRingFX = WATER_RING_SCENE.instantiate() + if _available_rings.is_empty(): + return + var fx: WaterRingFX = _available_rings.pop_back() fx.position = pos - fx.modulate = ring_color - add_child(fx) + fx.show() await fx.play() - fx.queue_free() + fx.hide() + _available_rings.append(fx) diff --git a/sources/minigames/turtles/water.gdshader b/sources/minigames/turtles/water.gdshader index 53c93f7d..f494a3d6 100644 --- a/sources/minigames/turtles/water.gdshader +++ b/sources/minigames/turtles/water.gdshader @@ -40,6 +40,8 @@ float circ(vec2 pos, vec2 c, float s) float waterlayer(vec2 uv) { + // Reduced from 73 to 42 circles by dropping radii < 0.01 — the smaller + // ones barely contributed visually but each circ() is ~10 GPU ops. uv = mod(uv, 1.0); float ret = 1.0; ret += circ(uv, vec2(0.37378, 0.277169), 0.0268181); @@ -52,71 +54,38 @@ float waterlayer(vec2 uv) ret += circ(uv, vec2(0.310149, 0.686637), 0.0128496); ret += circ(uv, vec2(0.928617, 0.195986), 0.0152041); ret += circ(uv, vec2(0.0438506, 0.868153), 0.0268601); - ret += circ(uv, vec2(0.308619, 0.194937), 0.00806102); - ret += circ(uv, vec2(0.349922, 0.449714), 0.00928667); ret += circ(uv, vec2(0.0449556, 0.953415), 0.023126); ret += circ(uv, vec2(0.117761, 0.503309), 0.0151272); ret += circ(uv, vec2(0.563517, 0.244991), 0.0292322); - ret += circ(uv, vec2(0.566936, 0.954457), 0.00981141); ret += circ(uv, vec2(0.0489944, 0.200931), 0.0178746); ret += circ(uv, vec2(0.569297, 0.624893), 0.0132408); ret += circ(uv, vec2(0.298347, 0.710972), 0.0114426); - ret += circ(uv, vec2(0.878141, 0.771279), 0.00322719); - ret += circ(uv, vec2(0.150995, 0.376221), 0.00216157); ret += circ(uv, vec2(0.119673, 0.541984), 0.0124621); ret += circ(uv, vec2(0.629598, 0.295629), 0.0198736); ret += circ(uv, vec2(0.334357, 0.266278), 0.0187145); ret += circ(uv, vec2(0.918044, 0.968163), 0.0182928); - ret += circ(uv, vec2(0.965445, 0.505026), 0.006348); - ret += circ(uv, vec2(0.514847, 0.865444), 0.00623523); - ret += circ(uv, vec2(0.710575, 0.0415131), 0.00322689); ret += circ(uv, vec2(0.71403, 0.576945), 0.0215641); ret += circ(uv, vec2(0.748873, 0.413325), 0.0110795); ret += circ(uv, vec2(0.0623365, 0.896713), 0.0236203); - ret += circ(uv, vec2(0.980482, 0.473849), 0.00573439); ret += circ(uv, vec2(0.647463, 0.654349), 0.0188713); - ret += circ(uv, vec2(0.651406, 0.981297), 0.00710875); ret += circ(uv, vec2(0.428928, 0.382426), 0.0298806); - ret += circ(uv, vec2(0.811545, 0.62568), 0.00265539); - ret += circ(uv, vec2(0.400787, 0.74162), 0.00486609); - ret += circ(uv, vec2(0.331283, 0.418536), 0.00598028); - ret += circ(uv, vec2(0.894762, 0.0657997), 0.00760375); ret += circ(uv, vec2(0.525104, 0.572233), 0.0141796); ret += circ(uv, vec2(0.431526, 0.911372), 0.0213234); - ret += circ(uv, vec2(0.658212, 0.910553), 0.000741023); ret += circ(uv, vec2(0.514523, 0.243263), 0.0270685); - ret += circ(uv, vec2(0.0249494, 0.252872), 0.00876653); ret += circ(uv, vec2(0.502214, 0.47269), 0.0234534); ret += circ(uv, vec2(0.693271, 0.431469), 0.0246533); ret += circ(uv, vec2(0.415, 0.884418), 0.0271696); - ret += circ(uv, vec2(0.149073, 0.41204), 0.00497198); - ret += circ(uv, vec2(0.533816, 0.897634), 0.00650833); ret += circ(uv, vec2(0.0409132, 0.83406), 0.0191398); ret += circ(uv, vec2(0.638585, 0.646019), 0.0206129); - ret += circ(uv, vec2(0.660342, 0.966541), 0.0053511); - ret += circ(uv, vec2(0.513783, 0.142233), 0.00471653); - ret += circ(uv, vec2(0.124305, 0.644263), 0.00116724); ret += circ(uv, vec2(0.99871, 0.583864), 0.0107329); - ret += circ(uv, vec2(0.894879, 0.233289), 0.00667092); - ret += circ(uv, vec2(0.246286, 0.682766), 0.00411623); ret += circ(uv, vec2(0.0761895, 0.16327), 0.0145935); ret += circ(uv, vec2(0.949386, 0.802936), 0.0100873); ret += circ(uv, vec2(0.480122, 0.196554), 0.0110185); ret += circ(uv, vec2(0.896854, 0.803707), 0.013969); - ret += circ(uv, vec2(0.292865, 0.762973), 0.00566413); - ret += circ(uv, vec2(0.0995585, 0.117457), 0.00869407); - ret += circ(uv, vec2(0.377713, 0.00335442), 0.0063147); ret += circ(uv, vec2(0.506365, 0.531118), 0.0144016); ret += circ(uv, vec2(0.408806, 0.894771), 0.0243923); - ret += circ(uv, vec2(0.143579, 0.85138), 0.00418529); ret += circ(uv, vec2(0.0902811, 0.181775), 0.0108896); - ret += circ(uv, vec2(0.780695, 0.394644), 0.00475475); - ret += circ(uv, vec2(0.298036, 0.625531), 0.00325285); - ret += circ(uv, vec2(0.218423, 0.714537), 0.00157212); - ret += circ(uv, vec2(0.658836, 0.159556), 0.00225897); ret += circ(uv, vec2(0.987324, 0.146545), 0.0288391); - ret += circ(uv, vec2(0.222646, 0.251694), 0.00092276); - ret += circ(uv, vec2(0.159826, 0.528063), 0.00605293); return max(ret, 0.0); } From 4ee513c543c45b017b7f3de6c933566fab8bb81a Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Tue, 9 Jun 2026 11:50:40 +0200 Subject: [PATCH 097/111] Handle turtle in boss minigame --- sources/minigames/boss/boss_minigame.gd | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/sources/minigames/boss/boss_minigame.gd b/sources/minigames/boss/boss_minigame.gd index 625bd626..b75078f3 100644 --- a/sources/minigames/boss/boss_minigame.gd +++ b/sources/minigames/boss/boss_minigame.gd @@ -6,6 +6,10 @@ const GAUGE_COLOR_LOW: Color = Color(0.55, 0.95, 0.45) const GAUGE_COLOR_HIGH: Color = Color(0.996078, 0.776471, 0.2) const MONKEY_SCENE_PATH: String = "res://sources/minigames/monkeys/monkey.tscn" const TURTLE_SCENE_PATH: String = "res://sources/minigames/turtles/turtle.tscn" +# turtle.tscn no longer carries a default SpriteFrames (the three color +# spritesheets are ~123 MB of VRAM each and the turtles minigame picks one +# at runtime). For the static boss-friend turtle, pick one here. +const TURTLE_FRIEND_SPRITE_FRAMES_PATH: String = "res://sources/minigames/turtles/purple_turtle_animations.tres" const PENGUIN_SCENE_PATH: String = "res://sources/minigames/penguin/penguin.tscn" const FROG_SCENE_PATH: String = "res://sources/minigames/frog/frog.tscn" const CRAB_SCENE_PATH: String = "res://sources/minigames/crabs/crab/crab.tscn" @@ -103,6 +107,7 @@ func _instantiate_animal_friends() -> void: turtle.rotation = 1.5707964 turtle.scale = Vector2(0.18, 0.18) friends_container.add_child(turtle) + turtle.sprite_frames = load(TURTLE_FRIEND_SPRITE_FRAMES_PATH) await get_tree().process_frame if not is_inside_tree(): From 87c53ba5c08d1c4d6a676df76c46b949ac797613 Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Tue, 9 Jun 2026 12:21:40 +0200 Subject: [PATCH 098/111] Dynamically adapt POOL SIZE for ring effect --- sources/minigames/turtles/water.gd | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/sources/minigames/turtles/water.gd b/sources/minigames/turtles/water.gd index fb1c5a91..88999ff6 100644 --- a/sources/minigames/turtles/water.gd +++ b/sources/minigames/turtles/water.gd @@ -2,10 +2,11 @@ class_name Water extends TextureRect const WATER_RING_SCENE: PackedScene = preload("res://sources/utils/fx/water_ring.tscn") -# Up to MAX_TURTLE_COUNT (5) turtles each loop the swim animation roughly -# every 0.7s, so ~7-8 rings/second. The pool absorbs the bursts without -# instantiate/queue_free churn on every loop. -const POOL_SIZE: int = 12 +# Rings are checked out for the full 3.0s particle lifetime. +# Worst case: 5 turtles (MAX_TURTLE_COUNT) each looping the swim animation +# every 8/12 = 0.667s emit ~7.5 rings/sec → ~23 concurrent in flight. +# We pre-allocate 24 and grow on demand if real usage ever exceeds that. +const POOL_SIZE: int = 24 @export var ring_color: Color @@ -14,19 +15,21 @@ var _available_rings: Array[WaterRingFX] = [] func _ready() -> void: for _index: int in POOL_SIZE: - var fx: WaterRingFX = WATER_RING_SCENE.instantiate() - fx.modulate = ring_color - fx.hide() - add_child(fx) - _available_rings.append(fx) + _available_rings.append(_make_ring()) func spawn_water_ring(pos: Vector2) -> void: - if _available_rings.is_empty(): - return - var fx: WaterRingFX = _available_rings.pop_back() + var fx: WaterRingFX = _available_rings.pop_back() if not _available_rings.is_empty() else _make_ring() fx.position = pos fx.show() await fx.play() fx.hide() _available_rings.append(fx) + + +func _make_ring() -> WaterRingFX: + var fx: WaterRingFX = WATER_RING_SCENE.instantiate() + fx.modulate = ring_color + fx.hide() + add_child(fx) + return fx From e21c3aec21a1ea0c8b46fac2ac741d5cea9414fb Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Tue, 9 Jun 2026 16:31:56 +0200 Subject: [PATCH 099/111] Debug prof_tool --- sources/language_tool/gp_list.gd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sources/language_tool/gp_list.gd b/sources/language_tool/gp_list.gd index ad8c3f39..bde25539 100644 --- a/sources/language_tool/gp_list.gd +++ b/sources/language_tool/gp_list.gd @@ -38,7 +38,7 @@ func _on_plus_button_pressed() -> void: var element: GPListElement = element_scene.instantiate() element.grapheme = "" element.phoneme = "" - element.type = GPListElement.Type.Silent + element.type = GPListElement.Type.SILENT element.exception = false element.undo_redo = undo_redo element.delete_pressed.connect(_on_element_delete_pressed.bind(element)) From 48ad70d7dbd491fb4b35762c3d78df8dfd0a1a44 Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Wed, 10 Jun 2026 09:58:39 +0200 Subject: [PATCH 100/111] Debug completed game color on the minigame wheel --- sources/gardens/gardens.gd | 3 +-- sources/gardens/gardens.tscn | 1 + 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/sources/gardens/gardens.gd b/sources/gardens/gardens.gd index 71deb8cd..fa2a17cd 100644 --- a/sources/gardens/gardens.gd +++ b/sources/gardens/gardens.gd @@ -12,7 +12,7 @@ const WHEEL_RADIUS: float = 815.0 const WHEEL_ARC_SEGMENTS: int = 48 const WHEEL_ICON_DISTANCE_RATIO: float = 0.55 const WHEEL_DIVIDER_WIDTH: float = 12.0 -const WHEEL_HIGHLIGHT_WIDTH: float = 12.0 +const WHEEL_HIGHLIGHT_WIDTH: float = 24.0 # Outline around the central Look-and-Learn button. Drawn at the button's visible # edge. Colored dark by default, gold when L&L is the next-to-play step. const LESSON_BUTTON_OUTLINE_RADIUS: float = 192.0 @@ -884,7 +884,6 @@ func _apply_wedge_status_effects(wedge: MinigameWedge, status: StudentProgressio or not transition_data.get("first_clear", false): return await minigame_layout_opened - create_tween().tween_property(wedge, "modulate:a", 0.6, 0.5) wedge.right() diff --git a/sources/gardens/gardens.tscn b/sources/gardens/gardens.tscn index d297d1e0..a86f0721 100644 --- a/sources/gardens/gardens.tscn +++ b/sources/gardens/gardens.tscn @@ -210,6 +210,7 @@ layout_mode = 2 [node name="BossButtons" type="Control" parent="ScrollContainer" unique_id=1176317047] unique_name_in_owner = true +layout_mode = 2 mouse_filter = 2 [node name="LockedLine" type="Line2D" parent="." unique_id=1229207154] From c77e9b90eca0293ec0976f10924ce49781de23de Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Wed, 10 Jun 2026 17:00:31 +0200 Subject: [PATCH 101/111] Fix synchronization reliability: freed popup refs and unvalidated payloads The UserDatabaseSynchronizer outlives the scenes that use it, which made the periodic background synchronization fragile in two ways: 1. A freed loading popup permanently broke the sync. The teacher settings screen injects its LoadingPopup into the synchronizer but never cleared the reference on scene exit. Since a freed Object is not equal to null in Godot 4, the next timer-driven synchronization called into the freed node, crashed the coroutine after `synchronizing` had been set to true, and every subsequent synchronize() call was then silently cancelled by the re-entrancy guard until the app restarted. - All popup guards now use is_instance_valid() (plus is_inside_tree() where get_tree() is needed). - The teacher settings screen clears the synchronizer's popup reference in _exit_tree(). 2. Server payloads were applied without shape validation. _apply_server_response() indexed JSON fields (lesson unlock data, remediation score tuples, confusion matrix entries) without checking their types, as flagged by the five "TODO ADD SECURITY" comments. A single malformed or legacy record raised a script error mid-sync, which also wedged the `synchronizing` flag as described above. - Lesson unlock entries, remediation score pairs and confusion matrix entries are now validated before use; malformed records are logged and skipped individually so one bad record cannot abort the whole synchronization or corrupt local student data. - The three copy-pasted remediation parsing blocks are factored into a single _parse_score_remediation() helper. Verified with the GUT test suite (58/58 passing). --- sources/menus/settings/teacher_settings.gd | 7 + .../autoloads/user_database_synchronizer.gd | 152 +++++++++++++----- 2 files changed, 115 insertions(+), 44 deletions(-) diff --git a/sources/menus/settings/teacher_settings.gd b/sources/menus/settings/teacher_settings.gd index d6a3af48..64c36afc 100644 --- a/sources/menus/settings/teacher_settings.gd +++ b/sources/menus/settings/teacher_settings.gd @@ -62,6 +62,13 @@ func _ready() -> void: Log.info("SettingsTeacherSettings: Export codes dialog configured") +func _exit_tree() -> void: + # The synchronizer outlives this scene: clear the popup reference so a + # later background synchronization does not call into a freed node. + if UserDataManager.user_database_synchronizer.loading_popup == loading_popup: + UserDataManager.user_database_synchronizer.loading_popup = null + + func _on_account_type_option_button_item_selected(index: int) -> void: if TeacherSettings.AccountType.values().has(index): UserDataManager.teacher_settings.account_type = index as TeacherSettings.AccountType diff --git a/sources/utils/autoloads/user_database_synchronizer.gd b/sources/utils/autoloads/user_database_synchronizer.gd index e4ccdfdc..b6ddc47f 100644 --- a/sources/utils/autoloads/user_database_synchronizer.gd +++ b/sources/utils/autoloads/user_database_synchronizer.gd @@ -16,7 +16,7 @@ var loading_popup: LoadingPopup func start_sync() -> void: synchronizing = true Log.info("UserDatabaseSynchronizer: Starting synchronization") - if loading_popup != null: + if is_instance_valid(loading_popup): loading_popup.set_finished(false) set_loading_bar_text("SYNCHRONIZATION_INITIALISATION") await set_loading_bar_progression(0.0) @@ -29,7 +29,7 @@ func stop_sync(success: bool = false) -> void: if success: await set_loading_bar_progression(100.0, 1.0) set_loading_bar_text("SYNCHRONIZATION_SUCCESS") - if loading_popup != null: + if is_instance_valid(loading_popup): loading_popup.set_finished(true) @@ -398,7 +398,7 @@ func _apply_server_response(response_body: Dictionary) -> void: var response_student_data: Dictionary = response_students[response_student_code] if validate_student_data(response_student_data): UserDataManager.teacher_settings.set_data_student_with_code(int(response_student_code), int(response_student_data.device_id as float), response_student_data.name as String, int(response_student_data.age as float), response_student_data.updated_at as String) - if response_student_data.has("progression") and (response_student_data.progression as Dictionary).has("version") and (response_student_data.progression as Dictionary).has("unlocked") and (response_student_data.progression as Dictionary).has("updated_at"): + if response_student_data.has("progression") and _is_valid_progression_payload(response_student_data.progression): # Cleaning data because of JSON parsing changing types int / float / string var received_unlock_data: Dictionary = response_student_data.progression.unlocked as Dictionary var new_unlock_data: Dictionary[int, Dictionary] = {} @@ -407,56 +407,45 @@ func _apply_server_response(response_body: Dictionary) -> void: if key_lesson_int == -1: Log.error("UserDatabaseSynchronizer: Received invalid key for lesson: %s" % str(key_lesson)) continue - new_unlock_data[key_lesson_int] = {"games": [], "look_and_learn": received_unlock_data[key_lesson]["look_and_learn"] as int} - for game_result: Variant in received_unlock_data[key_lesson]["games"]: - (new_unlock_data[key_lesson_int]["games"] as Array).push_back(game_result as int) - new_unlock_data[key_lesson_int].merge({"last_duration": PackedInt32Array(received_unlock_data[key_lesson]["last_duration"] as Array)}) - new_unlock_data[key_lesson_int].merge({"total_duration": PackedInt32Array(received_unlock_data[key_lesson]["total_duration"] as Array)}) + var lesson_data: Variant = received_unlock_data[key_lesson] + if not _is_valid_unlock_entry(lesson_data): + Log.error("UserDatabaseSynchronizer: Skipping malformed unlock data received from server for lesson %d" % key_lesson_int) + continue + var lesson_dict: Dictionary = lesson_data + new_unlock_data[key_lesson_int] = {"games": [], "look_and_learn": int(lesson_dict.look_and_learn as float)} + for game_result: Variant in lesson_dict.games as Array: + (new_unlock_data[key_lesson_int]["games"] as Array).push_back(int(game_result as float)) + new_unlock_data[key_lesson_int].merge({"last_duration": PackedInt32Array(lesson_dict.last_duration as Array)}) + new_unlock_data[key_lesson_int].merge({"total_duration": PackedInt32Array(lesson_dict.total_duration as Array)}) var highest_boss_defeated: int = -1 if (response_student_data.progression as Dictionary).has("highest_boss_defeated"): highest_boss_defeated = int(response_student_data.progression.highest_boss_defeated as float) UserDataManager.set_student_progression_data(int(response_student_code), response_student_data.progression.version as String, new_unlock_data, response_student_data.progression.updated_at as String, highest_boss_defeated) if response_student_data.has("remediation_gp") and (response_student_data.remediation_gp as Dictionary).has("score_remediation") and (response_student_data.remediation_gp as Dictionary).has("updated_at"): - var new_array: Array = JSON.parse_string(response_student_data.remediation_gp.score_remediation as String) as Array - if new_array == null: - Log.warn("UserDatabaseSynchronizer: Cannot parse to JSON the received GP score remediation: %s" % response_student_data.remediation_gp.score_remediation as String) - else: - var new_gp_scores: Dictionary[int, int] = {} - for index: int in range(new_array.size()): - # TODO ADD SECURITY - new_gp_scores[int(new_array[index][0] as float)] = int(new_array[index][1] as float) + var new_gp_scores: Dictionary[int, int] = {} + if _parse_score_remediation(response_student_data.remediation_gp.score_remediation, "GP", new_gp_scores): UserDataManager.set_student_remediation_gp_data(int(response_student_code), new_gp_scores, response_student_data.remediation_gp.updated_at as String) if response_student_data.has("remediation_syllables") and (response_student_data.remediation_syllables as Dictionary).has("score_remediation") and (response_student_data.remediation_syllables as Dictionary).has("updated_at"): - var new_array: Array = JSON.parse_string(response_student_data.remediation_syllables.score_remediation as String) as Array - if new_array == null: - Log.warn("UserDatabaseSynchronizer: Cannot parse to JSON the received syllables score remediation: %s" % response_student_data.remediation_syllables.score_remediation as String) - else: - var new_syllables_scores: Dictionary[int, int] = {} - for index: int in range(new_array.size()): - # TODO ADD SECURITY - new_syllables_scores[int(new_array[index][0] as float)] = int(new_array[index][1] as float) + var new_syllables_scores: Dictionary[int, int] = {} + if _parse_score_remediation(response_student_data.remediation_syllables.score_remediation, "syllables", new_syllables_scores): UserDataManager.set_student_remediation_syllables_data(int(response_student_code), new_syllables_scores, response_student_data.remediation_syllables.updated_at as String) if response_student_data.has("remediation_words") and (response_student_data.remediation_words as Dictionary).has("score_remediation") and (response_student_data.remediation_words as Dictionary).has("updated_at"): - var new_array: Array = JSON.parse_string(response_student_data.remediation_words.score_remediation as String) as Array - if new_array == null: - Log.warn("UserDatabaseSynchronizer: Cannot parse to JSON the received words score remediation: %s" % response_student_data.remediation_words.score_remediation as String) - else: - var new_words_scores: Dictionary[int, int] = {} - for index: int in range(new_array.size()): - # TODO ADD SECURITY - new_words_scores[int(new_array[index][0] as float)] = int(new_array[index][1] as float) + var new_words_scores: Dictionary[int, int] = {} + if _parse_score_remediation(response_student_data.remediation_words.score_remediation, "words", new_words_scores): UserDataManager.set_student_remediation_words_data(int(response_student_code), new_words_scores, response_student_data.remediation_words.updated_at as String) if response_student_data.has("confusion_matrix_gp") and (response_student_data.confusion_matrix_gp as Dictionary).has("confusion_matrix") and (response_student_data.confusion_matrix_gp as Dictionary).has("updated_at"): - # TODO ADD SECURITY - var new_array: Array = response_student_data.confusion_matrix_gp.confusion_matrix - var new_confusion_matrix_gp: Dictionary[int, PackedInt32Array] = {} - for index: int in range(new_array.size()): - # TODO ADD SECURITY - var sub_array: PackedInt32Array = [] - for subindex: int in range((new_array[index][1] as Array).size()): - sub_array.append(int(new_array[index][1][subindex] as float)) - new_confusion_matrix_gp.set(int(new_array[index][0] as float), sub_array as PackedInt32Array) - UserDataManager.set_student_confusion_matrix_gp_data(int(response_student_code), new_confusion_matrix_gp, response_student_data.confusion_matrix_gp.updated_at as String) + var received_matrix: Variant = response_student_data.confusion_matrix_gp.confusion_matrix + if not (received_matrix is Array): + Log.warn("UserDatabaseSynchronizer: Received GP confusion matrix is not an array: %s" % str(received_matrix)) + else: + var new_confusion_matrix_gp: Dictionary[int, PackedInt32Array] = {} + for entry: Variant in received_matrix as Array: + if not _is_valid_confusion_entry(entry): + Log.warn("UserDatabaseSynchronizer: Skipping malformed GP confusion matrix entry received from server: %s" % str(entry)) + continue + var pair: Array = entry + new_confusion_matrix_gp[int(pair[0] as float)] = PackedInt32Array(pair[1] as Array) + UserDataManager.set_student_confusion_matrix_gp_data(int(response_student_code), new_confusion_matrix_gp, response_student_data.confusion_matrix_gp.updated_at as String) func synchronize() -> void: @@ -499,6 +488,81 @@ func synchronize() -> void: #region utils +# Parses a JSON-encoded list of [id, score] pairs received from the server +# into out_scores. Returns false when the payload cannot be parsed at all; +# malformed entries are skipped so one bad record cannot abort the whole +# synchronization. +func _parse_score_remediation(raw_scores: Variant, score_type: String, out_scores: Dictionary[int, int]) -> bool: + if not (raw_scores is String): + Log.warn("UserDatabaseSynchronizer: Received %s score remediation is not a string: %s" % [score_type, str(raw_scores)]) + return false + var parsed: Variant = JSON.parse_string(raw_scores as String) + if not (parsed is Array): + Log.warn("UserDatabaseSynchronizer: Cannot parse to JSON the received %s score remediation: %s" % [score_type, raw_scores]) + return false + for entry: Variant in parsed as Array: + if not _is_valid_score_pair(entry): + Log.warn("UserDatabaseSynchronizer: Skipping malformed %s score remediation entry received from server: %s" % [score_type, str(entry)]) + continue + var pair: Array = entry + out_scores[int(pair[0] as float)] = int(pair[1] as float) + return true + + +func _is_number(value: Variant) -> bool: + return value is int or value is float + + +# A score entry received from the server must be an [id, score] pair of numbers. +func _is_valid_score_pair(entry: Variant) -> bool: + if not (entry is Array): + return false + var pair: Array = entry + return pair.size() == 2 and _is_number(pair[0]) and _is_number(pair[1]) + + +# A confusion matrix entry received from the server must be an [id, [counts...]] +# pair where every count is a number. +func _is_valid_confusion_entry(entry: Variant) -> bool: + if not (entry is Array): + return false + var pair: Array = entry + if pair.size() != 2 or not _is_number(pair[0]) or not (pair[1] is Array): + return false + for value: Variant in pair[1] as Array: + if not _is_number(value): + return false + return true + + +# The progression payload received from the server must contain a version, +# a timestamp, and an unlock dictionary. +func _is_valid_progression_payload(payload: Variant) -> bool: + if not (payload is Dictionary): + return false + var progression: Dictionary = payload + return progression.has("version") and progression.has("updated_at") and progression.get("unlocked") is Dictionary + + +# A lesson unlock entry received from the server must contain a numeric +# look_and_learn status and games / last_duration / total_duration arrays +# of numbers. +func _is_valid_unlock_entry(entry: Variant) -> bool: + if not (entry is Dictionary): + return false + var lesson_dict: Dictionary = entry + if not _is_number(lesson_dict.get("look_and_learn")): + return false + for key: String in ["games", "last_duration", "total_duration"]: + var values: Variant = lesson_dict.get(key) + if not (values is Array): + return false + for value: Variant in values as Array: + if not _is_number(value): + return false + return true + + func validate_student_data(data: Dictionary) -> bool: var required_keys: Array[String] = ["device_id", "name", "age", "updated_at"] var missing: Array[String] = [] @@ -514,13 +578,13 @@ func validate_student_data(data: Dictionary) -> bool: func set_loading_bar_progression(value_percent: float, wait_time: float = 0.2) -> void: - if loading_popup != null: + if is_instance_valid(loading_popup) and loading_popup.is_inside_tree(): loading_popup.set_progress(value_percent) await loading_popup.get_tree().create_timer(wait_time).timeout func set_loading_bar_text(message: String) -> void: - if loading_popup != null: + if is_instance_valid(loading_popup): loading_popup.set_text(message) #endregion From 921d13b0cb636657d3144f284d44572cc9389893 Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Thu, 11 Jun 2026 08:09:56 +0200 Subject: [PATCH 102/111] Keep the current language pack until the new one is downloaded The package downloader deleted the installed language pack as soon as a version difference with the server was detected, before the download had even started. If the download then failed (connection drop, server error), the device was left with an empty language directory: on the next offline launch, the directory check failed and the app was unusable until internet access was restored. The early cleanup was also redundant: _copy_data() already removes the existing directory right before extracting the new archive, i.e. after the download has succeeded (HTTP 200). Changes in package_downloader.gd: - Remove the pre-download cleanup of the current language directory; the previous pack now stays usable for offline play until the new one has been fully downloaded. - Check the return value of HTTPRequest.request() and show the download error popup when the request cannot be started, instead of leaving the screen waiting forever on a request that was never sent. - Surface extraction failures (missing archive, unzip error) through the error popup instead of silently returning from the extraction thread and leaving the user stuck on a frozen progress screen. Changes in login.gd: - Handle the result of UserDataManager.login_student(), which was previously logged and ignored. The synchronization performed right before the login can delete or move the student locally (e.g. the server requested a local deletion), in which case the child was sent to the gardens scene with no student session loaded, ending up on a dead screen. On failure, play the wrong-password feedback and reset the code keyboard instead of changing scene. Verified with the GUT test suite (58/58 passing). --- .../language_selection/package_downloader.gd | 18 ++++++++++-------- sources/menus/login/login.gd | 7 +++++++ 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/sources/menus/language_selection/package_downloader.gd b/sources/menus/language_selection/package_downloader.gd index 7bf6a20a..17e5c1fc 100644 --- a/sources/menus/language_selection/package_downloader.gd +++ b/sources/menus/language_selection/package_downloader.gd @@ -97,16 +97,16 @@ func _ready() -> void: # Create the language_resources folder if not DirAccess.dir_exists_absolute(USER_LANGUAGE_RESOURCES_PATH): DirAccess.make_dir_recursive_absolute(USER_LANGUAGE_RESOURCES_PATH) - - # Delete the files from old language pack - if DirAccess.dir_exists_absolute(current_language_path): - Log.trace("PackageDownloader: Cleaning existing language directory at %s" % current_language_path) - Utils.clean_dir(current_language_path) - - # Download the pack + + # Download the pack. The previous pack is kept on disk so the app can + # still run offline if the download fails; it is only removed during + # extraction, once the new pack has been fully downloaded. http_request.set_download_file(USER_LANGUAGE_RESOURCES_PATH.path_join(language + ".zip")) Log.trace("PackageDownloader: Downloading pack from %s" % res.body.url) - http_request.request(res.body.url as String) + var request_error: Error = http_request.request(res.body.url as String) + if request_error != OK: + Log.error("PackageDownloader: Cannot start language pack download: %s" % error_string(request_error)) + _show_error(2) # Error downloading else: download_bar.value = 1 extract_bar.value = 1 @@ -152,6 +152,7 @@ func _copy_data(this: PackageDownloader) -> void: # Check if a zip exists for the complete locale if not FileAccess.file_exists(USER_LANGUAGE_RESOURCES_PATH.path_join(language + ".zip")): Log.warn("PackageDownloader: No downloaded archive found for %s" % language) + this.call_thread_safe("_show_error", 2) # Error downloading return Log.trace("PackageDownloader: Extracting downloaded package") @@ -184,6 +185,7 @@ func _copy_data(this: PackageDownloader) -> void: var subfolder: String = unzipper.extract(language_zip_path, USER_LANGUAGE_RESOURCES_PATH, false) if subfolder == "": Log.error("PackageDownloader: Extraction failed for %s" % language_zip_path) + this.call_thread_safe("_show_error", 2) # Error downloading return # Move the data to the locale folder of the user diff --git a/sources/menus/login/login.gd b/sources/menus/login/login.gd index 40cf922a..58e00e98 100644 --- a/sources/menus/login/login.gd +++ b/sources/menus/login/login.gd @@ -63,6 +63,13 @@ func _on_code_keyboard_password_entered(password: String) -> void: var login_success: bool = UserDataManager.login_student(password) Log.info("LoginScreen: Login attempt for student code %s returned %s" % [password, str(login_success)]) kalulu_button.hide() + if not login_success: + # The synchronization above may have deleted or moved the student + Log.warn("LoginScreen: Login failed for student code %s after synchronization" % password) + await kalulu.play_kalulu_speech(wrong_password_speech) + keyboard.reset_password() + kalulu_button.show() + return await kalulu.play_kalulu_speech(right_password_speech) await OpeningCurtain.close() Log.trace("LoginScreen: Start loading next scene") From 3b597d92d550609b64102a18d1978385aef5681e Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Thu, 11 Jun 2026 08:15:31 +0200 Subject: [PATCH 103/111] Debug test parsing error --- tests/unit_tests/test_minigame.gd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/unit_tests/test_minigame.gd b/tests/unit_tests/test_minigame.gd index f3ea9485..db17a439 100644 --- a/tests/unit_tests/test_minigame.gd +++ b/tests/unit_tests/test_minigame.gd @@ -13,7 +13,7 @@ func test_reset_logs_initializes_answers_bucket() -> void: func test_log_new_response_adds_entry_with_right_answer_metadata() -> void: var minigame: Minigame = Minigame.new() - minigame.minigame_name = Minigame.Type.jellyfish + minigame.minigame_name = Minigame.Type.JELLYFISH minigame.current_number_of_hints = 1 minigame.current_progression = 2 minigame.max_progression = 10 From 896e2740b3996e5a0a4f9e2c63a7124c4466311a Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Thu, 11 Jun 2026 08:44:33 +0200 Subject: [PATCH 104/111] Compress large textures to VRAM formats and enable 2D mipmaps All 747 imported PNGs were imported losslessly (compress/mode=0) without mipmaps. Lossless textures are decompressed to raw RGBA8 in GPU memory, so the big gameplay assets were extremely expensive: the 4100x2448 bush_curtain alone used ~40 MB of VRAM, and the 6400x8001 minigame spritesheets ~205 MB each. Summed over the affected files, the worst-case footprint was ~2.4 GB of texture memory for a game that targets low-end 1-2 GB tablets with the gl_compatibility renderer. The absence of mipmaps also caused shimmering and wasted bandwidth whenever these textures were drawn below their native size, which is almost always the case with the 2560x1800 canvas_items stretch. - Switch the 119 textures with a dimension >= 512 px to VRAM compression (compress/mode=2) with generated mipmaps. The project already enables etc2_astc import, so mobile gets ETC2/ASTC and desktop gets S3TC/BPTC. The total footprint for these textures drops from ~2.4 GB raw RGBA8 to ~770 MB including mipmaps (~3x smaller resident set, plus faster texture uploads). - Keep small UI textures (< 512 px, 626 files) lossless: their VRAM cost is negligible and block-compression artifacts would be most visible on small crisp UI art. - Set the default 2D texture filter to Linear Mipmap so the generated mipmaps are actually sampled by canvas items (without this, mipmap generation would only add memory). - Remove viewport/hdr_2d=true: HDR 2D allocates RGBA16F framebuffers, doubling framebuffer memory and bandwidth at 2560x1800 on exactly the GPUs that can least afford it. No scene uses glow or HDR values (no WorldEnvironment anywhere), so this was pure cost. As false is the default value, Godot drops the line entirely. Texture quality should be eyeballed in the editor on the largest illustrations; any texture where compression artifacts are noticeable can be switched back to lossless individually. Verified with the GUT test suite (62/62 passing). --- assets/bush_curtain.png.import | 12 +++++++----- assets/gardens/gardens/garden_01.png.import | 12 +++++++----- assets/gardens/gardens/garden_02.png.import | 12 +++++++----- assets/gardens/gardens/garden_03.png.import | 12 +++++++----- assets/gardens/gardens/garden_04.png.import | 12 +++++++----- assets/gardens/gardens/garden_05.png.import | 12 +++++++----- assets/gardens/gardens/garden_06.png.import | 12 +++++++----- assets/gardens/gardens/garden_07.png.import | 12 +++++++----- assets/gardens/gardens/garden_08.png.import | 12 +++++++----- assets/gardens/gardens/garden_09.png.import | 12 +++++++----- assets/gardens/gardens/garden_10.png.import | 12 +++++++----- assets/gardens/gardens/garden_11.png.import | 12 +++++++----- assets/gardens/gardens/garden_12.png.import | 12 +++++++----- assets/gardens/gardens/grid_mask.png.import | 12 +++++++----- .../victory_assets/animals/pink_jellyfish.png.import | 12 +++++++----- .../victory_assets/victory_asset_plant_01.png.import | 12 +++++++----- assets/kalulu/kalulu_sprite_sheet.png.import | 12 +++++++----- assets/kalulu_icon.png.import | 12 +++++++----- assets/lesson_screen/big_button.png.import | 12 +++++++----- assets/lesson_screen/big_button_center.png.import | 12 +++++++----- assets/look_and_learn/video_foreground.png.import | 12 +++++++----- assets/look_and_learn/video_mask.png.import | 12 +++++++----- assets/menus/back_button.png.import | 12 +++++++----- ...heckbox_transparent_background_checked.png.import | 12 +++++++----- ...ckbox_transparent_background_unchecked.png.import | 12 +++++++----- .../checkbox_white_background_checked.png.import | 12 +++++++----- .../checkbox_white_background_unchecked.png.import | 12 +++++++----- assets/menus/login/password_background.png.import | 12 +++++++----- assets/menus/main/plants/blue_palm.png.import | 12 +++++++----- assets/menus/main/plants/bush.png.import | 12 +++++++----- assets/menus/main/plants/flower_body.png.import | 12 +++++++----- .../menus/main/plants/large_flower_body.png.import | 12 +++++++----- assets/menus/main/play_button_mask.png.import | 12 +++++++----- assets/menus/main/title.png.import | 12 +++++++----- assets/menus/modify_button.png.import | 12 +++++++----- assets/menus/play_button.png.import | 12 +++++++----- assets/menus/plus_button.png.import | 12 +++++++----- assets/menus/save_button.png.import | 12 +++++++----- assets/menus/save_ok.png.import | 12 +++++++----- assets/menus/upload.png.import | 12 +++++++----- .../ants/graphics/ant_spritesheet.png.import | 12 +++++++----- assets/minigames/ants/graphics/background.png.import | 12 +++++++----- .../ants/graphics/sentence_text_box.png.import | 12 +++++++----- assets/minigames/boss/background.png.import | 12 +++++++----- assets/minigames/boss/foreground.png.import | 12 +++++++----- assets/minigames/boss/frame_corner.png.import | 12 +++++++----- assets/minigames/boss/kalulu_sheet.png.import | 12 +++++++----- assets/minigames/boss/sun.png.import | 12 +++++++----- assets/minigames/boss/text_box_long.png.import | 12 +++++++----- .../boss/text_box_long_outline_dotted.png.import | 12 +++++++----- .../caterpillar/graphics/background.png.import | 12 +++++++----- .../graphics/caterpillar_spritesheet.png.import | 12 +++++++----- assets/minigames/crabs/graphic/background.png.import | 12 +++++++----- .../minigames/crabs/graphic/background_2.png.import | 12 +++++++----- .../crabs/graphic/crab_spritesheet.png.import | 12 +++++++----- assets/minigames/crabs/graphic/hole_mask.png.import | 12 +++++++----- assets/minigames/frog/graphics/background.png.import | 12 +++++++----- .../frog/graphics/background_river.png.import | 12 +++++++----- .../frog/graphics/frog_spritesheet.png.import | 12 +++++++----- .../jellyfish/graphic/background.png.import | 12 +++++++----- .../graphic/blue_jellyfish_layer_1.png.import | 12 +++++++----- .../graphic/blue_jellyfish_layer_2.png.import | 12 +++++++----- .../jellyfish/graphic/green_jellyfish.png.import | 12 +++++++----- .../graphic/pink_jellyfish_layer_1.png.import | 12 +++++++----- .../graphic/pink_jellyfish_layer_2.png.import | 12 +++++++----- .../jellyfish/graphic/red_jellyfish.png.import | 12 +++++++----- assets/minigames/minigame_ui/graphic/bush.png.import | 12 +++++++----- .../graphic/button_back_disabled.png.import | 12 +++++++----- .../graphic/button_back_normal.png.import | 12 +++++++----- .../graphic/button_back_pressed.png.import | 12 +++++++----- .../graphic/button_kalulu_disabled.png.import | 12 +++++++----- .../graphic/button_kalulu_normal.png.import | 12 +++++++----- .../graphic/button_kalulu_pressed.png.import | 12 +++++++----- .../graphic/button_pause_disabled.png.import | 12 +++++++----- .../graphic/button_pause_normal.png.import | 12 +++++++----- .../graphic/button_pause_pressed.png.import | 12 +++++++----- .../graphic/button_shell_disabled.png.import | 12 +++++++----- .../graphic/button_shell_normal.png.import | 12 +++++++----- .../graphic/button_shell_pressed.png.import | 12 +++++++----- .../minigame_ui/graphic/large_flower_body.png.import | 12 +++++++----- .../minigame_ui/graphic/popin_background.png.import | 12 +++++++----- .../minigame_ui/graphic/popin_foreground.png.import | 12 +++++++----- .../minigame_ui/graphic/primary_text_box.png.import | 12 +++++++----- .../graphic/primary_text_box_outline.png.import | 12 +++++++----- .../minigames/minigame_ui/graphic/title.png.import | 12 +++++++----- .../minigames/monkeys/graphic/background.png.import | 12 +++++++----- .../monkeys/graphic/background_shadows.png.import | 12 +++++++----- .../minigames/monkeys/graphic/billboard.png.import | 12 +++++++----- .../minigames/monkeys/graphic/caterpillar.png.import | 12 +++++++----- assets/minigames/monkeys/graphic/ground.png.import | 12 +++++++----- .../monkeys/graphic/king_spritesheet.png.import | 12 +++++++----- .../monkeys/graphic/monkey_spritesheet.png.import | 12 +++++++----- .../minigames/monkeys/graphic/palmtree_01.png.import | 12 +++++++----- .../minigames/monkeys/graphic/palmtree_02.png.import | 12 +++++++----- .../parakeets/graphic/background_1.png.import | 12 +++++++----- .../parakeets/graphic/background_2.png.import | 12 +++++++----- .../parakeets/graphic/background_3.png.import | 12 +++++++----- .../graphic/green_parakeet_spritesheet.png.import | 12 +++++++----- assets/minigames/parakeets/graphic/nest.png.import | 12 +++++++----- .../graphic/red_parakeet_spritesheet.png.import | 12 +++++++----- assets/minigames/parakeets/graphic/tree.png.import | 12 +++++++----- .../parakeets/graphic/tree_trunk.png.import | 12 +++++++----- .../graphic/yellow_parakeet_spritesheet.png.import | 12 +++++++----- .../minigames/penguin/graphic/background.png.import | 12 +++++++----- assets/minigames/penguin/graphic/penguin.png.import | 12 +++++++----- .../graphic/green_turtle_spritesheet.png.import | 12 +++++++----- .../graphic/khaki_turtle_spritesheet.png.import | 12 +++++++----- .../graphic/purple_turtle_spritesheet.png.import | 12 +++++++----- .../turtles/graphic/turtle_background.png.import | 12 +++++++----- .../turtles/graphic/turtle_island.png.import | 12 +++++++----- assets/particles/bigstar_x36_15fps.png.import | 12 +++++++----- assets/prof_tool_icon.png.import | 12 +++++++----- assets/splash.png.import | 12 +++++++----- assets/vfx/firework.png.import | 12 +++++++----- assets/vfx/fx_02.png.import | 12 +++++++----- assets/vfx/fx_09.png.import | 12 +++++++----- assets/vfx/halo.png.import | 12 +++++++----- assets/vfx/star.png.import | 12 +++++++----- project.godot | 2 +- sources/minigames/base/play_button_mask.png.import | 12 +++++++----- 120 files changed, 834 insertions(+), 596 deletions(-) diff --git a/assets/bush_curtain.png.import b/assets/bush_curtain.png.import index d778f92c..21f5a3a3 100644 --- a/assets/bush_curtain.png.import +++ b/assets/bush_curtain.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://cop8iscyxohrb" -path="res://.godot/imported/bush_curtain.png-2e1fb82bc0153666dd15620ed6cf9a14.ctex" +path.s3tc="res://.godot/imported/bush_curtain.png-2e1fb82bc0153666dd15620ed6cf9a14.s3tc.ctex" +path.etc2="res://.godot/imported/bush_curtain.png-2e1fb82bc0153666dd15620ed6cf9a14.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/bush_curtain.png" -dest_files=["res://.godot/imported/bush_curtain.png-2e1fb82bc0153666dd15620ed6cf9a14.ctex"] +dest_files=["res://.godot/imported/bush_curtain.png-2e1fb82bc0153666dd15620ed6cf9a14.s3tc.ctex", "res://.godot/imported/bush_curtain.png-2e1fb82bc0153666dd15620ed6cf9a14.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/gardens/gardens/garden_01.png.import b/assets/gardens/gardens/garden_01.png.import index 273c8b6b..5cd1203e 100644 --- a/assets/gardens/gardens/garden_01.png.import +++ b/assets/gardens/gardens/garden_01.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://d26hapg1hf8a6" -path="res://.godot/imported/garden_01.png-8cec30484a43f71cd614fe156e78443f.ctex" +path.s3tc="res://.godot/imported/garden_01.png-8cec30484a43f71cd614fe156e78443f.s3tc.ctex" +path.etc2="res://.godot/imported/garden_01.png-8cec30484a43f71cd614fe156e78443f.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/gardens/gardens/garden_01.png" -dest_files=["res://.godot/imported/garden_01.png-8cec30484a43f71cd614fe156e78443f.ctex"] +dest_files=["res://.godot/imported/garden_01.png-8cec30484a43f71cd614fe156e78443f.s3tc.ctex", "res://.godot/imported/garden_01.png-8cec30484a43f71cd614fe156e78443f.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/gardens/gardens/garden_02.png.import b/assets/gardens/gardens/garden_02.png.import index a30d76f4..8621d4e1 100644 --- a/assets/gardens/gardens/garden_02.png.import +++ b/assets/gardens/gardens/garden_02.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://4wt50lu3cwbl" -path="res://.godot/imported/garden_02.png-952b73c44e8f297d7146afccf72fa6f8.ctex" +path.s3tc="res://.godot/imported/garden_02.png-952b73c44e8f297d7146afccf72fa6f8.s3tc.ctex" +path.etc2="res://.godot/imported/garden_02.png-952b73c44e8f297d7146afccf72fa6f8.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/gardens/gardens/garden_02.png" -dest_files=["res://.godot/imported/garden_02.png-952b73c44e8f297d7146afccf72fa6f8.ctex"] +dest_files=["res://.godot/imported/garden_02.png-952b73c44e8f297d7146afccf72fa6f8.s3tc.ctex", "res://.godot/imported/garden_02.png-952b73c44e8f297d7146afccf72fa6f8.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/gardens/gardens/garden_03.png.import b/assets/gardens/gardens/garden_03.png.import index 349462a5..25de4342 100644 --- a/assets/gardens/gardens/garden_03.png.import +++ b/assets/gardens/gardens/garden_03.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://ch1ah3nkjy5cl" -path="res://.godot/imported/garden_03.png-5f6b1132537a67d14c76986a1aaf0c9e.ctex" +path.s3tc="res://.godot/imported/garden_03.png-5f6b1132537a67d14c76986a1aaf0c9e.s3tc.ctex" +path.etc2="res://.godot/imported/garden_03.png-5f6b1132537a67d14c76986a1aaf0c9e.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/gardens/gardens/garden_03.png" -dest_files=["res://.godot/imported/garden_03.png-5f6b1132537a67d14c76986a1aaf0c9e.ctex"] +dest_files=["res://.godot/imported/garden_03.png-5f6b1132537a67d14c76986a1aaf0c9e.s3tc.ctex", "res://.godot/imported/garden_03.png-5f6b1132537a67d14c76986a1aaf0c9e.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/gardens/gardens/garden_04.png.import b/assets/gardens/gardens/garden_04.png.import index 1d3d440a..fd835e54 100644 --- a/assets/gardens/gardens/garden_04.png.import +++ b/assets/gardens/gardens/garden_04.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://l32ekwfso26s" -path="res://.godot/imported/garden_04.png-4af29a3ee810ade399f7fba358601b39.ctex" +path.s3tc="res://.godot/imported/garden_04.png-4af29a3ee810ade399f7fba358601b39.s3tc.ctex" +path.etc2="res://.godot/imported/garden_04.png-4af29a3ee810ade399f7fba358601b39.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/gardens/gardens/garden_04.png" -dest_files=["res://.godot/imported/garden_04.png-4af29a3ee810ade399f7fba358601b39.ctex"] +dest_files=["res://.godot/imported/garden_04.png-4af29a3ee810ade399f7fba358601b39.s3tc.ctex", "res://.godot/imported/garden_04.png-4af29a3ee810ade399f7fba358601b39.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/gardens/gardens/garden_05.png.import b/assets/gardens/gardens/garden_05.png.import index b0939c33..45969c72 100644 --- a/assets/gardens/gardens/garden_05.png.import +++ b/assets/gardens/gardens/garden_05.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://d3bu30iutptwx" -path="res://.godot/imported/garden_05.png-b2eede99e5cfc7d755b398e252db8066.ctex" +path.s3tc="res://.godot/imported/garden_05.png-b2eede99e5cfc7d755b398e252db8066.s3tc.ctex" +path.etc2="res://.godot/imported/garden_05.png-b2eede99e5cfc7d755b398e252db8066.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/gardens/gardens/garden_05.png" -dest_files=["res://.godot/imported/garden_05.png-b2eede99e5cfc7d755b398e252db8066.ctex"] +dest_files=["res://.godot/imported/garden_05.png-b2eede99e5cfc7d755b398e252db8066.s3tc.ctex", "res://.godot/imported/garden_05.png-b2eede99e5cfc7d755b398e252db8066.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/gardens/gardens/garden_06.png.import b/assets/gardens/gardens/garden_06.png.import index 982f16a5..91e6ae69 100644 --- a/assets/gardens/gardens/garden_06.png.import +++ b/assets/gardens/gardens/garden_06.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://bhamsdjj677b3" -path="res://.godot/imported/garden_06.png-943860b612f9520e74a0732cde3cbfe6.ctex" +path.s3tc="res://.godot/imported/garden_06.png-943860b612f9520e74a0732cde3cbfe6.s3tc.ctex" +path.etc2="res://.godot/imported/garden_06.png-943860b612f9520e74a0732cde3cbfe6.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/gardens/gardens/garden_06.png" -dest_files=["res://.godot/imported/garden_06.png-943860b612f9520e74a0732cde3cbfe6.ctex"] +dest_files=["res://.godot/imported/garden_06.png-943860b612f9520e74a0732cde3cbfe6.s3tc.ctex", "res://.godot/imported/garden_06.png-943860b612f9520e74a0732cde3cbfe6.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/gardens/gardens/garden_07.png.import b/assets/gardens/gardens/garden_07.png.import index 8523e609..8c448970 100644 --- a/assets/gardens/gardens/garden_07.png.import +++ b/assets/gardens/gardens/garden_07.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://clcff3fg5jd2k" -path="res://.godot/imported/garden_07.png-552b63ddceeb7d6136f933619623d519.ctex" +path.s3tc="res://.godot/imported/garden_07.png-552b63ddceeb7d6136f933619623d519.s3tc.ctex" +path.etc2="res://.godot/imported/garden_07.png-552b63ddceeb7d6136f933619623d519.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/gardens/gardens/garden_07.png" -dest_files=["res://.godot/imported/garden_07.png-552b63ddceeb7d6136f933619623d519.ctex"] +dest_files=["res://.godot/imported/garden_07.png-552b63ddceeb7d6136f933619623d519.s3tc.ctex", "res://.godot/imported/garden_07.png-552b63ddceeb7d6136f933619623d519.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/gardens/gardens/garden_08.png.import b/assets/gardens/gardens/garden_08.png.import index 622cc4e8..ab825cf4 100644 --- a/assets/gardens/gardens/garden_08.png.import +++ b/assets/gardens/gardens/garden_08.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://kgeoctiggnxx" -path="res://.godot/imported/garden_08.png-60a000c144495dd62452995bc8932932.ctex" +path.s3tc="res://.godot/imported/garden_08.png-60a000c144495dd62452995bc8932932.s3tc.ctex" +path.etc2="res://.godot/imported/garden_08.png-60a000c144495dd62452995bc8932932.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/gardens/gardens/garden_08.png" -dest_files=["res://.godot/imported/garden_08.png-60a000c144495dd62452995bc8932932.ctex"] +dest_files=["res://.godot/imported/garden_08.png-60a000c144495dd62452995bc8932932.s3tc.ctex", "res://.godot/imported/garden_08.png-60a000c144495dd62452995bc8932932.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/gardens/gardens/garden_09.png.import b/assets/gardens/gardens/garden_09.png.import index 322ab0fd..ecb80bce 100644 --- a/assets/gardens/gardens/garden_09.png.import +++ b/assets/gardens/gardens/garden_09.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://dqk14m4demy3a" -path="res://.godot/imported/garden_09.png-4a49e6b67d1574a86d201faadd295c12.ctex" +path.s3tc="res://.godot/imported/garden_09.png-4a49e6b67d1574a86d201faadd295c12.s3tc.ctex" +path.etc2="res://.godot/imported/garden_09.png-4a49e6b67d1574a86d201faadd295c12.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/gardens/gardens/garden_09.png" -dest_files=["res://.godot/imported/garden_09.png-4a49e6b67d1574a86d201faadd295c12.ctex"] +dest_files=["res://.godot/imported/garden_09.png-4a49e6b67d1574a86d201faadd295c12.s3tc.ctex", "res://.godot/imported/garden_09.png-4a49e6b67d1574a86d201faadd295c12.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/gardens/gardens/garden_10.png.import b/assets/gardens/gardens/garden_10.png.import index 90766fbe..4990616e 100644 --- a/assets/gardens/gardens/garden_10.png.import +++ b/assets/gardens/gardens/garden_10.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://cahtl4j3wxahn" -path="res://.godot/imported/garden_10.png-39a7d010b681ef7c20becd3e54ebced2.ctex" +path.s3tc="res://.godot/imported/garden_10.png-39a7d010b681ef7c20becd3e54ebced2.s3tc.ctex" +path.etc2="res://.godot/imported/garden_10.png-39a7d010b681ef7c20becd3e54ebced2.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/gardens/gardens/garden_10.png" -dest_files=["res://.godot/imported/garden_10.png-39a7d010b681ef7c20becd3e54ebced2.ctex"] +dest_files=["res://.godot/imported/garden_10.png-39a7d010b681ef7c20becd3e54ebced2.s3tc.ctex", "res://.godot/imported/garden_10.png-39a7d010b681ef7c20becd3e54ebced2.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/gardens/gardens/garden_11.png.import b/assets/gardens/gardens/garden_11.png.import index 9b466f39..fb5f77b2 100644 --- a/assets/gardens/gardens/garden_11.png.import +++ b/assets/gardens/gardens/garden_11.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://dpl670l7onk5n" -path="res://.godot/imported/garden_11.png-cfde776b2d9c071e225bed94f36560e1.ctex" +path.s3tc="res://.godot/imported/garden_11.png-cfde776b2d9c071e225bed94f36560e1.s3tc.ctex" +path.etc2="res://.godot/imported/garden_11.png-cfde776b2d9c071e225bed94f36560e1.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/gardens/gardens/garden_11.png" -dest_files=["res://.godot/imported/garden_11.png-cfde776b2d9c071e225bed94f36560e1.ctex"] +dest_files=["res://.godot/imported/garden_11.png-cfde776b2d9c071e225bed94f36560e1.s3tc.ctex", "res://.godot/imported/garden_11.png-cfde776b2d9c071e225bed94f36560e1.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/gardens/gardens/garden_12.png.import b/assets/gardens/gardens/garden_12.png.import index a8eef7d3..779b2b8a 100644 --- a/assets/gardens/gardens/garden_12.png.import +++ b/assets/gardens/gardens/garden_12.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://b6pmtjjp4rejb" -path="res://.godot/imported/garden_12.png-13d7be39631648987956568e37e0e56f.ctex" +path.s3tc="res://.godot/imported/garden_12.png-13d7be39631648987956568e37e0e56f.s3tc.ctex" +path.etc2="res://.godot/imported/garden_12.png-13d7be39631648987956568e37e0e56f.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/gardens/gardens/garden_12.png" -dest_files=["res://.godot/imported/garden_12.png-13d7be39631648987956568e37e0e56f.ctex"] +dest_files=["res://.godot/imported/garden_12.png-13d7be39631648987956568e37e0e56f.s3tc.ctex", "res://.godot/imported/garden_12.png-13d7be39631648987956568e37e0e56f.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/gardens/gardens/grid_mask.png.import b/assets/gardens/gardens/grid_mask.png.import index c5d09a15..d03ab0e7 100644 --- a/assets/gardens/gardens/grid_mask.png.import +++ b/assets/gardens/gardens/grid_mask.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://clwx5ksla5icp" -path="res://.godot/imported/grid_mask.png-7fa416ead6aed7fdc7f00b4b1f1af50b.ctex" +path.s3tc="res://.godot/imported/grid_mask.png-7fa416ead6aed7fdc7f00b4b1f1af50b.s3tc.ctex" +path.etc2="res://.godot/imported/grid_mask.png-7fa416ead6aed7fdc7f00b4b1f1af50b.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/gardens/gardens/grid_mask.png" -dest_files=["res://.godot/imported/grid_mask.png-7fa416ead6aed7fdc7f00b4b1f1af50b.ctex"] +dest_files=["res://.godot/imported/grid_mask.png-7fa416ead6aed7fdc7f00b4b1f1af50b.s3tc.ctex", "res://.godot/imported/grid_mask.png-7fa416ead6aed7fdc7f00b4b1f1af50b.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/gardens/victory_assets/animals/pink_jellyfish.png.import b/assets/gardens/victory_assets/animals/pink_jellyfish.png.import index a61f69ae..892c7d85 100644 --- a/assets/gardens/victory_assets/animals/pink_jellyfish.png.import +++ b/assets/gardens/victory_assets/animals/pink_jellyfish.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://dcuobvoav863b" -path="res://.godot/imported/pink_jellyfish.png-99508b215ac7a943286e22be8a93bcd0.ctex" +path.s3tc="res://.godot/imported/pink_jellyfish.png-99508b215ac7a943286e22be8a93bcd0.s3tc.ctex" +path.etc2="res://.godot/imported/pink_jellyfish.png-99508b215ac7a943286e22be8a93bcd0.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/gardens/victory_assets/animals/pink_jellyfish.png" -dest_files=["res://.godot/imported/pink_jellyfish.png-99508b215ac7a943286e22be8a93bcd0.ctex"] +dest_files=["res://.godot/imported/pink_jellyfish.png-99508b215ac7a943286e22be8a93bcd0.s3tc.ctex", "res://.godot/imported/pink_jellyfish.png-99508b215ac7a943286e22be8a93bcd0.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/gardens/victory_assets/victory_asset_plant_01.png.import b/assets/gardens/victory_assets/victory_asset_plant_01.png.import index 6c7e8e33..69d0e23d 100644 --- a/assets/gardens/victory_assets/victory_asset_plant_01.png.import +++ b/assets/gardens/victory_assets/victory_asset_plant_01.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://dcekseb1b3ruw" -path="res://.godot/imported/victory_asset_plant_01.png-931e26d06bf2aa7ff030305e632dead0.ctex" +path.s3tc="res://.godot/imported/victory_asset_plant_01.png-931e26d06bf2aa7ff030305e632dead0.s3tc.ctex" +path.etc2="res://.godot/imported/victory_asset_plant_01.png-931e26d06bf2aa7ff030305e632dead0.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/gardens/victory_assets/victory_asset_plant_01.png" -dest_files=["res://.godot/imported/victory_asset_plant_01.png-931e26d06bf2aa7ff030305e632dead0.ctex"] +dest_files=["res://.godot/imported/victory_asset_plant_01.png-931e26d06bf2aa7ff030305e632dead0.s3tc.ctex", "res://.godot/imported/victory_asset_plant_01.png-931e26d06bf2aa7ff030305e632dead0.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/kalulu/kalulu_sprite_sheet.png.import b/assets/kalulu/kalulu_sprite_sheet.png.import index 73565f01..a1a8079f 100644 --- a/assets/kalulu/kalulu_sprite_sheet.png.import +++ b/assets/kalulu/kalulu_sprite_sheet.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://dyew66g5dsnt3" -path="res://.godot/imported/kalulu_sprite_sheet.png-3266bfa62ea85333598f1c606ce0e83d.ctex" +path.s3tc="res://.godot/imported/kalulu_sprite_sheet.png-3266bfa62ea85333598f1c606ce0e83d.s3tc.ctex" +path.etc2="res://.godot/imported/kalulu_sprite_sheet.png-3266bfa62ea85333598f1c606ce0e83d.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/kalulu/kalulu_sprite_sheet.png" -dest_files=["res://.godot/imported/kalulu_sprite_sheet.png-3266bfa62ea85333598f1c606ce0e83d.ctex"] +dest_files=["res://.godot/imported/kalulu_sprite_sheet.png-3266bfa62ea85333598f1c606ce0e83d.s3tc.ctex", "res://.godot/imported/kalulu_sprite_sheet.png-3266bfa62ea85333598f1c606ce0e83d.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/kalulu_icon.png.import b/assets/kalulu_icon.png.import index 75adb155..ab9763e2 100644 --- a/assets/kalulu_icon.png.import +++ b/assets/kalulu_icon.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://cctkobpymorie" -path="res://.godot/imported/kalulu_icon.png-bb597b448cea4ff060aed1f51bb02451.ctex" +path.s3tc="res://.godot/imported/kalulu_icon.png-bb597b448cea4ff060aed1f51bb02451.s3tc.ctex" +path.etc2="res://.godot/imported/kalulu_icon.png-bb597b448cea4ff060aed1f51bb02451.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/kalulu_icon.png" -dest_files=["res://.godot/imported/kalulu_icon.png-bb597b448cea4ff060aed1f51bb02451.ctex"] +dest_files=["res://.godot/imported/kalulu_icon.png-bb597b448cea4ff060aed1f51bb02451.s3tc.ctex", "res://.godot/imported/kalulu_icon.png-bb597b448cea4ff060aed1f51bb02451.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/lesson_screen/big_button.png.import b/assets/lesson_screen/big_button.png.import index 86a0d58a..7165a455 100644 --- a/assets/lesson_screen/big_button.png.import +++ b/assets/lesson_screen/big_button.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://bb00fhnenbml5" -path="res://.godot/imported/big_button.png-2d1f065099914861a41cb711caf148c4.ctex" +path.s3tc="res://.godot/imported/big_button.png-2d1f065099914861a41cb711caf148c4.s3tc.ctex" +path.etc2="res://.godot/imported/big_button.png-2d1f065099914861a41cb711caf148c4.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/lesson_screen/big_button.png" -dest_files=["res://.godot/imported/big_button.png-2d1f065099914861a41cb711caf148c4.ctex"] +dest_files=["res://.godot/imported/big_button.png-2d1f065099914861a41cb711caf148c4.s3tc.ctex", "res://.godot/imported/big_button.png-2d1f065099914861a41cb711caf148c4.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/lesson_screen/big_button_center.png.import b/assets/lesson_screen/big_button_center.png.import index a8fc39de..47f33db8 100644 --- a/assets/lesson_screen/big_button_center.png.import +++ b/assets/lesson_screen/big_button_center.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://dlnklpyefn0m2" -path="res://.godot/imported/big_button_center.png-26d8ff0bd3ec429d10c7fc2ee4fd829c.ctex" +path.s3tc="res://.godot/imported/big_button_center.png-26d8ff0bd3ec429d10c7fc2ee4fd829c.s3tc.ctex" +path.etc2="res://.godot/imported/big_button_center.png-26d8ff0bd3ec429d10c7fc2ee4fd829c.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/lesson_screen/big_button_center.png" -dest_files=["res://.godot/imported/big_button_center.png-26d8ff0bd3ec429d10c7fc2ee4fd829c.ctex"] +dest_files=["res://.godot/imported/big_button_center.png-26d8ff0bd3ec429d10c7fc2ee4fd829c.s3tc.ctex", "res://.godot/imported/big_button_center.png-26d8ff0bd3ec429d10c7fc2ee4fd829c.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/look_and_learn/video_foreground.png.import b/assets/look_and_learn/video_foreground.png.import index 1d4e1372..7e1b07ed 100644 --- a/assets/look_and_learn/video_foreground.png.import +++ b/assets/look_and_learn/video_foreground.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://c1i3kqeg7ifoo" -path="res://.godot/imported/video_foreground.png-b57933e17e07d2a26c495548452d5df6.ctex" +path.s3tc="res://.godot/imported/video_foreground.png-b57933e17e07d2a26c495548452d5df6.s3tc.ctex" +path.etc2="res://.godot/imported/video_foreground.png-b57933e17e07d2a26c495548452d5df6.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/look_and_learn/video_foreground.png" -dest_files=["res://.godot/imported/video_foreground.png-b57933e17e07d2a26c495548452d5df6.ctex"] +dest_files=["res://.godot/imported/video_foreground.png-b57933e17e07d2a26c495548452d5df6.s3tc.ctex", "res://.godot/imported/video_foreground.png-b57933e17e07d2a26c495548452d5df6.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/look_and_learn/video_mask.png.import b/assets/look_and_learn/video_mask.png.import index 5b29d52d..6f8bc102 100644 --- a/assets/look_and_learn/video_mask.png.import +++ b/assets/look_and_learn/video_mask.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://c72ebvussuekg" -path="res://.godot/imported/video_mask.png-115951e1c97d53411f566a917b9ba3fc.ctex" +path.s3tc="res://.godot/imported/video_mask.png-115951e1c97d53411f566a917b9ba3fc.s3tc.ctex" +path.etc2="res://.godot/imported/video_mask.png-115951e1c97d53411f566a917b9ba3fc.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/look_and_learn/video_mask.png" -dest_files=["res://.godot/imported/video_mask.png-115951e1c97d53411f566a917b9ba3fc.ctex"] +dest_files=["res://.godot/imported/video_mask.png-115951e1c97d53411f566a917b9ba3fc.s3tc.ctex", "res://.godot/imported/video_mask.png-115951e1c97d53411f566a917b9ba3fc.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/menus/back_button.png.import b/assets/menus/back_button.png.import index 38a3f514..34f98cee 100644 --- a/assets/menus/back_button.png.import +++ b/assets/menus/back_button.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://cw15lg6j37pvj" -path="res://.godot/imported/back_button.png-b90a73672942d9f08b188d6a9f1696a0.ctex" +path.s3tc="res://.godot/imported/back_button.png-b90a73672942d9f08b188d6a9f1696a0.s3tc.ctex" +path.etc2="res://.godot/imported/back_button.png-b90a73672942d9f08b188d6a9f1696a0.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/menus/back_button.png" -dest_files=["res://.godot/imported/back_button.png-b90a73672942d9f08b188d6a9f1696a0.ctex"] +dest_files=["res://.godot/imported/back_button.png-b90a73672942d9f08b188d6a9f1696a0.s3tc.ctex", "res://.godot/imported/back_button.png-b90a73672942d9f08b188d6a9f1696a0.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/menus/checkbox_transparent_background_checked.png.import b/assets/menus/checkbox_transparent_background_checked.png.import index e541c6eb..d2094d21 100644 --- a/assets/menus/checkbox_transparent_background_checked.png.import +++ b/assets/menus/checkbox_transparent_background_checked.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://7q3lm3o8ihxn" -path="res://.godot/imported/checkbox_transparent_background_checked.png-1dc430c45397b535abbb95e3967216a0.ctex" +path.s3tc="res://.godot/imported/checkbox_transparent_background_checked.png-1dc430c45397b535abbb95e3967216a0.s3tc.ctex" +path.etc2="res://.godot/imported/checkbox_transparent_background_checked.png-1dc430c45397b535abbb95e3967216a0.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/menus/checkbox_transparent_background_checked.png" -dest_files=["res://.godot/imported/checkbox_transparent_background_checked.png-1dc430c45397b535abbb95e3967216a0.ctex"] +dest_files=["res://.godot/imported/checkbox_transparent_background_checked.png-1dc430c45397b535abbb95e3967216a0.s3tc.ctex", "res://.godot/imported/checkbox_transparent_background_checked.png-1dc430c45397b535abbb95e3967216a0.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/menus/checkbox_transparent_background_unchecked.png.import b/assets/menus/checkbox_transparent_background_unchecked.png.import index 4157018e..8dd8d7c0 100644 --- a/assets/menus/checkbox_transparent_background_unchecked.png.import +++ b/assets/menus/checkbox_transparent_background_unchecked.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://s0k8emrncuwk" -path="res://.godot/imported/checkbox_transparent_background_unchecked.png-c25351e55809d2db634289acc1028afb.ctex" +path.s3tc="res://.godot/imported/checkbox_transparent_background_unchecked.png-c25351e55809d2db634289acc1028afb.s3tc.ctex" +path.etc2="res://.godot/imported/checkbox_transparent_background_unchecked.png-c25351e55809d2db634289acc1028afb.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/menus/checkbox_transparent_background_unchecked.png" -dest_files=["res://.godot/imported/checkbox_transparent_background_unchecked.png-c25351e55809d2db634289acc1028afb.ctex"] +dest_files=["res://.godot/imported/checkbox_transparent_background_unchecked.png-c25351e55809d2db634289acc1028afb.s3tc.ctex", "res://.godot/imported/checkbox_transparent_background_unchecked.png-c25351e55809d2db634289acc1028afb.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/menus/checkbox_white_background_checked.png.import b/assets/menus/checkbox_white_background_checked.png.import index 4ff9b4dc..e7209aaf 100644 --- a/assets/menus/checkbox_white_background_checked.png.import +++ b/assets/menus/checkbox_white_background_checked.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://dji28uchuubxn" -path="res://.godot/imported/checkbox_white_background_checked.png-9b80aad00e4db61e15654feeadb8e668.ctex" +path.s3tc="res://.godot/imported/checkbox_white_background_checked.png-9b80aad00e4db61e15654feeadb8e668.s3tc.ctex" +path.etc2="res://.godot/imported/checkbox_white_background_checked.png-9b80aad00e4db61e15654feeadb8e668.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/menus/checkbox_white_background_checked.png" -dest_files=["res://.godot/imported/checkbox_white_background_checked.png-9b80aad00e4db61e15654feeadb8e668.ctex"] +dest_files=["res://.godot/imported/checkbox_white_background_checked.png-9b80aad00e4db61e15654feeadb8e668.s3tc.ctex", "res://.godot/imported/checkbox_white_background_checked.png-9b80aad00e4db61e15654feeadb8e668.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/menus/checkbox_white_background_unchecked.png.import b/assets/menus/checkbox_white_background_unchecked.png.import index 1d4e6a7a..286cd322 100644 --- a/assets/menus/checkbox_white_background_unchecked.png.import +++ b/assets/menus/checkbox_white_background_unchecked.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://d32u1cm8m7wiw" -path="res://.godot/imported/checkbox_white_background_unchecked.png-7209fcc9e04c13a80ed4396aec64cf23.ctex" +path.s3tc="res://.godot/imported/checkbox_white_background_unchecked.png-7209fcc9e04c13a80ed4396aec64cf23.s3tc.ctex" +path.etc2="res://.godot/imported/checkbox_white_background_unchecked.png-7209fcc9e04c13a80ed4396aec64cf23.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/menus/checkbox_white_background_unchecked.png" -dest_files=["res://.godot/imported/checkbox_white_background_unchecked.png-7209fcc9e04c13a80ed4396aec64cf23.ctex"] +dest_files=["res://.godot/imported/checkbox_white_background_unchecked.png-7209fcc9e04c13a80ed4396aec64cf23.s3tc.ctex", "res://.godot/imported/checkbox_white_background_unchecked.png-7209fcc9e04c13a80ed4396aec64cf23.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/menus/login/password_background.png.import b/assets/menus/login/password_background.png.import index d176b740..a2bb09fd 100644 --- a/assets/menus/login/password_background.png.import +++ b/assets/menus/login/password_background.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://d3rhl050u0ahl" -path="res://.godot/imported/password_background.png-6cae367f4dcff551398f76cfd245c9cc.ctex" +path.s3tc="res://.godot/imported/password_background.png-6cae367f4dcff551398f76cfd245c9cc.s3tc.ctex" +path.etc2="res://.godot/imported/password_background.png-6cae367f4dcff551398f76cfd245c9cc.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/menus/login/password_background.png" -dest_files=["res://.godot/imported/password_background.png-6cae367f4dcff551398f76cfd245c9cc.ctex"] +dest_files=["res://.godot/imported/password_background.png-6cae367f4dcff551398f76cfd245c9cc.s3tc.ctex", "res://.godot/imported/password_background.png-6cae367f4dcff551398f76cfd245c9cc.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/menus/main/plants/blue_palm.png.import b/assets/menus/main/plants/blue_palm.png.import index 4f45c9c6..9fd4baf5 100644 --- a/assets/menus/main/plants/blue_palm.png.import +++ b/assets/menus/main/plants/blue_palm.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://wylvu8nc54ow" -path="res://.godot/imported/blue_palm.png-fde1444fb2a9b8953e11e503abac50b6.ctex" +path.s3tc="res://.godot/imported/blue_palm.png-fde1444fb2a9b8953e11e503abac50b6.s3tc.ctex" +path.etc2="res://.godot/imported/blue_palm.png-fde1444fb2a9b8953e11e503abac50b6.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/menus/main/plants/blue_palm.png" -dest_files=["res://.godot/imported/blue_palm.png-fde1444fb2a9b8953e11e503abac50b6.ctex"] +dest_files=["res://.godot/imported/blue_palm.png-fde1444fb2a9b8953e11e503abac50b6.s3tc.ctex", "res://.godot/imported/blue_palm.png-fde1444fb2a9b8953e11e503abac50b6.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/menus/main/plants/bush.png.import b/assets/menus/main/plants/bush.png.import index 01022d8a..c3332584 100644 --- a/assets/menus/main/plants/bush.png.import +++ b/assets/menus/main/plants/bush.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://digxl4htxkdqp" -path="res://.godot/imported/bush.png-f0aa119f63952acb9b3a855ebd06acef.ctex" +path.s3tc="res://.godot/imported/bush.png-f0aa119f63952acb9b3a855ebd06acef.s3tc.ctex" +path.etc2="res://.godot/imported/bush.png-f0aa119f63952acb9b3a855ebd06acef.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/menus/main/plants/bush.png" -dest_files=["res://.godot/imported/bush.png-f0aa119f63952acb9b3a855ebd06acef.ctex"] +dest_files=["res://.godot/imported/bush.png-f0aa119f63952acb9b3a855ebd06acef.s3tc.ctex", "res://.godot/imported/bush.png-f0aa119f63952acb9b3a855ebd06acef.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/menus/main/plants/flower_body.png.import b/assets/menus/main/plants/flower_body.png.import index 02bc44b8..b3a178dd 100644 --- a/assets/menus/main/plants/flower_body.png.import +++ b/assets/menus/main/plants/flower_body.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://dgsekh110qlse" -path="res://.godot/imported/flower_body.png-6619db38044cad3f1bef2b5c752a3c4a.ctex" +path.s3tc="res://.godot/imported/flower_body.png-6619db38044cad3f1bef2b5c752a3c4a.s3tc.ctex" +path.etc2="res://.godot/imported/flower_body.png-6619db38044cad3f1bef2b5c752a3c4a.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/menus/main/plants/flower_body.png" -dest_files=["res://.godot/imported/flower_body.png-6619db38044cad3f1bef2b5c752a3c4a.ctex"] +dest_files=["res://.godot/imported/flower_body.png-6619db38044cad3f1bef2b5c752a3c4a.s3tc.ctex", "res://.godot/imported/flower_body.png-6619db38044cad3f1bef2b5c752a3c4a.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/menus/main/plants/large_flower_body.png.import b/assets/menus/main/plants/large_flower_body.png.import index 567805ec..62c3cd16 100644 --- a/assets/menus/main/plants/large_flower_body.png.import +++ b/assets/menus/main/plants/large_flower_body.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://b6l305fj6ynnv" -path="res://.godot/imported/large_flower_body.png-c7e3feabfe10a2a72c7bc6800559fd5b.ctex" +path.s3tc="res://.godot/imported/large_flower_body.png-c7e3feabfe10a2a72c7bc6800559fd5b.s3tc.ctex" +path.etc2="res://.godot/imported/large_flower_body.png-c7e3feabfe10a2a72c7bc6800559fd5b.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/menus/main/plants/large_flower_body.png" -dest_files=["res://.godot/imported/large_flower_body.png-c7e3feabfe10a2a72c7bc6800559fd5b.ctex"] +dest_files=["res://.godot/imported/large_flower_body.png-c7e3feabfe10a2a72c7bc6800559fd5b.s3tc.ctex", "res://.godot/imported/large_flower_body.png-c7e3feabfe10a2a72c7bc6800559fd5b.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/menus/main/play_button_mask.png.import b/assets/menus/main/play_button_mask.png.import index 3324db7b..7a9df20d 100644 --- a/assets/menus/main/play_button_mask.png.import +++ b/assets/menus/main/play_button_mask.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://bbip3wpyidt1q" -path="res://.godot/imported/play_button_mask.png-5ad05aadb5116990ffd618e8dac49d33.ctex" +path.s3tc="res://.godot/imported/play_button_mask.png-5ad05aadb5116990ffd618e8dac49d33.s3tc.ctex" +path.etc2="res://.godot/imported/play_button_mask.png-5ad05aadb5116990ffd618e8dac49d33.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/menus/main/play_button_mask.png" -dest_files=["res://.godot/imported/play_button_mask.png-5ad05aadb5116990ffd618e8dac49d33.ctex"] +dest_files=["res://.godot/imported/play_button_mask.png-5ad05aadb5116990ffd618e8dac49d33.s3tc.ctex", "res://.godot/imported/play_button_mask.png-5ad05aadb5116990ffd618e8dac49d33.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/menus/main/title.png.import b/assets/menus/main/title.png.import index ed305ada..d28d64a5 100644 --- a/assets/menus/main/title.png.import +++ b/assets/menus/main/title.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://cgrl5x2iqbiwg" -path="res://.godot/imported/title.png-92c5b7d29f2f2dfe55a460207b8210ce.ctex" +path.s3tc="res://.godot/imported/title.png-92c5b7d29f2f2dfe55a460207b8210ce.s3tc.ctex" +path.etc2="res://.godot/imported/title.png-92c5b7d29f2f2dfe55a460207b8210ce.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/menus/main/title.png" -dest_files=["res://.godot/imported/title.png-92c5b7d29f2f2dfe55a460207b8210ce.ctex"] +dest_files=["res://.godot/imported/title.png-92c5b7d29f2f2dfe55a460207b8210ce.s3tc.ctex", "res://.godot/imported/title.png-92c5b7d29f2f2dfe55a460207b8210ce.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/menus/modify_button.png.import b/assets/menus/modify_button.png.import index f2dc7277..bfc671eb 100644 --- a/assets/menus/modify_button.png.import +++ b/assets/menus/modify_button.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://c5jiyxrmmjmdb" -path="res://.godot/imported/modify_button.png-2b8dde2439c7c1a06f1d07c9263d0418.ctex" +path.s3tc="res://.godot/imported/modify_button.png-2b8dde2439c7c1a06f1d07c9263d0418.s3tc.ctex" +path.etc2="res://.godot/imported/modify_button.png-2b8dde2439c7c1a06f1d07c9263d0418.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/menus/modify_button.png" -dest_files=["res://.godot/imported/modify_button.png-2b8dde2439c7c1a06f1d07c9263d0418.ctex"] +dest_files=["res://.godot/imported/modify_button.png-2b8dde2439c7c1a06f1d07c9263d0418.s3tc.ctex", "res://.godot/imported/modify_button.png-2b8dde2439c7c1a06f1d07c9263d0418.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/menus/play_button.png.import b/assets/menus/play_button.png.import index ee747c1a..53c0772d 100644 --- a/assets/menus/play_button.png.import +++ b/assets/menus/play_button.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://ctike5jfpr68v" -path="res://.godot/imported/play_button.png-00741f6ebfe0fb1aa0a4531c109dd421.ctex" +path.s3tc="res://.godot/imported/play_button.png-00741f6ebfe0fb1aa0a4531c109dd421.s3tc.ctex" +path.etc2="res://.godot/imported/play_button.png-00741f6ebfe0fb1aa0a4531c109dd421.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/menus/play_button.png" -dest_files=["res://.godot/imported/play_button.png-00741f6ebfe0fb1aa0a4531c109dd421.ctex"] +dest_files=["res://.godot/imported/play_button.png-00741f6ebfe0fb1aa0a4531c109dd421.s3tc.ctex", "res://.godot/imported/play_button.png-00741f6ebfe0fb1aa0a4531c109dd421.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/menus/plus_button.png.import b/assets/menus/plus_button.png.import index 4df11f3a..dc29bc82 100644 --- a/assets/menus/plus_button.png.import +++ b/assets/menus/plus_button.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://ouhnm00r8rt6" -path="res://.godot/imported/plus_button.png-df33a515f03310d6c8b09c259ab5bb94.ctex" +path.s3tc="res://.godot/imported/plus_button.png-df33a515f03310d6c8b09c259ab5bb94.s3tc.ctex" +path.etc2="res://.godot/imported/plus_button.png-df33a515f03310d6c8b09c259ab5bb94.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/menus/plus_button.png" -dest_files=["res://.godot/imported/plus_button.png-df33a515f03310d6c8b09c259ab5bb94.ctex"] +dest_files=["res://.godot/imported/plus_button.png-df33a515f03310d6c8b09c259ab5bb94.s3tc.ctex", "res://.godot/imported/plus_button.png-df33a515f03310d6c8b09c259ab5bb94.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/menus/save_button.png.import b/assets/menus/save_button.png.import index fe31cb77..11ff3a35 100644 --- a/assets/menus/save_button.png.import +++ b/assets/menus/save_button.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://5n02dxd66fw4" -path="res://.godot/imported/save_button.png-e0abff5de73db7c1ad84988080c20282.ctex" +path.s3tc="res://.godot/imported/save_button.png-e0abff5de73db7c1ad84988080c20282.s3tc.ctex" +path.etc2="res://.godot/imported/save_button.png-e0abff5de73db7c1ad84988080c20282.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/menus/save_button.png" -dest_files=["res://.godot/imported/save_button.png-e0abff5de73db7c1ad84988080c20282.ctex"] +dest_files=["res://.godot/imported/save_button.png-e0abff5de73db7c1ad84988080c20282.s3tc.ctex", "res://.godot/imported/save_button.png-e0abff5de73db7c1ad84988080c20282.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/menus/save_ok.png.import b/assets/menus/save_ok.png.import index d01163ca..163fa2c4 100644 --- a/assets/menus/save_ok.png.import +++ b/assets/menus/save_ok.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://cs7v0nap5hadi" -path="res://.godot/imported/save_ok.png-00f2e75f4737ed4b80b793ebf1493136.ctex" +path.s3tc="res://.godot/imported/save_ok.png-00f2e75f4737ed4b80b793ebf1493136.s3tc.ctex" +path.etc2="res://.godot/imported/save_ok.png-00f2e75f4737ed4b80b793ebf1493136.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/menus/save_ok.png" -dest_files=["res://.godot/imported/save_ok.png-00f2e75f4737ed4b80b793ebf1493136.ctex"] +dest_files=["res://.godot/imported/save_ok.png-00f2e75f4737ed4b80b793ebf1493136.s3tc.ctex", "res://.godot/imported/save_ok.png-00f2e75f4737ed4b80b793ebf1493136.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/menus/upload.png.import b/assets/menus/upload.png.import index ae74e562..e3ec8268 100644 --- a/assets/menus/upload.png.import +++ b/assets/menus/upload.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://5fffpm7hc12k" -path="res://.godot/imported/upload.png-34db21b9ba0699b5022e0a6835ec0d43.ctex" +path.s3tc="res://.godot/imported/upload.png-34db21b9ba0699b5022e0a6835ec0d43.s3tc.ctex" +path.etc2="res://.godot/imported/upload.png-34db21b9ba0699b5022e0a6835ec0d43.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/menus/upload.png" -dest_files=["res://.godot/imported/upload.png-34db21b9ba0699b5022e0a6835ec0d43.ctex"] +dest_files=["res://.godot/imported/upload.png-34db21b9ba0699b5022e0a6835ec0d43.s3tc.ctex", "res://.godot/imported/upload.png-34db21b9ba0699b5022e0a6835ec0d43.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/minigames/ants/graphics/ant_spritesheet.png.import b/assets/minigames/ants/graphics/ant_spritesheet.png.import index 7bbbe340..ae3cada2 100644 --- a/assets/minigames/ants/graphics/ant_spritesheet.png.import +++ b/assets/minigames/ants/graphics/ant_spritesheet.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://cfd278lhnobop" -path="res://.godot/imported/ant_spritesheet.png-c145cf97a43c25c5c71895b7ed6c1eb5.ctex" +path.s3tc="res://.godot/imported/ant_spritesheet.png-c145cf97a43c25c5c71895b7ed6c1eb5.s3tc.ctex" +path.etc2="res://.godot/imported/ant_spritesheet.png-c145cf97a43c25c5c71895b7ed6c1eb5.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/minigames/ants/graphics/ant_spritesheet.png" -dest_files=["res://.godot/imported/ant_spritesheet.png-c145cf97a43c25c5c71895b7ed6c1eb5.ctex"] +dest_files=["res://.godot/imported/ant_spritesheet.png-c145cf97a43c25c5c71895b7ed6c1eb5.s3tc.ctex", "res://.godot/imported/ant_spritesheet.png-c145cf97a43c25c5c71895b7ed6c1eb5.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/minigames/ants/graphics/background.png.import b/assets/minigames/ants/graphics/background.png.import index 81bf294d..0511a5af 100644 --- a/assets/minigames/ants/graphics/background.png.import +++ b/assets/minigames/ants/graphics/background.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://b2mj2s3o22i8p" -path="res://.godot/imported/background.png-2ea3da1f26612f4fe38c08e4c10a6033.ctex" +path.s3tc="res://.godot/imported/background.png-2ea3da1f26612f4fe38c08e4c10a6033.s3tc.ctex" +path.etc2="res://.godot/imported/background.png-2ea3da1f26612f4fe38c08e4c10a6033.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/minigames/ants/graphics/background.png" -dest_files=["res://.godot/imported/background.png-2ea3da1f26612f4fe38c08e4c10a6033.ctex"] +dest_files=["res://.godot/imported/background.png-2ea3da1f26612f4fe38c08e4c10a6033.s3tc.ctex", "res://.godot/imported/background.png-2ea3da1f26612f4fe38c08e4c10a6033.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/minigames/ants/graphics/sentence_text_box.png.import b/assets/minigames/ants/graphics/sentence_text_box.png.import index 2a0a38f6..729ce9f2 100644 --- a/assets/minigames/ants/graphics/sentence_text_box.png.import +++ b/assets/minigames/ants/graphics/sentence_text_box.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://b2bcmo1keh217" -path="res://.godot/imported/sentence_text_box.png-26340fa40aaa48e743d64966bd2c4afa.ctex" +path.s3tc="res://.godot/imported/sentence_text_box.png-26340fa40aaa48e743d64966bd2c4afa.s3tc.ctex" +path.etc2="res://.godot/imported/sentence_text_box.png-26340fa40aaa48e743d64966bd2c4afa.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/minigames/ants/graphics/sentence_text_box.png" -dest_files=["res://.godot/imported/sentence_text_box.png-26340fa40aaa48e743d64966bd2c4afa.ctex"] +dest_files=["res://.godot/imported/sentence_text_box.png-26340fa40aaa48e743d64966bd2c4afa.s3tc.ctex", "res://.godot/imported/sentence_text_box.png-26340fa40aaa48e743d64966bd2c4afa.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/minigames/boss/background.png.import b/assets/minigames/boss/background.png.import index 36160dd9..734b9583 100644 --- a/assets/minigames/boss/background.png.import +++ b/assets/minigames/boss/background.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://ccfocxdqxujvc" -path="res://.godot/imported/background.png-c8fad62adf6e7e725e8f4fa28351428b.ctex" +path.s3tc="res://.godot/imported/background.png-c8fad62adf6e7e725e8f4fa28351428b.s3tc.ctex" +path.etc2="res://.godot/imported/background.png-c8fad62adf6e7e725e8f4fa28351428b.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/minigames/boss/background.png" -dest_files=["res://.godot/imported/background.png-c8fad62adf6e7e725e8f4fa28351428b.ctex"] +dest_files=["res://.godot/imported/background.png-c8fad62adf6e7e725e8f4fa28351428b.s3tc.ctex", "res://.godot/imported/background.png-c8fad62adf6e7e725e8f4fa28351428b.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/minigames/boss/foreground.png.import b/assets/minigames/boss/foreground.png.import index 3715762d..9e9d2793 100644 --- a/assets/minigames/boss/foreground.png.import +++ b/assets/minigames/boss/foreground.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://7w2e4mo7yssm" -path="res://.godot/imported/foreground.png-6c2554e6685390cee51239dbfa88c3c1.ctex" +path.s3tc="res://.godot/imported/foreground.png-6c2554e6685390cee51239dbfa88c3c1.s3tc.ctex" +path.etc2="res://.godot/imported/foreground.png-6c2554e6685390cee51239dbfa88c3c1.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/minigames/boss/foreground.png" -dest_files=["res://.godot/imported/foreground.png-6c2554e6685390cee51239dbfa88c3c1.ctex"] +dest_files=["res://.godot/imported/foreground.png-6c2554e6685390cee51239dbfa88c3c1.s3tc.ctex", "res://.godot/imported/foreground.png-6c2554e6685390cee51239dbfa88c3c1.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/minigames/boss/frame_corner.png.import b/assets/minigames/boss/frame_corner.png.import index 596bce7d..d27d1b65 100644 --- a/assets/minigames/boss/frame_corner.png.import +++ b/assets/minigames/boss/frame_corner.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://bk4k8v5yrolt1" -path="res://.godot/imported/frame_corner.png-63662e0fcc6898223ce9b85ff1d1ada3.ctex" +path.s3tc="res://.godot/imported/frame_corner.png-63662e0fcc6898223ce9b85ff1d1ada3.s3tc.ctex" +path.etc2="res://.godot/imported/frame_corner.png-63662e0fcc6898223ce9b85ff1d1ada3.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/minigames/boss/frame_corner.png" -dest_files=["res://.godot/imported/frame_corner.png-63662e0fcc6898223ce9b85ff1d1ada3.ctex"] +dest_files=["res://.godot/imported/frame_corner.png-63662e0fcc6898223ce9b85ff1d1ada3.s3tc.ctex", "res://.godot/imported/frame_corner.png-63662e0fcc6898223ce9b85ff1d1ada3.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/minigames/boss/kalulu_sheet.png.import b/assets/minigames/boss/kalulu_sheet.png.import index 3010a573..23f214a7 100644 --- a/assets/minigames/boss/kalulu_sheet.png.import +++ b/assets/minigames/boss/kalulu_sheet.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://bp3t4elur5y1y" -path="res://.godot/imported/kalulu_sheet.png-a82ac9402c5205b4531b3cd17bec0bc7.ctex" +path.s3tc="res://.godot/imported/kalulu_sheet.png-a82ac9402c5205b4531b3cd17bec0bc7.s3tc.ctex" +path.etc2="res://.godot/imported/kalulu_sheet.png-a82ac9402c5205b4531b3cd17bec0bc7.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/minigames/boss/kalulu_sheet.png" -dest_files=["res://.godot/imported/kalulu_sheet.png-a82ac9402c5205b4531b3cd17bec0bc7.ctex"] +dest_files=["res://.godot/imported/kalulu_sheet.png-a82ac9402c5205b4531b3cd17bec0bc7.s3tc.ctex", "res://.godot/imported/kalulu_sheet.png-a82ac9402c5205b4531b3cd17bec0bc7.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/minigames/boss/sun.png.import b/assets/minigames/boss/sun.png.import index c95869b4..a6481df5 100644 --- a/assets/minigames/boss/sun.png.import +++ b/assets/minigames/boss/sun.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://bf7od6f56f516" -path="res://.godot/imported/sun.png-dfa55dd52b824f292c3e99dd864a9f89.ctex" +path.s3tc="res://.godot/imported/sun.png-dfa55dd52b824f292c3e99dd864a9f89.s3tc.ctex" +path.etc2="res://.godot/imported/sun.png-dfa55dd52b824f292c3e99dd864a9f89.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/minigames/boss/sun.png" -dest_files=["res://.godot/imported/sun.png-dfa55dd52b824f292c3e99dd864a9f89.ctex"] +dest_files=["res://.godot/imported/sun.png-dfa55dd52b824f292c3e99dd864a9f89.s3tc.ctex", "res://.godot/imported/sun.png-dfa55dd52b824f292c3e99dd864a9f89.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/minigames/boss/text_box_long.png.import b/assets/minigames/boss/text_box_long.png.import index c0b77d39..710c4945 100644 --- a/assets/minigames/boss/text_box_long.png.import +++ b/assets/minigames/boss/text_box_long.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://cdmfxx6kt5tla" -path="res://.godot/imported/text_box_long.png-c072665becb3889915217183915e2a64.ctex" +path.s3tc="res://.godot/imported/text_box_long.png-c072665becb3889915217183915e2a64.s3tc.ctex" +path.etc2="res://.godot/imported/text_box_long.png-c072665becb3889915217183915e2a64.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/minigames/boss/text_box_long.png" -dest_files=["res://.godot/imported/text_box_long.png-c072665becb3889915217183915e2a64.ctex"] +dest_files=["res://.godot/imported/text_box_long.png-c072665becb3889915217183915e2a64.s3tc.ctex", "res://.godot/imported/text_box_long.png-c072665becb3889915217183915e2a64.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/minigames/boss/text_box_long_outline_dotted.png.import b/assets/minigames/boss/text_box_long_outline_dotted.png.import index ba430de2..759ea88f 100644 --- a/assets/minigames/boss/text_box_long_outline_dotted.png.import +++ b/assets/minigames/boss/text_box_long_outline_dotted.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://bs1twkddxu31y" -path="res://.godot/imported/text_box_long_outline_dotted.png-fb9c3aa3bc07c3ddb16a444d48552d6d.ctex" +path.s3tc="res://.godot/imported/text_box_long_outline_dotted.png-fb9c3aa3bc07c3ddb16a444d48552d6d.s3tc.ctex" +path.etc2="res://.godot/imported/text_box_long_outline_dotted.png-fb9c3aa3bc07c3ddb16a444d48552d6d.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/minigames/boss/text_box_long_outline_dotted.png" -dest_files=["res://.godot/imported/text_box_long_outline_dotted.png-fb9c3aa3bc07c3ddb16a444d48552d6d.ctex"] +dest_files=["res://.godot/imported/text_box_long_outline_dotted.png-fb9c3aa3bc07c3ddb16a444d48552d6d.s3tc.ctex", "res://.godot/imported/text_box_long_outline_dotted.png-fb9c3aa3bc07c3ddb16a444d48552d6d.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/minigames/caterpillar/graphics/background.png.import b/assets/minigames/caterpillar/graphics/background.png.import index d2453de0..7089ccd9 100644 --- a/assets/minigames/caterpillar/graphics/background.png.import +++ b/assets/minigames/caterpillar/graphics/background.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://cdc5fnfdssjnt" -path="res://.godot/imported/background.png-e5b0237b67a0798fe1413ecef451510a.ctex" +path.s3tc="res://.godot/imported/background.png-e5b0237b67a0798fe1413ecef451510a.s3tc.ctex" +path.etc2="res://.godot/imported/background.png-e5b0237b67a0798fe1413ecef451510a.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/minigames/caterpillar/graphics/background.png" -dest_files=["res://.godot/imported/background.png-e5b0237b67a0798fe1413ecef451510a.ctex"] +dest_files=["res://.godot/imported/background.png-e5b0237b67a0798fe1413ecef451510a.s3tc.ctex", "res://.godot/imported/background.png-e5b0237b67a0798fe1413ecef451510a.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/minigames/caterpillar/graphics/caterpillar_spritesheet.png.import b/assets/minigames/caterpillar/graphics/caterpillar_spritesheet.png.import index abe8c9e0..6ca8fe56 100644 --- a/assets/minigames/caterpillar/graphics/caterpillar_spritesheet.png.import +++ b/assets/minigames/caterpillar/graphics/caterpillar_spritesheet.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://cyxl5ep0vuavl" -path="res://.godot/imported/caterpillar_spritesheet.png-e15320a7c10244419bd956df1a0959b8.ctex" +path.s3tc="res://.godot/imported/caterpillar_spritesheet.png-e15320a7c10244419bd956df1a0959b8.s3tc.ctex" +path.etc2="res://.godot/imported/caterpillar_spritesheet.png-e15320a7c10244419bd956df1a0959b8.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/minigames/caterpillar/graphics/caterpillar_spritesheet.png" -dest_files=["res://.godot/imported/caterpillar_spritesheet.png-e15320a7c10244419bd956df1a0959b8.ctex"] +dest_files=["res://.godot/imported/caterpillar_spritesheet.png-e15320a7c10244419bd956df1a0959b8.s3tc.ctex", "res://.godot/imported/caterpillar_spritesheet.png-e15320a7c10244419bd956df1a0959b8.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/minigames/crabs/graphic/background.png.import b/assets/minigames/crabs/graphic/background.png.import index 907020b0..f3a7b099 100644 --- a/assets/minigames/crabs/graphic/background.png.import +++ b/assets/minigames/crabs/graphic/background.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://5bx8ugh178j1" -path="res://.godot/imported/background.png-5e0210e87298ac6e04e95c7ece34e89d.ctex" +path.s3tc="res://.godot/imported/background.png-5e0210e87298ac6e04e95c7ece34e89d.s3tc.ctex" +path.etc2="res://.godot/imported/background.png-5e0210e87298ac6e04e95c7ece34e89d.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/minigames/crabs/graphic/background.png" -dest_files=["res://.godot/imported/background.png-5e0210e87298ac6e04e95c7ece34e89d.ctex"] +dest_files=["res://.godot/imported/background.png-5e0210e87298ac6e04e95c7ece34e89d.s3tc.ctex", "res://.godot/imported/background.png-5e0210e87298ac6e04e95c7ece34e89d.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/minigames/crabs/graphic/background_2.png.import b/assets/minigames/crabs/graphic/background_2.png.import index f97e9859..6c215a10 100644 --- a/assets/minigames/crabs/graphic/background_2.png.import +++ b/assets/minigames/crabs/graphic/background_2.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://cq50syf8jy8ol" -path="res://.godot/imported/background_2.png-ba5099ea1fd9498d48ea323a8cd4c300.ctex" +path.s3tc="res://.godot/imported/background_2.png-ba5099ea1fd9498d48ea323a8cd4c300.s3tc.ctex" +path.etc2="res://.godot/imported/background_2.png-ba5099ea1fd9498d48ea323a8cd4c300.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/minigames/crabs/graphic/background_2.png" -dest_files=["res://.godot/imported/background_2.png-ba5099ea1fd9498d48ea323a8cd4c300.ctex"] +dest_files=["res://.godot/imported/background_2.png-ba5099ea1fd9498d48ea323a8cd4c300.s3tc.ctex", "res://.godot/imported/background_2.png-ba5099ea1fd9498d48ea323a8cd4c300.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/minigames/crabs/graphic/crab_spritesheet.png.import b/assets/minigames/crabs/graphic/crab_spritesheet.png.import index 45c8a660..153b5035 100644 --- a/assets/minigames/crabs/graphic/crab_spritesheet.png.import +++ b/assets/minigames/crabs/graphic/crab_spritesheet.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://cjxvog1y6wkfv" -path="res://.godot/imported/crab_spritesheet.png-21dddf90618c171f86c1406c488930a2.ctex" +path.s3tc="res://.godot/imported/crab_spritesheet.png-21dddf90618c171f86c1406c488930a2.s3tc.ctex" +path.etc2="res://.godot/imported/crab_spritesheet.png-21dddf90618c171f86c1406c488930a2.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/minigames/crabs/graphic/crab_spritesheet.png" -dest_files=["res://.godot/imported/crab_spritesheet.png-21dddf90618c171f86c1406c488930a2.ctex"] +dest_files=["res://.godot/imported/crab_spritesheet.png-21dddf90618c171f86c1406c488930a2.s3tc.ctex", "res://.godot/imported/crab_spritesheet.png-21dddf90618c171f86c1406c488930a2.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/minigames/crabs/graphic/hole_mask.png.import b/assets/minigames/crabs/graphic/hole_mask.png.import index b3a119e5..f49593ac 100644 --- a/assets/minigames/crabs/graphic/hole_mask.png.import +++ b/assets/minigames/crabs/graphic/hole_mask.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://7nrlmc7opox1" -path="res://.godot/imported/hole_mask.png-ecebdf144a2374016c42ccc2a8a47cb6.ctex" +path.s3tc="res://.godot/imported/hole_mask.png-ecebdf144a2374016c42ccc2a8a47cb6.s3tc.ctex" +path.etc2="res://.godot/imported/hole_mask.png-ecebdf144a2374016c42ccc2a8a47cb6.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/minigames/crabs/graphic/hole_mask.png" -dest_files=["res://.godot/imported/hole_mask.png-ecebdf144a2374016c42ccc2a8a47cb6.ctex"] +dest_files=["res://.godot/imported/hole_mask.png-ecebdf144a2374016c42ccc2a8a47cb6.s3tc.ctex", "res://.godot/imported/hole_mask.png-ecebdf144a2374016c42ccc2a8a47cb6.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/minigames/frog/graphics/background.png.import b/assets/minigames/frog/graphics/background.png.import index eb265ad2..046b8883 100644 --- a/assets/minigames/frog/graphics/background.png.import +++ b/assets/minigames/frog/graphics/background.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://bgi4vveige3qv" -path="res://.godot/imported/background.png-0bda5ad31681b25cd22b6a2490c9350f.ctex" +path.s3tc="res://.godot/imported/background.png-0bda5ad31681b25cd22b6a2490c9350f.s3tc.ctex" +path.etc2="res://.godot/imported/background.png-0bda5ad31681b25cd22b6a2490c9350f.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/minigames/frog/graphics/background.png" -dest_files=["res://.godot/imported/background.png-0bda5ad31681b25cd22b6a2490c9350f.ctex"] +dest_files=["res://.godot/imported/background.png-0bda5ad31681b25cd22b6a2490c9350f.s3tc.ctex", "res://.godot/imported/background.png-0bda5ad31681b25cd22b6a2490c9350f.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/minigames/frog/graphics/background_river.png.import b/assets/minigames/frog/graphics/background_river.png.import index 4fe45c5c..0814303e 100644 --- a/assets/minigames/frog/graphics/background_river.png.import +++ b/assets/minigames/frog/graphics/background_river.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://g1pr0xqbmwcb" -path="res://.godot/imported/background_river.png-0d804af2e42cc58cea90b820caca7c44.ctex" +path.s3tc="res://.godot/imported/background_river.png-0d804af2e42cc58cea90b820caca7c44.s3tc.ctex" +path.etc2="res://.godot/imported/background_river.png-0d804af2e42cc58cea90b820caca7c44.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/minigames/frog/graphics/background_river.png" -dest_files=["res://.godot/imported/background_river.png-0d804af2e42cc58cea90b820caca7c44.ctex"] +dest_files=["res://.godot/imported/background_river.png-0d804af2e42cc58cea90b820caca7c44.s3tc.ctex", "res://.godot/imported/background_river.png-0d804af2e42cc58cea90b820caca7c44.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/minigames/frog/graphics/frog_spritesheet.png.import b/assets/minigames/frog/graphics/frog_spritesheet.png.import index cf84a65b..24456485 100644 --- a/assets/minigames/frog/graphics/frog_spritesheet.png.import +++ b/assets/minigames/frog/graphics/frog_spritesheet.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://bmrp8ybx5iqgu" -path="res://.godot/imported/frog_spritesheet.png-76c0a7d8c426412ed0eb71ab671bbaeb.ctex" +path.s3tc="res://.godot/imported/frog_spritesheet.png-76c0a7d8c426412ed0eb71ab671bbaeb.s3tc.ctex" +path.etc2="res://.godot/imported/frog_spritesheet.png-76c0a7d8c426412ed0eb71ab671bbaeb.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/minigames/frog/graphics/frog_spritesheet.png" -dest_files=["res://.godot/imported/frog_spritesheet.png-76c0a7d8c426412ed0eb71ab671bbaeb.ctex"] +dest_files=["res://.godot/imported/frog_spritesheet.png-76c0a7d8c426412ed0eb71ab671bbaeb.s3tc.ctex", "res://.godot/imported/frog_spritesheet.png-76c0a7d8c426412ed0eb71ab671bbaeb.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/minigames/jellyfish/graphic/background.png.import b/assets/minigames/jellyfish/graphic/background.png.import index 92eaed66..d5b183d5 100644 --- a/assets/minigames/jellyfish/graphic/background.png.import +++ b/assets/minigames/jellyfish/graphic/background.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://d60ylt2dvc2s" -path="res://.godot/imported/background.png-efb3c9298c89dad479689fd212c0f1b2.ctex" +path.s3tc="res://.godot/imported/background.png-efb3c9298c89dad479689fd212c0f1b2.s3tc.ctex" +path.etc2="res://.godot/imported/background.png-efb3c9298c89dad479689fd212c0f1b2.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/minigames/jellyfish/graphic/background.png" -dest_files=["res://.godot/imported/background.png-efb3c9298c89dad479689fd212c0f1b2.ctex"] +dest_files=["res://.godot/imported/background.png-efb3c9298c89dad479689fd212c0f1b2.s3tc.ctex", "res://.godot/imported/background.png-efb3c9298c89dad479689fd212c0f1b2.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/minigames/jellyfish/graphic/blue_jellyfish_layer_1.png.import b/assets/minigames/jellyfish/graphic/blue_jellyfish_layer_1.png.import index c67c74eb..7301bd2b 100644 --- a/assets/minigames/jellyfish/graphic/blue_jellyfish_layer_1.png.import +++ b/assets/minigames/jellyfish/graphic/blue_jellyfish_layer_1.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://8pqgvcr4wukd" -path="res://.godot/imported/blue_jellyfish_layer_1.png-ded26697e61821a4af17afb6bd58f89e.ctex" +path.s3tc="res://.godot/imported/blue_jellyfish_layer_1.png-ded26697e61821a4af17afb6bd58f89e.s3tc.ctex" +path.etc2="res://.godot/imported/blue_jellyfish_layer_1.png-ded26697e61821a4af17afb6bd58f89e.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/minigames/jellyfish/graphic/blue_jellyfish_layer_1.png" -dest_files=["res://.godot/imported/blue_jellyfish_layer_1.png-ded26697e61821a4af17afb6bd58f89e.ctex"] +dest_files=["res://.godot/imported/blue_jellyfish_layer_1.png-ded26697e61821a4af17afb6bd58f89e.s3tc.ctex", "res://.godot/imported/blue_jellyfish_layer_1.png-ded26697e61821a4af17afb6bd58f89e.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/minigames/jellyfish/graphic/blue_jellyfish_layer_2.png.import b/assets/minigames/jellyfish/graphic/blue_jellyfish_layer_2.png.import index cbb802b2..826ced76 100644 --- a/assets/minigames/jellyfish/graphic/blue_jellyfish_layer_2.png.import +++ b/assets/minigames/jellyfish/graphic/blue_jellyfish_layer_2.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://b68gvx4lwqked" -path="res://.godot/imported/blue_jellyfish_layer_2.png-d48d07d14a16b9ae424f0aa828c6c78a.ctex" +path.s3tc="res://.godot/imported/blue_jellyfish_layer_2.png-d48d07d14a16b9ae424f0aa828c6c78a.s3tc.ctex" +path.etc2="res://.godot/imported/blue_jellyfish_layer_2.png-d48d07d14a16b9ae424f0aa828c6c78a.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/minigames/jellyfish/graphic/blue_jellyfish_layer_2.png" -dest_files=["res://.godot/imported/blue_jellyfish_layer_2.png-d48d07d14a16b9ae424f0aa828c6c78a.ctex"] +dest_files=["res://.godot/imported/blue_jellyfish_layer_2.png-d48d07d14a16b9ae424f0aa828c6c78a.s3tc.ctex", "res://.godot/imported/blue_jellyfish_layer_2.png-d48d07d14a16b9ae424f0aa828c6c78a.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/minigames/jellyfish/graphic/green_jellyfish.png.import b/assets/minigames/jellyfish/graphic/green_jellyfish.png.import index 7a0133b0..5957381a 100644 --- a/assets/minigames/jellyfish/graphic/green_jellyfish.png.import +++ b/assets/minigames/jellyfish/graphic/green_jellyfish.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://ds2c07hg5gehr" -path="res://.godot/imported/green_jellyfish.png-a273f442143c4e865bd5def3da194971.ctex" +path.s3tc="res://.godot/imported/green_jellyfish.png-a273f442143c4e865bd5def3da194971.s3tc.ctex" +path.etc2="res://.godot/imported/green_jellyfish.png-a273f442143c4e865bd5def3da194971.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/minigames/jellyfish/graphic/green_jellyfish.png" -dest_files=["res://.godot/imported/green_jellyfish.png-a273f442143c4e865bd5def3da194971.ctex"] +dest_files=["res://.godot/imported/green_jellyfish.png-a273f442143c4e865bd5def3da194971.s3tc.ctex", "res://.godot/imported/green_jellyfish.png-a273f442143c4e865bd5def3da194971.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/minigames/jellyfish/graphic/pink_jellyfish_layer_1.png.import b/assets/minigames/jellyfish/graphic/pink_jellyfish_layer_1.png.import index 4c23bf64..36ade20f 100644 --- a/assets/minigames/jellyfish/graphic/pink_jellyfish_layer_1.png.import +++ b/assets/minigames/jellyfish/graphic/pink_jellyfish_layer_1.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://ouogv4kicu4d" -path="res://.godot/imported/pink_jellyfish_layer_1.png-80b89901a8bd571eabb362c32ae001a5.ctex" +path.s3tc="res://.godot/imported/pink_jellyfish_layer_1.png-80b89901a8bd571eabb362c32ae001a5.s3tc.ctex" +path.etc2="res://.godot/imported/pink_jellyfish_layer_1.png-80b89901a8bd571eabb362c32ae001a5.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/minigames/jellyfish/graphic/pink_jellyfish_layer_1.png" -dest_files=["res://.godot/imported/pink_jellyfish_layer_1.png-80b89901a8bd571eabb362c32ae001a5.ctex"] +dest_files=["res://.godot/imported/pink_jellyfish_layer_1.png-80b89901a8bd571eabb362c32ae001a5.s3tc.ctex", "res://.godot/imported/pink_jellyfish_layer_1.png-80b89901a8bd571eabb362c32ae001a5.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/minigames/jellyfish/graphic/pink_jellyfish_layer_2.png.import b/assets/minigames/jellyfish/graphic/pink_jellyfish_layer_2.png.import index 40ee1c89..61e1e920 100644 --- a/assets/minigames/jellyfish/graphic/pink_jellyfish_layer_2.png.import +++ b/assets/minigames/jellyfish/graphic/pink_jellyfish_layer_2.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://cj8mhhve72ff" -path="res://.godot/imported/pink_jellyfish_layer_2.png-230459161919292a3868ae639ba4e1a2.ctex" +path.s3tc="res://.godot/imported/pink_jellyfish_layer_2.png-230459161919292a3868ae639ba4e1a2.s3tc.ctex" +path.etc2="res://.godot/imported/pink_jellyfish_layer_2.png-230459161919292a3868ae639ba4e1a2.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/minigames/jellyfish/graphic/pink_jellyfish_layer_2.png" -dest_files=["res://.godot/imported/pink_jellyfish_layer_2.png-230459161919292a3868ae639ba4e1a2.ctex"] +dest_files=["res://.godot/imported/pink_jellyfish_layer_2.png-230459161919292a3868ae639ba4e1a2.s3tc.ctex", "res://.godot/imported/pink_jellyfish_layer_2.png-230459161919292a3868ae639ba4e1a2.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/minigames/jellyfish/graphic/red_jellyfish.png.import b/assets/minigames/jellyfish/graphic/red_jellyfish.png.import index a090c040..8a49e804 100644 --- a/assets/minigames/jellyfish/graphic/red_jellyfish.png.import +++ b/assets/minigames/jellyfish/graphic/red_jellyfish.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://dsu5iyecure3" -path="res://.godot/imported/red_jellyfish.png-69f999ee21559d347aea09bc070aed39.ctex" +path.s3tc="res://.godot/imported/red_jellyfish.png-69f999ee21559d347aea09bc070aed39.s3tc.ctex" +path.etc2="res://.godot/imported/red_jellyfish.png-69f999ee21559d347aea09bc070aed39.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/minigames/jellyfish/graphic/red_jellyfish.png" -dest_files=["res://.godot/imported/red_jellyfish.png-69f999ee21559d347aea09bc070aed39.ctex"] +dest_files=["res://.godot/imported/red_jellyfish.png-69f999ee21559d347aea09bc070aed39.s3tc.ctex", "res://.godot/imported/red_jellyfish.png-69f999ee21559d347aea09bc070aed39.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/minigames/minigame_ui/graphic/bush.png.import b/assets/minigames/minigame_ui/graphic/bush.png.import index 114696ea..fb51d480 100644 --- a/assets/minigames/minigame_ui/graphic/bush.png.import +++ b/assets/minigames/minigame_ui/graphic/bush.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://dnh4dct8pgcj5" -path="res://.godot/imported/bush.png-8b2a230019be154ff388d61416943e26.ctex" +path.s3tc="res://.godot/imported/bush.png-8b2a230019be154ff388d61416943e26.s3tc.ctex" +path.etc2="res://.godot/imported/bush.png-8b2a230019be154ff388d61416943e26.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/minigames/minigame_ui/graphic/bush.png" -dest_files=["res://.godot/imported/bush.png-8b2a230019be154ff388d61416943e26.ctex"] +dest_files=["res://.godot/imported/bush.png-8b2a230019be154ff388d61416943e26.s3tc.ctex", "res://.godot/imported/bush.png-8b2a230019be154ff388d61416943e26.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/minigames/minigame_ui/graphic/button_back_disabled.png.import b/assets/minigames/minigame_ui/graphic/button_back_disabled.png.import index 7a9c9620..760b8779 100644 --- a/assets/minigames/minigame_ui/graphic/button_back_disabled.png.import +++ b/assets/minigames/minigame_ui/graphic/button_back_disabled.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://bnvx1mujmy3vf" -path="res://.godot/imported/button_back_disabled.png-ef5f120ba83ddd342c450eb50b193e29.ctex" +path.s3tc="res://.godot/imported/button_back_disabled.png-ef5f120ba83ddd342c450eb50b193e29.s3tc.ctex" +path.etc2="res://.godot/imported/button_back_disabled.png-ef5f120ba83ddd342c450eb50b193e29.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/minigames/minigame_ui/graphic/button_back_disabled.png" -dest_files=["res://.godot/imported/button_back_disabled.png-ef5f120ba83ddd342c450eb50b193e29.ctex"] +dest_files=["res://.godot/imported/button_back_disabled.png-ef5f120ba83ddd342c450eb50b193e29.s3tc.ctex", "res://.godot/imported/button_back_disabled.png-ef5f120ba83ddd342c450eb50b193e29.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/minigames/minigame_ui/graphic/button_back_normal.png.import b/assets/minigames/minigame_ui/graphic/button_back_normal.png.import index e04cd6e7..b9787c06 100644 --- a/assets/minigames/minigame_ui/graphic/button_back_normal.png.import +++ b/assets/minigames/minigame_ui/graphic/button_back_normal.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://dj0ygi5q6kbdw" -path="res://.godot/imported/button_back_normal.png-9bac017a20eb6651d27b39324da71af4.ctex" +path.s3tc="res://.godot/imported/button_back_normal.png-9bac017a20eb6651d27b39324da71af4.s3tc.ctex" +path.etc2="res://.godot/imported/button_back_normal.png-9bac017a20eb6651d27b39324da71af4.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/minigames/minigame_ui/graphic/button_back_normal.png" -dest_files=["res://.godot/imported/button_back_normal.png-9bac017a20eb6651d27b39324da71af4.ctex"] +dest_files=["res://.godot/imported/button_back_normal.png-9bac017a20eb6651d27b39324da71af4.s3tc.ctex", "res://.godot/imported/button_back_normal.png-9bac017a20eb6651d27b39324da71af4.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/minigames/minigame_ui/graphic/button_back_pressed.png.import b/assets/minigames/minigame_ui/graphic/button_back_pressed.png.import index 29cd3ab7..e1c850ef 100644 --- a/assets/minigames/minigame_ui/graphic/button_back_pressed.png.import +++ b/assets/minigames/minigame_ui/graphic/button_back_pressed.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://gmoc5mxxfqin" -path="res://.godot/imported/button_back_pressed.png-2557e870c079169f2d2bd6a17ce8aeb9.ctex" +path.s3tc="res://.godot/imported/button_back_pressed.png-2557e870c079169f2d2bd6a17ce8aeb9.s3tc.ctex" +path.etc2="res://.godot/imported/button_back_pressed.png-2557e870c079169f2d2bd6a17ce8aeb9.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/minigames/minigame_ui/graphic/button_back_pressed.png" -dest_files=["res://.godot/imported/button_back_pressed.png-2557e870c079169f2d2bd6a17ce8aeb9.ctex"] +dest_files=["res://.godot/imported/button_back_pressed.png-2557e870c079169f2d2bd6a17ce8aeb9.s3tc.ctex", "res://.godot/imported/button_back_pressed.png-2557e870c079169f2d2bd6a17ce8aeb9.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/minigames/minigame_ui/graphic/button_kalulu_disabled.png.import b/assets/minigames/minigame_ui/graphic/button_kalulu_disabled.png.import index 45a1fb4c..6fc142a6 100644 --- a/assets/minigames/minigame_ui/graphic/button_kalulu_disabled.png.import +++ b/assets/minigames/minigame_ui/graphic/button_kalulu_disabled.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://crnxawhf68po3" -path="res://.godot/imported/button_kalulu_disabled.png-a7a250a3b202651cd2b64b3d6f8c5ce8.ctex" +path.s3tc="res://.godot/imported/button_kalulu_disabled.png-a7a250a3b202651cd2b64b3d6f8c5ce8.s3tc.ctex" +path.etc2="res://.godot/imported/button_kalulu_disabled.png-a7a250a3b202651cd2b64b3d6f8c5ce8.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/minigames/minigame_ui/graphic/button_kalulu_disabled.png" -dest_files=["res://.godot/imported/button_kalulu_disabled.png-a7a250a3b202651cd2b64b3d6f8c5ce8.ctex"] +dest_files=["res://.godot/imported/button_kalulu_disabled.png-a7a250a3b202651cd2b64b3d6f8c5ce8.s3tc.ctex", "res://.godot/imported/button_kalulu_disabled.png-a7a250a3b202651cd2b64b3d6f8c5ce8.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/minigames/minigame_ui/graphic/button_kalulu_normal.png.import b/assets/minigames/minigame_ui/graphic/button_kalulu_normal.png.import index e1bec104..ea0c83ab 100644 --- a/assets/minigames/minigame_ui/graphic/button_kalulu_normal.png.import +++ b/assets/minigames/minigame_ui/graphic/button_kalulu_normal.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://iw84x6mx8h2g" -path="res://.godot/imported/button_kalulu_normal.png-846af22a97b5cdb1500d496e6a0cbe50.ctex" +path.s3tc="res://.godot/imported/button_kalulu_normal.png-846af22a97b5cdb1500d496e6a0cbe50.s3tc.ctex" +path.etc2="res://.godot/imported/button_kalulu_normal.png-846af22a97b5cdb1500d496e6a0cbe50.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/minigames/minigame_ui/graphic/button_kalulu_normal.png" -dest_files=["res://.godot/imported/button_kalulu_normal.png-846af22a97b5cdb1500d496e6a0cbe50.ctex"] +dest_files=["res://.godot/imported/button_kalulu_normal.png-846af22a97b5cdb1500d496e6a0cbe50.s3tc.ctex", "res://.godot/imported/button_kalulu_normal.png-846af22a97b5cdb1500d496e6a0cbe50.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/minigames/minigame_ui/graphic/button_kalulu_pressed.png.import b/assets/minigames/minigame_ui/graphic/button_kalulu_pressed.png.import index b2ec84e4..90316366 100644 --- a/assets/minigames/minigame_ui/graphic/button_kalulu_pressed.png.import +++ b/assets/minigames/minigame_ui/graphic/button_kalulu_pressed.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://ub1dnysbojn8" -path="res://.godot/imported/button_kalulu_pressed.png-a479a09c3b090d686ecc16921d301226.ctex" +path.s3tc="res://.godot/imported/button_kalulu_pressed.png-a479a09c3b090d686ecc16921d301226.s3tc.ctex" +path.etc2="res://.godot/imported/button_kalulu_pressed.png-a479a09c3b090d686ecc16921d301226.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/minigames/minigame_ui/graphic/button_kalulu_pressed.png" -dest_files=["res://.godot/imported/button_kalulu_pressed.png-a479a09c3b090d686ecc16921d301226.ctex"] +dest_files=["res://.godot/imported/button_kalulu_pressed.png-a479a09c3b090d686ecc16921d301226.s3tc.ctex", "res://.godot/imported/button_kalulu_pressed.png-a479a09c3b090d686ecc16921d301226.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/minigames/minigame_ui/graphic/button_pause_disabled.png.import b/assets/minigames/minigame_ui/graphic/button_pause_disabled.png.import index 7c55b38f..9539afaf 100644 --- a/assets/minigames/minigame_ui/graphic/button_pause_disabled.png.import +++ b/assets/minigames/minigame_ui/graphic/button_pause_disabled.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://b0luicu7cgho5" -path="res://.godot/imported/button_pause_disabled.png-7dc41ce8181d799fef30178655c4d7dd.ctex" +path.s3tc="res://.godot/imported/button_pause_disabled.png-7dc41ce8181d799fef30178655c4d7dd.s3tc.ctex" +path.etc2="res://.godot/imported/button_pause_disabled.png-7dc41ce8181d799fef30178655c4d7dd.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/minigames/minigame_ui/graphic/button_pause_disabled.png" -dest_files=["res://.godot/imported/button_pause_disabled.png-7dc41ce8181d799fef30178655c4d7dd.ctex"] +dest_files=["res://.godot/imported/button_pause_disabled.png-7dc41ce8181d799fef30178655c4d7dd.s3tc.ctex", "res://.godot/imported/button_pause_disabled.png-7dc41ce8181d799fef30178655c4d7dd.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/minigames/minigame_ui/graphic/button_pause_normal.png.import b/assets/minigames/minigame_ui/graphic/button_pause_normal.png.import index 62c6ef0a..d6bfaf45 100644 --- a/assets/minigames/minigame_ui/graphic/button_pause_normal.png.import +++ b/assets/minigames/minigame_ui/graphic/button_pause_normal.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://bnqgwy3arrm4n" -path="res://.godot/imported/button_pause_normal.png-410dfeb2b24e6f4ccbd503ec48479ceb.ctex" +path.s3tc="res://.godot/imported/button_pause_normal.png-410dfeb2b24e6f4ccbd503ec48479ceb.s3tc.ctex" +path.etc2="res://.godot/imported/button_pause_normal.png-410dfeb2b24e6f4ccbd503ec48479ceb.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/minigames/minigame_ui/graphic/button_pause_normal.png" -dest_files=["res://.godot/imported/button_pause_normal.png-410dfeb2b24e6f4ccbd503ec48479ceb.ctex"] +dest_files=["res://.godot/imported/button_pause_normal.png-410dfeb2b24e6f4ccbd503ec48479ceb.s3tc.ctex", "res://.godot/imported/button_pause_normal.png-410dfeb2b24e6f4ccbd503ec48479ceb.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/minigames/minigame_ui/graphic/button_pause_pressed.png.import b/assets/minigames/minigame_ui/graphic/button_pause_pressed.png.import index e6a679b6..0813e492 100644 --- a/assets/minigames/minigame_ui/graphic/button_pause_pressed.png.import +++ b/assets/minigames/minigame_ui/graphic/button_pause_pressed.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://bjxt5vglohmk8" -path="res://.godot/imported/button_pause_pressed.png-684213afd797bb0f2a598141b6dce937.ctex" +path.s3tc="res://.godot/imported/button_pause_pressed.png-684213afd797bb0f2a598141b6dce937.s3tc.ctex" +path.etc2="res://.godot/imported/button_pause_pressed.png-684213afd797bb0f2a598141b6dce937.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/minigames/minigame_ui/graphic/button_pause_pressed.png" -dest_files=["res://.godot/imported/button_pause_pressed.png-684213afd797bb0f2a598141b6dce937.ctex"] +dest_files=["res://.godot/imported/button_pause_pressed.png-684213afd797bb0f2a598141b6dce937.s3tc.ctex", "res://.godot/imported/button_pause_pressed.png-684213afd797bb0f2a598141b6dce937.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/minigames/minigame_ui/graphic/button_shell_disabled.png.import b/assets/minigames/minigame_ui/graphic/button_shell_disabled.png.import index ac6cd45b..543f17fa 100644 --- a/assets/minigames/minigame_ui/graphic/button_shell_disabled.png.import +++ b/assets/minigames/minigame_ui/graphic/button_shell_disabled.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://53f3lscl7tws" -path="res://.godot/imported/button_shell_disabled.png-916c851823a3bd967079336e8e2b411d.ctex" +path.s3tc="res://.godot/imported/button_shell_disabled.png-916c851823a3bd967079336e8e2b411d.s3tc.ctex" +path.etc2="res://.godot/imported/button_shell_disabled.png-916c851823a3bd967079336e8e2b411d.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/minigames/minigame_ui/graphic/button_shell_disabled.png" -dest_files=["res://.godot/imported/button_shell_disabled.png-916c851823a3bd967079336e8e2b411d.ctex"] +dest_files=["res://.godot/imported/button_shell_disabled.png-916c851823a3bd967079336e8e2b411d.s3tc.ctex", "res://.godot/imported/button_shell_disabled.png-916c851823a3bd967079336e8e2b411d.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/minigames/minigame_ui/graphic/button_shell_normal.png.import b/assets/minigames/minigame_ui/graphic/button_shell_normal.png.import index 3de3be19..34ee6fb9 100644 --- a/assets/minigames/minigame_ui/graphic/button_shell_normal.png.import +++ b/assets/minigames/minigame_ui/graphic/button_shell_normal.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://03r3arvu1r2t" -path="res://.godot/imported/button_shell_normal.png-ee922a52468c1fb0d2c5433528fbca78.ctex" +path.s3tc="res://.godot/imported/button_shell_normal.png-ee922a52468c1fb0d2c5433528fbca78.s3tc.ctex" +path.etc2="res://.godot/imported/button_shell_normal.png-ee922a52468c1fb0d2c5433528fbca78.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/minigames/minigame_ui/graphic/button_shell_normal.png" -dest_files=["res://.godot/imported/button_shell_normal.png-ee922a52468c1fb0d2c5433528fbca78.ctex"] +dest_files=["res://.godot/imported/button_shell_normal.png-ee922a52468c1fb0d2c5433528fbca78.s3tc.ctex", "res://.godot/imported/button_shell_normal.png-ee922a52468c1fb0d2c5433528fbca78.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/minigames/minigame_ui/graphic/button_shell_pressed.png.import b/assets/minigames/minigame_ui/graphic/button_shell_pressed.png.import index 1a461ff4..3247428d 100644 --- a/assets/minigames/minigame_ui/graphic/button_shell_pressed.png.import +++ b/assets/minigames/minigame_ui/graphic/button_shell_pressed.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://clrnqn0fqjx3q" -path="res://.godot/imported/button_shell_pressed.png-03f6dfe49ed1c9a8dfda274a18369711.ctex" +path.s3tc="res://.godot/imported/button_shell_pressed.png-03f6dfe49ed1c9a8dfda274a18369711.s3tc.ctex" +path.etc2="res://.godot/imported/button_shell_pressed.png-03f6dfe49ed1c9a8dfda274a18369711.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/minigames/minigame_ui/graphic/button_shell_pressed.png" -dest_files=["res://.godot/imported/button_shell_pressed.png-03f6dfe49ed1c9a8dfda274a18369711.ctex"] +dest_files=["res://.godot/imported/button_shell_pressed.png-03f6dfe49ed1c9a8dfda274a18369711.s3tc.ctex", "res://.godot/imported/button_shell_pressed.png-03f6dfe49ed1c9a8dfda274a18369711.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/minigames/minigame_ui/graphic/large_flower_body.png.import b/assets/minigames/minigame_ui/graphic/large_flower_body.png.import index 391a4728..539ec32f 100644 --- a/assets/minigames/minigame_ui/graphic/large_flower_body.png.import +++ b/assets/minigames/minigame_ui/graphic/large_flower_body.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://b6b8kb5l3yh04" -path="res://.godot/imported/large_flower_body.png-e4cc5c7240bb0cdd8e8f6e9eb5e337f1.ctex" +path.s3tc="res://.godot/imported/large_flower_body.png-e4cc5c7240bb0cdd8e8f6e9eb5e337f1.s3tc.ctex" +path.etc2="res://.godot/imported/large_flower_body.png-e4cc5c7240bb0cdd8e8f6e9eb5e337f1.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/minigames/minigame_ui/graphic/large_flower_body.png" -dest_files=["res://.godot/imported/large_flower_body.png-e4cc5c7240bb0cdd8e8f6e9eb5e337f1.ctex"] +dest_files=["res://.godot/imported/large_flower_body.png-e4cc5c7240bb0cdd8e8f6e9eb5e337f1.s3tc.ctex", "res://.godot/imported/large_flower_body.png-e4cc5c7240bb0cdd8e8f6e9eb5e337f1.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/minigames/minigame_ui/graphic/popin_background.png.import b/assets/minigames/minigame_ui/graphic/popin_background.png.import index 019504da..fdefd4f4 100644 --- a/assets/minigames/minigame_ui/graphic/popin_background.png.import +++ b/assets/minigames/minigame_ui/graphic/popin_background.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://vcfpmwst262s" -path="res://.godot/imported/popin_background.png-1eed939191a8e691f6867e928c0c1e47.ctex" +path.s3tc="res://.godot/imported/popin_background.png-1eed939191a8e691f6867e928c0c1e47.s3tc.ctex" +path.etc2="res://.godot/imported/popin_background.png-1eed939191a8e691f6867e928c0c1e47.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/minigames/minigame_ui/graphic/popin_background.png" -dest_files=["res://.godot/imported/popin_background.png-1eed939191a8e691f6867e928c0c1e47.ctex"] +dest_files=["res://.godot/imported/popin_background.png-1eed939191a8e691f6867e928c0c1e47.s3tc.ctex", "res://.godot/imported/popin_background.png-1eed939191a8e691f6867e928c0c1e47.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/minigames/minigame_ui/graphic/popin_foreground.png.import b/assets/minigames/minigame_ui/graphic/popin_foreground.png.import index 685cc950..56a28fb8 100644 --- a/assets/minigames/minigame_ui/graphic/popin_foreground.png.import +++ b/assets/minigames/minigame_ui/graphic/popin_foreground.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://f2ys2fy1il2k" -path="res://.godot/imported/popin_foreground.png-1501a93c85b4af7b4b5f6b0cc86dd3c8.ctex" +path.s3tc="res://.godot/imported/popin_foreground.png-1501a93c85b4af7b4b5f6b0cc86dd3c8.s3tc.ctex" +path.etc2="res://.godot/imported/popin_foreground.png-1501a93c85b4af7b4b5f6b0cc86dd3c8.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/minigames/minigame_ui/graphic/popin_foreground.png" -dest_files=["res://.godot/imported/popin_foreground.png-1501a93c85b4af7b4b5f6b0cc86dd3c8.ctex"] +dest_files=["res://.godot/imported/popin_foreground.png-1501a93c85b4af7b4b5f6b0cc86dd3c8.s3tc.ctex", "res://.godot/imported/popin_foreground.png-1501a93c85b4af7b4b5f6b0cc86dd3c8.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/minigames/minigame_ui/graphic/primary_text_box.png.import b/assets/minigames/minigame_ui/graphic/primary_text_box.png.import index b798e63b..78c34767 100644 --- a/assets/minigames/minigame_ui/graphic/primary_text_box.png.import +++ b/assets/minigames/minigame_ui/graphic/primary_text_box.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://c34sgkbvr3h8q" -path="res://.godot/imported/primary_text_box.png-e6e7d0f2e6a28bafc3bf983ee5c88924.ctex" +path.s3tc="res://.godot/imported/primary_text_box.png-e6e7d0f2e6a28bafc3bf983ee5c88924.s3tc.ctex" +path.etc2="res://.godot/imported/primary_text_box.png-e6e7d0f2e6a28bafc3bf983ee5c88924.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/minigames/minigame_ui/graphic/primary_text_box.png" -dest_files=["res://.godot/imported/primary_text_box.png-e6e7d0f2e6a28bafc3bf983ee5c88924.ctex"] +dest_files=["res://.godot/imported/primary_text_box.png-e6e7d0f2e6a28bafc3bf983ee5c88924.s3tc.ctex", "res://.godot/imported/primary_text_box.png-e6e7d0f2e6a28bafc3bf983ee5c88924.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/minigames/minigame_ui/graphic/primary_text_box_outline.png.import b/assets/minigames/minigame_ui/graphic/primary_text_box_outline.png.import index 03f96260..133a9ed7 100644 --- a/assets/minigames/minigame_ui/graphic/primary_text_box_outline.png.import +++ b/assets/minigames/minigame_ui/graphic/primary_text_box_outline.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://bbtr0cyiapi3g" -path="res://.godot/imported/primary_text_box_outline.png-5b726d4cac88e8411d188e6023d8d5da.ctex" +path.s3tc="res://.godot/imported/primary_text_box_outline.png-5b726d4cac88e8411d188e6023d8d5da.s3tc.ctex" +path.etc2="res://.godot/imported/primary_text_box_outline.png-5b726d4cac88e8411d188e6023d8d5da.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/minigames/minigame_ui/graphic/primary_text_box_outline.png" -dest_files=["res://.godot/imported/primary_text_box_outline.png-5b726d4cac88e8411d188e6023d8d5da.ctex"] +dest_files=["res://.godot/imported/primary_text_box_outline.png-5b726d4cac88e8411d188e6023d8d5da.s3tc.ctex", "res://.godot/imported/primary_text_box_outline.png-5b726d4cac88e8411d188e6023d8d5da.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/minigames/minigame_ui/graphic/title.png.import b/assets/minigames/minigame_ui/graphic/title.png.import index ece59ff2..1781d112 100644 --- a/assets/minigames/minigame_ui/graphic/title.png.import +++ b/assets/minigames/minigame_ui/graphic/title.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://babk0f7ayvar1" -path="res://.godot/imported/title.png-7e5193721310b57b3ffb1167ccba43df.ctex" +path.s3tc="res://.godot/imported/title.png-7e5193721310b57b3ffb1167ccba43df.s3tc.ctex" +path.etc2="res://.godot/imported/title.png-7e5193721310b57b3ffb1167ccba43df.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/minigames/minigame_ui/graphic/title.png" -dest_files=["res://.godot/imported/title.png-7e5193721310b57b3ffb1167ccba43df.ctex"] +dest_files=["res://.godot/imported/title.png-7e5193721310b57b3ffb1167ccba43df.s3tc.ctex", "res://.godot/imported/title.png-7e5193721310b57b3ffb1167ccba43df.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/minigames/monkeys/graphic/background.png.import b/assets/minigames/monkeys/graphic/background.png.import index fac96f5d..f058db0d 100644 --- a/assets/minigames/monkeys/graphic/background.png.import +++ b/assets/minigames/monkeys/graphic/background.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://demg0gbj4lwic" -path="res://.godot/imported/background.png-3e0c4215e692346e0eaa221c7e37d87a.ctex" +path.s3tc="res://.godot/imported/background.png-3e0c4215e692346e0eaa221c7e37d87a.s3tc.ctex" +path.etc2="res://.godot/imported/background.png-3e0c4215e692346e0eaa221c7e37d87a.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/minigames/monkeys/graphic/background.png" -dest_files=["res://.godot/imported/background.png-3e0c4215e692346e0eaa221c7e37d87a.ctex"] +dest_files=["res://.godot/imported/background.png-3e0c4215e692346e0eaa221c7e37d87a.s3tc.ctex", "res://.godot/imported/background.png-3e0c4215e692346e0eaa221c7e37d87a.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/minigames/monkeys/graphic/background_shadows.png.import b/assets/minigames/monkeys/graphic/background_shadows.png.import index 8695ce95..b3bb8f20 100644 --- a/assets/minigames/monkeys/graphic/background_shadows.png.import +++ b/assets/minigames/monkeys/graphic/background_shadows.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://b5dpemo34ts5s" -path="res://.godot/imported/background_shadows.png-abf4b46cbe05c69b23d0c391b191de22.ctex" +path.s3tc="res://.godot/imported/background_shadows.png-abf4b46cbe05c69b23d0c391b191de22.s3tc.ctex" +path.etc2="res://.godot/imported/background_shadows.png-abf4b46cbe05c69b23d0c391b191de22.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/minigames/monkeys/graphic/background_shadows.png" -dest_files=["res://.godot/imported/background_shadows.png-abf4b46cbe05c69b23d0c391b191de22.ctex"] +dest_files=["res://.godot/imported/background_shadows.png-abf4b46cbe05c69b23d0c391b191de22.s3tc.ctex", "res://.godot/imported/background_shadows.png-abf4b46cbe05c69b23d0c391b191de22.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/minigames/monkeys/graphic/billboard.png.import b/assets/minigames/monkeys/graphic/billboard.png.import index e8afd316..867db4d6 100644 --- a/assets/minigames/monkeys/graphic/billboard.png.import +++ b/assets/minigames/monkeys/graphic/billboard.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://blejqny5syems" -path="res://.godot/imported/billboard.png-744336044fedeb85a9d8220cf978f225.ctex" +path.s3tc="res://.godot/imported/billboard.png-744336044fedeb85a9d8220cf978f225.s3tc.ctex" +path.etc2="res://.godot/imported/billboard.png-744336044fedeb85a9d8220cf978f225.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/minigames/monkeys/graphic/billboard.png" -dest_files=["res://.godot/imported/billboard.png-744336044fedeb85a9d8220cf978f225.ctex"] +dest_files=["res://.godot/imported/billboard.png-744336044fedeb85a9d8220cf978f225.s3tc.ctex", "res://.godot/imported/billboard.png-744336044fedeb85a9d8220cf978f225.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/minigames/monkeys/graphic/caterpillar.png.import b/assets/minigames/monkeys/graphic/caterpillar.png.import index 51b804c6..b17da33c 100644 --- a/assets/minigames/monkeys/graphic/caterpillar.png.import +++ b/assets/minigames/monkeys/graphic/caterpillar.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://u2x8lg54e1g" -path="res://.godot/imported/caterpillar.png-c28d405f3f7d508211c0ecbc27d2cc5c.ctex" +path.s3tc="res://.godot/imported/caterpillar.png-c28d405f3f7d508211c0ecbc27d2cc5c.s3tc.ctex" +path.etc2="res://.godot/imported/caterpillar.png-c28d405f3f7d508211c0ecbc27d2cc5c.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/minigames/monkeys/graphic/caterpillar.png" -dest_files=["res://.godot/imported/caterpillar.png-c28d405f3f7d508211c0ecbc27d2cc5c.ctex"] +dest_files=["res://.godot/imported/caterpillar.png-c28d405f3f7d508211c0ecbc27d2cc5c.s3tc.ctex", "res://.godot/imported/caterpillar.png-c28d405f3f7d508211c0ecbc27d2cc5c.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/minigames/monkeys/graphic/ground.png.import b/assets/minigames/monkeys/graphic/ground.png.import index 93a7d83f..ddd8a26d 100644 --- a/assets/minigames/monkeys/graphic/ground.png.import +++ b/assets/minigames/monkeys/graphic/ground.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://b6k16tfsm2p4u" -path="res://.godot/imported/ground.png-15ba339f1b6209172fdb711379739ef5.ctex" +path.s3tc="res://.godot/imported/ground.png-15ba339f1b6209172fdb711379739ef5.s3tc.ctex" +path.etc2="res://.godot/imported/ground.png-15ba339f1b6209172fdb711379739ef5.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/minigames/monkeys/graphic/ground.png" -dest_files=["res://.godot/imported/ground.png-15ba339f1b6209172fdb711379739ef5.ctex"] +dest_files=["res://.godot/imported/ground.png-15ba339f1b6209172fdb711379739ef5.s3tc.ctex", "res://.godot/imported/ground.png-15ba339f1b6209172fdb711379739ef5.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/minigames/monkeys/graphic/king_spritesheet.png.import b/assets/minigames/monkeys/graphic/king_spritesheet.png.import index 5c578fa6..beae88b1 100644 --- a/assets/minigames/monkeys/graphic/king_spritesheet.png.import +++ b/assets/minigames/monkeys/graphic/king_spritesheet.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://boxmlmbplr12i" -path="res://.godot/imported/king_spritesheet.png-46e752a76092c6981ba363d5eca9c3e2.ctex" +path.s3tc="res://.godot/imported/king_spritesheet.png-46e752a76092c6981ba363d5eca9c3e2.s3tc.ctex" +path.etc2="res://.godot/imported/king_spritesheet.png-46e752a76092c6981ba363d5eca9c3e2.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/minigames/monkeys/graphic/king_spritesheet.png" -dest_files=["res://.godot/imported/king_spritesheet.png-46e752a76092c6981ba363d5eca9c3e2.ctex"] +dest_files=["res://.godot/imported/king_spritesheet.png-46e752a76092c6981ba363d5eca9c3e2.s3tc.ctex", "res://.godot/imported/king_spritesheet.png-46e752a76092c6981ba363d5eca9c3e2.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/minigames/monkeys/graphic/monkey_spritesheet.png.import b/assets/minigames/monkeys/graphic/monkey_spritesheet.png.import index a757d97c..d98dd604 100644 --- a/assets/minigames/monkeys/graphic/monkey_spritesheet.png.import +++ b/assets/minigames/monkeys/graphic/monkey_spritesheet.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://d0jobqj4fvrwy" -path="res://.godot/imported/monkey_spritesheet.png-79c879ef4807d3aa5e28bf955b5a3746.ctex" +path.s3tc="res://.godot/imported/monkey_spritesheet.png-79c879ef4807d3aa5e28bf955b5a3746.s3tc.ctex" +path.etc2="res://.godot/imported/monkey_spritesheet.png-79c879ef4807d3aa5e28bf955b5a3746.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/minigames/monkeys/graphic/monkey_spritesheet.png" -dest_files=["res://.godot/imported/monkey_spritesheet.png-79c879ef4807d3aa5e28bf955b5a3746.ctex"] +dest_files=["res://.godot/imported/monkey_spritesheet.png-79c879ef4807d3aa5e28bf955b5a3746.s3tc.ctex", "res://.godot/imported/monkey_spritesheet.png-79c879ef4807d3aa5e28bf955b5a3746.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/minigames/monkeys/graphic/palmtree_01.png.import b/assets/minigames/monkeys/graphic/palmtree_01.png.import index 59718d05..4eae09fd 100644 --- a/assets/minigames/monkeys/graphic/palmtree_01.png.import +++ b/assets/minigames/monkeys/graphic/palmtree_01.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://eor7gaddgj5d" -path="res://.godot/imported/palmtree_01.png-d2c9bb3d1571ad618dba3e80ef4d0456.ctex" +path.s3tc="res://.godot/imported/palmtree_01.png-d2c9bb3d1571ad618dba3e80ef4d0456.s3tc.ctex" +path.etc2="res://.godot/imported/palmtree_01.png-d2c9bb3d1571ad618dba3e80ef4d0456.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/minigames/monkeys/graphic/palmtree_01.png" -dest_files=["res://.godot/imported/palmtree_01.png-d2c9bb3d1571ad618dba3e80ef4d0456.ctex"] +dest_files=["res://.godot/imported/palmtree_01.png-d2c9bb3d1571ad618dba3e80ef4d0456.s3tc.ctex", "res://.godot/imported/palmtree_01.png-d2c9bb3d1571ad618dba3e80ef4d0456.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/minigames/monkeys/graphic/palmtree_02.png.import b/assets/minigames/monkeys/graphic/palmtree_02.png.import index 66d83605..93b7757f 100644 --- a/assets/minigames/monkeys/graphic/palmtree_02.png.import +++ b/assets/minigames/monkeys/graphic/palmtree_02.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://fex5yvybinsx" -path="res://.godot/imported/palmtree_02.png-0180af1631e93bd44dcded1d875a89be.ctex" +path.s3tc="res://.godot/imported/palmtree_02.png-0180af1631e93bd44dcded1d875a89be.s3tc.ctex" +path.etc2="res://.godot/imported/palmtree_02.png-0180af1631e93bd44dcded1d875a89be.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/minigames/monkeys/graphic/palmtree_02.png" -dest_files=["res://.godot/imported/palmtree_02.png-0180af1631e93bd44dcded1d875a89be.ctex"] +dest_files=["res://.godot/imported/palmtree_02.png-0180af1631e93bd44dcded1d875a89be.s3tc.ctex", "res://.godot/imported/palmtree_02.png-0180af1631e93bd44dcded1d875a89be.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/minigames/parakeets/graphic/background_1.png.import b/assets/minigames/parakeets/graphic/background_1.png.import index 41556a30..9e2bb4e6 100644 --- a/assets/minigames/parakeets/graphic/background_1.png.import +++ b/assets/minigames/parakeets/graphic/background_1.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://cc01gd1hm6hc3" -path="res://.godot/imported/background_1.png-8ac3644edd63999756849ff3e759d11b.ctex" +path.s3tc="res://.godot/imported/background_1.png-8ac3644edd63999756849ff3e759d11b.s3tc.ctex" +path.etc2="res://.godot/imported/background_1.png-8ac3644edd63999756849ff3e759d11b.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/minigames/parakeets/graphic/background_1.png" -dest_files=["res://.godot/imported/background_1.png-8ac3644edd63999756849ff3e759d11b.ctex"] +dest_files=["res://.godot/imported/background_1.png-8ac3644edd63999756849ff3e759d11b.s3tc.ctex", "res://.godot/imported/background_1.png-8ac3644edd63999756849ff3e759d11b.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/minigames/parakeets/graphic/background_2.png.import b/assets/minigames/parakeets/graphic/background_2.png.import index 7bfa587f..593a676a 100644 --- a/assets/minigames/parakeets/graphic/background_2.png.import +++ b/assets/minigames/parakeets/graphic/background_2.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://pj0mlw24jayt" -path="res://.godot/imported/background_2.png-347fda916494b7c02674be20cbfaaae0.ctex" +path.s3tc="res://.godot/imported/background_2.png-347fda916494b7c02674be20cbfaaae0.s3tc.ctex" +path.etc2="res://.godot/imported/background_2.png-347fda916494b7c02674be20cbfaaae0.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/minigames/parakeets/graphic/background_2.png" -dest_files=["res://.godot/imported/background_2.png-347fda916494b7c02674be20cbfaaae0.ctex"] +dest_files=["res://.godot/imported/background_2.png-347fda916494b7c02674be20cbfaaae0.s3tc.ctex", "res://.godot/imported/background_2.png-347fda916494b7c02674be20cbfaaae0.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/minigames/parakeets/graphic/background_3.png.import b/assets/minigames/parakeets/graphic/background_3.png.import index fda1a9e0..89682b2e 100644 --- a/assets/minigames/parakeets/graphic/background_3.png.import +++ b/assets/minigames/parakeets/graphic/background_3.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://cs16kbsvnsltg" -path="res://.godot/imported/background_3.png-63a8c14a4cb795cb6e87dd2e5ae19ca9.ctex" +path.s3tc="res://.godot/imported/background_3.png-63a8c14a4cb795cb6e87dd2e5ae19ca9.s3tc.ctex" +path.etc2="res://.godot/imported/background_3.png-63a8c14a4cb795cb6e87dd2e5ae19ca9.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/minigames/parakeets/graphic/background_3.png" -dest_files=["res://.godot/imported/background_3.png-63a8c14a4cb795cb6e87dd2e5ae19ca9.ctex"] +dest_files=["res://.godot/imported/background_3.png-63a8c14a4cb795cb6e87dd2e5ae19ca9.s3tc.ctex", "res://.godot/imported/background_3.png-63a8c14a4cb795cb6e87dd2e5ae19ca9.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/minigames/parakeets/graphic/green_parakeet_spritesheet.png.import b/assets/minigames/parakeets/graphic/green_parakeet_spritesheet.png.import index d8363558..14a615f0 100644 --- a/assets/minigames/parakeets/graphic/green_parakeet_spritesheet.png.import +++ b/assets/minigames/parakeets/graphic/green_parakeet_spritesheet.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://xo0vj3ubvidu" -path="res://.godot/imported/green_parakeet_spritesheet.png-1c24cd90a1fc5e0c07128873d7f7644c.ctex" +path.s3tc="res://.godot/imported/green_parakeet_spritesheet.png-1c24cd90a1fc5e0c07128873d7f7644c.s3tc.ctex" +path.etc2="res://.godot/imported/green_parakeet_spritesheet.png-1c24cd90a1fc5e0c07128873d7f7644c.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/minigames/parakeets/graphic/green_parakeet_spritesheet.png" -dest_files=["res://.godot/imported/green_parakeet_spritesheet.png-1c24cd90a1fc5e0c07128873d7f7644c.ctex"] +dest_files=["res://.godot/imported/green_parakeet_spritesheet.png-1c24cd90a1fc5e0c07128873d7f7644c.s3tc.ctex", "res://.godot/imported/green_parakeet_spritesheet.png-1c24cd90a1fc5e0c07128873d7f7644c.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/minigames/parakeets/graphic/nest.png.import b/assets/minigames/parakeets/graphic/nest.png.import index 2cde19eb..8d1bc2c0 100644 --- a/assets/minigames/parakeets/graphic/nest.png.import +++ b/assets/minigames/parakeets/graphic/nest.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://ca2jljrk2wnjt" -path="res://.godot/imported/nest.png-d6526be76febf21ea30b47b12ae7e29f.ctex" +path.s3tc="res://.godot/imported/nest.png-d6526be76febf21ea30b47b12ae7e29f.s3tc.ctex" +path.etc2="res://.godot/imported/nest.png-d6526be76febf21ea30b47b12ae7e29f.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/minigames/parakeets/graphic/nest.png" -dest_files=["res://.godot/imported/nest.png-d6526be76febf21ea30b47b12ae7e29f.ctex"] +dest_files=["res://.godot/imported/nest.png-d6526be76febf21ea30b47b12ae7e29f.s3tc.ctex", "res://.godot/imported/nest.png-d6526be76febf21ea30b47b12ae7e29f.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/minigames/parakeets/graphic/red_parakeet_spritesheet.png.import b/assets/minigames/parakeets/graphic/red_parakeet_spritesheet.png.import index 9e6ca0ca..2c6e8986 100644 --- a/assets/minigames/parakeets/graphic/red_parakeet_spritesheet.png.import +++ b/assets/minigames/parakeets/graphic/red_parakeet_spritesheet.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://ct4ags1dnh17v" -path="res://.godot/imported/red_parakeet_spritesheet.png-6348e73c3282a1fcc2c4ef6b7ae32a62.ctex" +path.s3tc="res://.godot/imported/red_parakeet_spritesheet.png-6348e73c3282a1fcc2c4ef6b7ae32a62.s3tc.ctex" +path.etc2="res://.godot/imported/red_parakeet_spritesheet.png-6348e73c3282a1fcc2c4ef6b7ae32a62.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/minigames/parakeets/graphic/red_parakeet_spritesheet.png" -dest_files=["res://.godot/imported/red_parakeet_spritesheet.png-6348e73c3282a1fcc2c4ef6b7ae32a62.ctex"] +dest_files=["res://.godot/imported/red_parakeet_spritesheet.png-6348e73c3282a1fcc2c4ef6b7ae32a62.s3tc.ctex", "res://.godot/imported/red_parakeet_spritesheet.png-6348e73c3282a1fcc2c4ef6b7ae32a62.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/minigames/parakeets/graphic/tree.png.import b/assets/minigames/parakeets/graphic/tree.png.import index 7ed38df9..f3d47302 100644 --- a/assets/minigames/parakeets/graphic/tree.png.import +++ b/assets/minigames/parakeets/graphic/tree.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://0p171y6thba8" -path="res://.godot/imported/tree.png-1e16c7baa542f9e01223cd622d6ec61c.ctex" +path.s3tc="res://.godot/imported/tree.png-1e16c7baa542f9e01223cd622d6ec61c.s3tc.ctex" +path.etc2="res://.godot/imported/tree.png-1e16c7baa542f9e01223cd622d6ec61c.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/minigames/parakeets/graphic/tree.png" -dest_files=["res://.godot/imported/tree.png-1e16c7baa542f9e01223cd622d6ec61c.ctex"] +dest_files=["res://.godot/imported/tree.png-1e16c7baa542f9e01223cd622d6ec61c.s3tc.ctex", "res://.godot/imported/tree.png-1e16c7baa542f9e01223cd622d6ec61c.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/minigames/parakeets/graphic/tree_trunk.png.import b/assets/minigames/parakeets/graphic/tree_trunk.png.import index 421fe28a..f973ad53 100644 --- a/assets/minigames/parakeets/graphic/tree_trunk.png.import +++ b/assets/minigames/parakeets/graphic/tree_trunk.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://clvh07xfgjmri" -path="res://.godot/imported/tree_trunk.png-5c553d87c35516a5545f3031181f8178.ctex" +path.s3tc="res://.godot/imported/tree_trunk.png-5c553d87c35516a5545f3031181f8178.s3tc.ctex" +path.etc2="res://.godot/imported/tree_trunk.png-5c553d87c35516a5545f3031181f8178.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/minigames/parakeets/graphic/tree_trunk.png" -dest_files=["res://.godot/imported/tree_trunk.png-5c553d87c35516a5545f3031181f8178.ctex"] +dest_files=["res://.godot/imported/tree_trunk.png-5c553d87c35516a5545f3031181f8178.s3tc.ctex", "res://.godot/imported/tree_trunk.png-5c553d87c35516a5545f3031181f8178.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/minigames/parakeets/graphic/yellow_parakeet_spritesheet.png.import b/assets/minigames/parakeets/graphic/yellow_parakeet_spritesheet.png.import index c1fdf219..fe39f896 100644 --- a/assets/minigames/parakeets/graphic/yellow_parakeet_spritesheet.png.import +++ b/assets/minigames/parakeets/graphic/yellow_parakeet_spritesheet.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://dd37d3qdrfrt0" -path="res://.godot/imported/yellow_parakeet_spritesheet.png-dc1a2f533d2ab4ef7cba014a1e83cfee.ctex" +path.s3tc="res://.godot/imported/yellow_parakeet_spritesheet.png-dc1a2f533d2ab4ef7cba014a1e83cfee.s3tc.ctex" +path.etc2="res://.godot/imported/yellow_parakeet_spritesheet.png-dc1a2f533d2ab4ef7cba014a1e83cfee.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/minigames/parakeets/graphic/yellow_parakeet_spritesheet.png" -dest_files=["res://.godot/imported/yellow_parakeet_spritesheet.png-dc1a2f533d2ab4ef7cba014a1e83cfee.ctex"] +dest_files=["res://.godot/imported/yellow_parakeet_spritesheet.png-dc1a2f533d2ab4ef7cba014a1e83cfee.s3tc.ctex", "res://.godot/imported/yellow_parakeet_spritesheet.png-dc1a2f533d2ab4ef7cba014a1e83cfee.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/minigames/penguin/graphic/background.png.import b/assets/minigames/penguin/graphic/background.png.import index fa3201e5..82c3ee8b 100644 --- a/assets/minigames/penguin/graphic/background.png.import +++ b/assets/minigames/penguin/graphic/background.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://cvnv0beq0dcr4" -path="res://.godot/imported/background.png-733f1ae36940b3c6e4828f77b3c98adb.ctex" +path.s3tc="res://.godot/imported/background.png-733f1ae36940b3c6e4828f77b3c98adb.s3tc.ctex" +path.etc2="res://.godot/imported/background.png-733f1ae36940b3c6e4828f77b3c98adb.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/minigames/penguin/graphic/background.png" -dest_files=["res://.godot/imported/background.png-733f1ae36940b3c6e4828f77b3c98adb.ctex"] +dest_files=["res://.godot/imported/background.png-733f1ae36940b3c6e4828f77b3c98adb.s3tc.ctex", "res://.godot/imported/background.png-733f1ae36940b3c6e4828f77b3c98adb.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/minigames/penguin/graphic/penguin.png.import b/assets/minigames/penguin/graphic/penguin.png.import index 981eaa67..8461642a 100644 --- a/assets/minigames/penguin/graphic/penguin.png.import +++ b/assets/minigames/penguin/graphic/penguin.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://4mr2idafmxcp" -path="res://.godot/imported/penguin.png-59157139f96ad77ee515b94c8f6b0c54.ctex" +path.s3tc="res://.godot/imported/penguin.png-59157139f96ad77ee515b94c8f6b0c54.s3tc.ctex" +path.etc2="res://.godot/imported/penguin.png-59157139f96ad77ee515b94c8f6b0c54.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/minigames/penguin/graphic/penguin.png" -dest_files=["res://.godot/imported/penguin.png-59157139f96ad77ee515b94c8f6b0c54.ctex"] +dest_files=["res://.godot/imported/penguin.png-59157139f96ad77ee515b94c8f6b0c54.s3tc.ctex", "res://.godot/imported/penguin.png-59157139f96ad77ee515b94c8f6b0c54.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/minigames/turtles/graphic/green_turtle_spritesheet.png.import b/assets/minigames/turtles/graphic/green_turtle_spritesheet.png.import index 3b6def78..5b4322fa 100644 --- a/assets/minigames/turtles/graphic/green_turtle_spritesheet.png.import +++ b/assets/minigames/turtles/graphic/green_turtle_spritesheet.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://cpyluuh331y6u" -path="res://.godot/imported/green_turtle_spritesheet.png-b1503559ba979fc938d9381ac49ec72b.ctex" +path.s3tc="res://.godot/imported/green_turtle_spritesheet.png-b1503559ba979fc938d9381ac49ec72b.s3tc.ctex" +path.etc2="res://.godot/imported/green_turtle_spritesheet.png-b1503559ba979fc938d9381ac49ec72b.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/minigames/turtles/graphic/green_turtle_spritesheet.png" -dest_files=["res://.godot/imported/green_turtle_spritesheet.png-b1503559ba979fc938d9381ac49ec72b.ctex"] +dest_files=["res://.godot/imported/green_turtle_spritesheet.png-b1503559ba979fc938d9381ac49ec72b.s3tc.ctex", "res://.godot/imported/green_turtle_spritesheet.png-b1503559ba979fc938d9381ac49ec72b.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/minigames/turtles/graphic/khaki_turtle_spritesheet.png.import b/assets/minigames/turtles/graphic/khaki_turtle_spritesheet.png.import index 0ffebf69..7a9f38d4 100644 --- a/assets/minigames/turtles/graphic/khaki_turtle_spritesheet.png.import +++ b/assets/minigames/turtles/graphic/khaki_turtle_spritesheet.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://d14qsri0qk7ka" -path="res://.godot/imported/khaki_turtle_spritesheet.png-a086f44af79aa8241854ed0402dd727c.ctex" +path.s3tc="res://.godot/imported/khaki_turtle_spritesheet.png-a086f44af79aa8241854ed0402dd727c.s3tc.ctex" +path.etc2="res://.godot/imported/khaki_turtle_spritesheet.png-a086f44af79aa8241854ed0402dd727c.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/minigames/turtles/graphic/khaki_turtle_spritesheet.png" -dest_files=["res://.godot/imported/khaki_turtle_spritesheet.png-a086f44af79aa8241854ed0402dd727c.ctex"] +dest_files=["res://.godot/imported/khaki_turtle_spritesheet.png-a086f44af79aa8241854ed0402dd727c.s3tc.ctex", "res://.godot/imported/khaki_turtle_spritesheet.png-a086f44af79aa8241854ed0402dd727c.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/minigames/turtles/graphic/purple_turtle_spritesheet.png.import b/assets/minigames/turtles/graphic/purple_turtle_spritesheet.png.import index 460c4d7e..3b2de35d 100644 --- a/assets/minigames/turtles/graphic/purple_turtle_spritesheet.png.import +++ b/assets/minigames/turtles/graphic/purple_turtle_spritesheet.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://cgtaho31ifol5" -path="res://.godot/imported/purple_turtle_spritesheet.png-71c379fad43eb5a5e325a6344e8c2842.ctex" +path.s3tc="res://.godot/imported/purple_turtle_spritesheet.png-71c379fad43eb5a5e325a6344e8c2842.s3tc.ctex" +path.etc2="res://.godot/imported/purple_turtle_spritesheet.png-71c379fad43eb5a5e325a6344e8c2842.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/minigames/turtles/graphic/purple_turtle_spritesheet.png" -dest_files=["res://.godot/imported/purple_turtle_spritesheet.png-71c379fad43eb5a5e325a6344e8c2842.ctex"] +dest_files=["res://.godot/imported/purple_turtle_spritesheet.png-71c379fad43eb5a5e325a6344e8c2842.s3tc.ctex", "res://.godot/imported/purple_turtle_spritesheet.png-71c379fad43eb5a5e325a6344e8c2842.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/minigames/turtles/graphic/turtle_background.png.import b/assets/minigames/turtles/graphic/turtle_background.png.import index 4467b5a7..3584f619 100644 --- a/assets/minigames/turtles/graphic/turtle_background.png.import +++ b/assets/minigames/turtles/graphic/turtle_background.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://caiayxwsgup2e" -path="res://.godot/imported/turtle_background.png-c9c8938677dce565310fd246ee48a16d.ctex" +path.s3tc="res://.godot/imported/turtle_background.png-c9c8938677dce565310fd246ee48a16d.s3tc.ctex" +path.etc2="res://.godot/imported/turtle_background.png-c9c8938677dce565310fd246ee48a16d.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/minigames/turtles/graphic/turtle_background.png" -dest_files=["res://.godot/imported/turtle_background.png-c9c8938677dce565310fd246ee48a16d.ctex"] +dest_files=["res://.godot/imported/turtle_background.png-c9c8938677dce565310fd246ee48a16d.s3tc.ctex", "res://.godot/imported/turtle_background.png-c9c8938677dce565310fd246ee48a16d.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/minigames/turtles/graphic/turtle_island.png.import b/assets/minigames/turtles/graphic/turtle_island.png.import index b403b827..738a4724 100644 --- a/assets/minigames/turtles/graphic/turtle_island.png.import +++ b/assets/minigames/turtles/graphic/turtle_island.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://c3i6riv7blkux" -path="res://.godot/imported/turtle_island.png-b1b57dce767df44e00eb00c5fd24d944.ctex" +path.s3tc="res://.godot/imported/turtle_island.png-b1b57dce767df44e00eb00c5fd24d944.s3tc.ctex" +path.etc2="res://.godot/imported/turtle_island.png-b1b57dce767df44e00eb00c5fd24d944.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/minigames/turtles/graphic/turtle_island.png" -dest_files=["res://.godot/imported/turtle_island.png-b1b57dce767df44e00eb00c5fd24d944.ctex"] +dest_files=["res://.godot/imported/turtle_island.png-b1b57dce767df44e00eb00c5fd24d944.s3tc.ctex", "res://.godot/imported/turtle_island.png-b1b57dce767df44e00eb00c5fd24d944.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/particles/bigstar_x36_15fps.png.import b/assets/particles/bigstar_x36_15fps.png.import index 7ae96b92..94bc8e1a 100644 --- a/assets/particles/bigstar_x36_15fps.png.import +++ b/assets/particles/bigstar_x36_15fps.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://dx7w01wdyq0b5" -path="res://.godot/imported/bigstar_x36_15fps.png-2e3129601cf22a7c16cf688a282a1566.ctex" +path.s3tc="res://.godot/imported/bigstar_x36_15fps.png-2e3129601cf22a7c16cf688a282a1566.s3tc.ctex" +path.etc2="res://.godot/imported/bigstar_x36_15fps.png-2e3129601cf22a7c16cf688a282a1566.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/particles/bigstar_x36_15fps.png" -dest_files=["res://.godot/imported/bigstar_x36_15fps.png-2e3129601cf22a7c16cf688a282a1566.ctex"] +dest_files=["res://.godot/imported/bigstar_x36_15fps.png-2e3129601cf22a7c16cf688a282a1566.s3tc.ctex", "res://.godot/imported/bigstar_x36_15fps.png-2e3129601cf22a7c16cf688a282a1566.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/prof_tool_icon.png.import b/assets/prof_tool_icon.png.import index 34051415..2f9cae20 100644 --- a/assets/prof_tool_icon.png.import +++ b/assets/prof_tool_icon.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://dipdtrs4i7i7v" -path="res://.godot/imported/prof_tool_icon.png-547c9cde6a7d8e3765bcd13d7689a2c2.ctex" +path.s3tc="res://.godot/imported/prof_tool_icon.png-547c9cde6a7d8e3765bcd13d7689a2c2.s3tc.ctex" +path.etc2="res://.godot/imported/prof_tool_icon.png-547c9cde6a7d8e3765bcd13d7689a2c2.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/prof_tool_icon.png" -dest_files=["res://.godot/imported/prof_tool_icon.png-547c9cde6a7d8e3765bcd13d7689a2c2.ctex"] +dest_files=["res://.godot/imported/prof_tool_icon.png-547c9cde6a7d8e3765bcd13d7689a2c2.s3tc.ctex", "res://.godot/imported/prof_tool_icon.png-547c9cde6a7d8e3765bcd13d7689a2c2.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/splash.png.import b/assets/splash.png.import index 9ec4c42b..8dc9dc02 100644 --- a/assets/splash.png.import +++ b/assets/splash.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://dbymcxksnha54" -path="res://.godot/imported/splash.png-8aa957744d9f4b764dd4680b37c88571.ctex" +path.s3tc="res://.godot/imported/splash.png-8aa957744d9f4b764dd4680b37c88571.s3tc.ctex" +path.etc2="res://.godot/imported/splash.png-8aa957744d9f4b764dd4680b37c88571.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/splash.png" -dest_files=["res://.godot/imported/splash.png-8aa957744d9f4b764dd4680b37c88571.ctex"] +dest_files=["res://.godot/imported/splash.png-8aa957744d9f4b764dd4680b37c88571.s3tc.ctex", "res://.godot/imported/splash.png-8aa957744d9f4b764dd4680b37c88571.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/vfx/firework.png.import b/assets/vfx/firework.png.import index ed8c725b..f0dacfde 100644 --- a/assets/vfx/firework.png.import +++ b/assets/vfx/firework.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://sa7dtkkhrjw7" -path="res://.godot/imported/firework.png-52ca1322efdfc2cd4b1814752549e23c.ctex" +path.s3tc="res://.godot/imported/firework.png-52ca1322efdfc2cd4b1814752549e23c.s3tc.ctex" +path.etc2="res://.godot/imported/firework.png-52ca1322efdfc2cd4b1814752549e23c.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/vfx/firework.png" -dest_files=["res://.godot/imported/firework.png-52ca1322efdfc2cd4b1814752549e23c.ctex"] +dest_files=["res://.godot/imported/firework.png-52ca1322efdfc2cd4b1814752549e23c.s3tc.ctex", "res://.godot/imported/firework.png-52ca1322efdfc2cd4b1814752549e23c.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/vfx/fx_02.png.import b/assets/vfx/fx_02.png.import index 2604fed0..e00cc53a 100644 --- a/assets/vfx/fx_02.png.import +++ b/assets/vfx/fx_02.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://3idggaf5hbbm" -path="res://.godot/imported/fx_02.png-d95f6d1261af349fc7a2d12c27ea5233.ctex" +path.s3tc="res://.godot/imported/fx_02.png-d95f6d1261af349fc7a2d12c27ea5233.s3tc.ctex" +path.etc2="res://.godot/imported/fx_02.png-d95f6d1261af349fc7a2d12c27ea5233.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/vfx/fx_02.png" -dest_files=["res://.godot/imported/fx_02.png-d95f6d1261af349fc7a2d12c27ea5233.ctex"] +dest_files=["res://.godot/imported/fx_02.png-d95f6d1261af349fc7a2d12c27ea5233.s3tc.ctex", "res://.godot/imported/fx_02.png-d95f6d1261af349fc7a2d12c27ea5233.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/vfx/fx_09.png.import b/assets/vfx/fx_09.png.import index 9a442bf9..f35dfb9d 100644 --- a/assets/vfx/fx_09.png.import +++ b/assets/vfx/fx_09.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://dif3xpncwixbh" -path="res://.godot/imported/fx_09.png-2c655fd7c01218059d37c9b594139fc9.ctex" +path.s3tc="res://.godot/imported/fx_09.png-2c655fd7c01218059d37c9b594139fc9.s3tc.ctex" +path.etc2="res://.godot/imported/fx_09.png-2c655fd7c01218059d37c9b594139fc9.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/vfx/fx_09.png" -dest_files=["res://.godot/imported/fx_09.png-2c655fd7c01218059d37c9b594139fc9.ctex"] +dest_files=["res://.godot/imported/fx_09.png-2c655fd7c01218059d37c9b594139fc9.s3tc.ctex", "res://.godot/imported/fx_09.png-2c655fd7c01218059d37c9b594139fc9.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/vfx/halo.png.import b/assets/vfx/halo.png.import index 745d7cc7..e6d94fef 100644 --- a/assets/vfx/halo.png.import +++ b/assets/vfx/halo.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://cbjnvgc5jkpj8" -path="res://.godot/imported/halo.png-db32dd271a1357bbd35df9ced74ca9b6.ctex" +path.s3tc="res://.godot/imported/halo.png-db32dd271a1357bbd35df9ced74ca9b6.s3tc.ctex" +path.etc2="res://.godot/imported/halo.png-db32dd271a1357bbd35df9ced74ca9b6.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/vfx/halo.png" -dest_files=["res://.godot/imported/halo.png-db32dd271a1357bbd35df9ced74ca9b6.ctex"] +dest_files=["res://.godot/imported/halo.png-db32dd271a1357bbd35df9ced74ca9b6.s3tc.ctex", "res://.godot/imported/halo.png-db32dd271a1357bbd35df9ced74ca9b6.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/assets/vfx/star.png.import b/assets/vfx/star.png.import index abd1eeed..1c561113 100644 --- a/assets/vfx/star.png.import +++ b/assets/vfx/star.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://ckmh0rn7e8mq" -path="res://.godot/imported/star.png-afe7289cc3dc6175eb3695511747ad4e.ctex" +path.s3tc="res://.godot/imported/star.png-afe7289cc3dc6175eb3695511747ad4e.s3tc.ctex" +path.etc2="res://.godot/imported/star.png-afe7289cc3dc6175eb3695511747ad4e.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://assets/vfx/star.png" -dest_files=["res://.godot/imported/star.png-afe7289cc3dc6175eb3695511747ad4e.ctex"] +dest_files=["res://.godot/imported/star.png-afe7289cc3dc6175eb3695511747ad4e.s3tc.ctex", "res://.godot/imported/star.png-afe7289cc3dc6175eb3695511747ad4e.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" diff --git a/project.godot b/project.godot index 3959e403..4b4c0754 100644 --- a/project.godot +++ b/project.godot @@ -102,7 +102,7 @@ locale/translations=PackedStringArray("res://kalulu_localization.es.translation" [rendering] +textures/canvas_textures/default_texture_filter=2 renderer/rendering_method="gl_compatibility" renderer/rendering_method.mobile="gl_compatibility" textures/vram_compression/import_etc2_astc=true -viewport/hdr_2d=true diff --git a/sources/minigames/base/play_button_mask.png.import b/sources/minigames/base/play_button_mask.png.import index e5455094..9a147bf8 100644 --- a/sources/minigames/base/play_button_mask.png.import +++ b/sources/minigames/base/play_button_mask.png.import @@ -3,19 +3,21 @@ importer="texture" type="CompressedTexture2D" uid="uid://chxj1j246l1sl" -path="res://.godot/imported/play_button_mask.png-706266ac52ec17e4f022068a416b2a41.ctex" +path.s3tc="res://.godot/imported/play_button_mask.png-706266ac52ec17e4f022068a416b2a41.s3tc.ctex" +path.etc2="res://.godot/imported/play_button_mask.png-706266ac52ec17e4f022068a416b2a41.etc2.ctex" metadata={ -"vram_texture": false +"imported_formats": ["s3tc_bptc", "etc2_astc"], +"vram_texture": true } [deps] source_file="res://sources/minigames/base/play_button_mask.png" -dest_files=["res://.godot/imported/play_button_mask.png-706266ac52ec17e4f022068a416b2a41.ctex"] +dest_files=["res://.godot/imported/play_button_mask.png-706266ac52ec17e4f022068a416b2a41.s3tc.ctex", "res://.godot/imported/play_button_mask.png-706266ac52ec17e4f022068a416b2a41.etc2.ctex"] [params] -compress/mode=0 +compress/mode=2 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -23,7 +25,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" From 0b9d5f216e6b3d400b40e01eb2b37ff789d13039 Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Thu, 11 Jun 2026 09:44:50 +0200 Subject: [PATCH 105/111] Extract language packs to a temp directory and verify before swapping Follow-up to the previous download fix: the old pack was no longer deleted before the download, but it was still deleted at the start of the extraction step. If the app crashed mid-extraction or the archive was truncated, the device was left without a valid pack; worse, a partially extracted directory containing language.db would pass is_language_directory_valid() on the next offline launch and be accepted as a working pack. The extraction thread now follows an extract / verify / swap sequence: 1. Extract the archive into _tmp instead of the final location, leaving the current pack untouched and avoiding any risk of merging old and new files. 2. Validate the extracted pack (non-empty, language.db present) before touching the current one; on failure, discard the temp directory and the archive, show the invalid-directory error, and keep playing with the current pack. 3. Only then delete the previous pack and rename the new one into place. The window without a valid pack shrinks from the whole extraction to two filesystem operations. If the final rename fails, the temp directory is kept (the data is intact on disk) and the error popup is shown; the next launch detects the missing pack and downloads it again. A leftover temp directory from a crash is removed at the start of the next extraction. Verified with the GUT test suite (62/62 passing). --- .../language_selection/package_downloader.gd | 47 +++++++++++++------ 1 file changed, 32 insertions(+), 15 deletions(-) diff --git a/sources/menus/language_selection/package_downloader.gd b/sources/menus/language_selection/package_downloader.gd index 17e5c1fc..c28fde97 100644 --- a/sources/menus/language_selection/package_downloader.gd +++ b/sources/menus/language_selection/package_downloader.gd @@ -176,29 +176,46 @@ func _copy_data(this: PackageDownloader) -> void: mutex.unlock() ) - # Cleanup previous files - if DirAccess.dir_exists_absolute(current_language_path): - Log.trace("PackageDownloader: Removing existing language directory before extraction") - Utils.delete_directory_recursive(ProjectSettings.globalize_path(current_language_path)) - - # Extract the archive - var subfolder: String = unzipper.extract(language_zip_path, USER_LANGUAGE_RESOURCES_PATH, false) + # Extract to a temporary directory so the current pack stays usable if + # the extraction fails or is interrupted + var temp_extract_path: String = USER_LANGUAGE_RESOURCES_PATH.path_join(language + "_tmp") + if DirAccess.dir_exists_absolute(temp_extract_path): + Utils.delete_directory_recursive(ProjectSettings.globalize_path(temp_extract_path)) + + var subfolder: String = unzipper.extract(language_zip_path, temp_extract_path, false) if subfolder == "": Log.error("PackageDownloader: Extraction failed for %s" % language_zip_path) this.call_thread_safe("_show_error", 2) # Error downloading return - - # Move the data to the locale folder of the user - var error: Error = DirAccess.rename_absolute(USER_LANGUAGE_RESOURCES_PATH.path_join(subfolder), current_language_path) + + # Check the new pack before replacing the current one + var new_pack_path: String = temp_extract_path.path_join(subfolder) + if not is_language_directory_valid(new_pack_path): + Log.error("PackageDownloader: Extracted package at %s is invalid, keeping the current language pack" % new_pack_path) + Utils.delete_directory_recursive(ProjectSettings.globalize_path(temp_extract_path)) + DirAccess.remove_absolute(language_zip_path) + this.call_thread_safe("_show_error", 3) # Invalid language directory + return + + # Replace the previous pack, now that the new one is fully extracted + if DirAccess.dir_exists_absolute(current_language_path): + Log.trace("PackageDownloader: Removing previous language directory") + Utils.delete_directory_recursive(ProjectSettings.globalize_path(current_language_path)) + + var error: Error = DirAccess.rename_absolute(new_pack_path, current_language_path) if error != OK: - Log.error("PackageDownloader: Error " + error_string(error) + " while renaming folder from %s to %s" % [USER_LANGUAGE_RESOURCES_PATH.path_join(subfolder), current_language_path]) - else: - Log.trace("PackageDownloader: Package extracted to %s" % current_language_path) - + # Keep the temporary directory so the data is not lost; the next + # launch will detect the missing pack and download it again + Log.error("PackageDownloader: Error " + error_string(error) + " while renaming folder from %s to %s" % [new_pack_path, current_language_path]) + this.call_thread_safe("_show_error", 2) # Error downloading + return + Log.trace("PackageDownloader: Package extracted to %s" % current_language_path) + # Cleanup unnecessary files + Utils.delete_directory_recursive(ProjectSettings.globalize_path(temp_extract_path)) DirAccess.remove_absolute(language_zip_path) Log.trace("PackageDownloader: Removed temporary archive %s" % language_zip_path) - + # Go to main menu this.call_thread_safe("_go_to_next_scene") From 239643c32523a8a5f3f0b28aceee495988c7edcb Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Thu, 11 Jun 2026 10:14:52 +0200 Subject: [PATCH 106/111] Fix directory deletion failing on hidden files, breaking the pack swap The new extract/verify/swap flow surfaced a long-standing bug in Utils.clean_dir(). On macOS, browsing a folder in the Finder drops a hidden .DS_Store file in it, and clean_dir() had two flaws around that: - DirAccess listings skip hidden files by default, so .DS_Store was never listed nor removed and the directory was never actually empty. - The return value of dir.remove(subfolder) was ignored, so the failed removal of a subdirectory (non-empty because of its own hidden file) was silently swallowed and clean_dir() still reported success. As a result, delete_directory_recursive() emptied the old language pack but could not delete its directory, the rename of the new pack onto that still-existing directory failed, and the downloader showed the download-error popup. Since the version on disk was never updated, the app re-downloaded and failed again in a loop on every launch. The old pre-swap flow had the same deletion failure but masked it: it extracted directly into the existing directory and ignored rename errors. - clean_dir() now lists hidden files (include_hidden) and checks every removal, trying to remove everything (best effort, so callers like clear_all_local_data still wipe as much as possible) and reporting the first error encountered instead of a false OK. - The downloader verifies that the previous pack directory is really gone before renaming the new one into place; if not, it aborts the swap, keeps the temporary directory and shows the error instead of attempting a rename that cannot succeed. - Add regression tests covering hidden-file deletion, full content cleanup and the missing-directory error path. Verified with the GUT test suite (65/65 passing). --- .../language_selection/package_downloader.gd | 5 ++ sources/utils/autoloads/utils.gd | 18 ++++-- tests/unit_tests/test_utils.gd | 63 +++++++++++++++++++ 3 files changed, 81 insertions(+), 5 deletions(-) create mode 100644 tests/unit_tests/test_utils.gd diff --git a/sources/menus/language_selection/package_downloader.gd b/sources/menus/language_selection/package_downloader.gd index c28fde97..028f5b94 100644 --- a/sources/menus/language_selection/package_downloader.gd +++ b/sources/menus/language_selection/package_downloader.gd @@ -201,6 +201,11 @@ func _copy_data(this: PackageDownloader) -> void: if DirAccess.dir_exists_absolute(current_language_path): Log.trace("PackageDownloader: Removing previous language directory") Utils.delete_directory_recursive(ProjectSettings.globalize_path(current_language_path)) + if DirAccess.dir_exists_absolute(current_language_path): + # Keep the temporary directory so the new pack is not lost + Log.error("PackageDownloader: Cannot remove the previous language directory, aborting swap") + this.call_thread_safe("_show_error", 2) # Error downloading + return var error: Error = DirAccess.rename_absolute(new_pack_path, current_language_path) if error != OK: diff --git a/sources/utils/autoloads/utils.gd b/sources/utils/autoloads/utils.gd index 877639f1..a4c292df 100644 --- a/sources/utils/autoloads/utils.gd +++ b/sources/utils/autoloads/utils.gd @@ -94,14 +94,22 @@ func clean_dir(path: String) -> Error: return error if dir == null: return ERR_FILE_BAD_PATH + # Hidden files (e.g. .DS_Store created by the macOS Finder) must be removed + # too, otherwise the directory is never empty and cannot be deleted + dir.include_hidden = true + # Best effort: try to remove everything, report the first error encountered + var first_error: Error = OK for file: String in dir.get_files(): - dir.remove(file) + error = dir.remove(file) + if error != OK and first_error == OK: + first_error = error for subfolder: String in dir.get_directories(): error = clean_dir(path.path_join(subfolder)) - if error != OK: - return error - dir.remove(subfolder) - return OK + if error == OK: + error = dir.remove(subfolder) + if error != OK and first_error == OK: + first_error = error + return first_error func delete_directory_recursive(path: String) -> void: diff --git a/tests/unit_tests/test_utils.gd b/tests/unit_tests/test_utils.gd new file mode 100644 index 00000000..a3dc04e8 --- /dev/null +++ b/tests/unit_tests/test_utils.gd @@ -0,0 +1,63 @@ +extends GutTest + +const TEST_ROOT: String = "user://test_clean_dir" + + +func after_each() -> void: + _force_delete_directory(TEST_ROOT) + + +func test_delete_directory_recursive_removes_hidden_files() -> void: + # Regression test: the macOS Finder drops .DS_Store files in browsed + # folders; deletion used to fail silently on them, breaking the + # language pack swap in PackageDownloader + _create_file(TEST_ROOT.path_join("visible.txt")) + _create_file(TEST_ROOT.path_join(".hidden")) + _create_file(TEST_ROOT.path_join("sub").path_join(".hidden_nested")) + + Utils.delete_directory_recursive(TEST_ROOT) + + assert_false(DirAccess.dir_exists_absolute(TEST_ROOT), "directory with hidden files should be fully deleted") + + +func test_clean_dir_keeps_root_and_removes_all_content() -> void: + _create_file(TEST_ROOT.path_join("visible.txt")) + _create_file(TEST_ROOT.path_join("sub").path_join("nested.txt")) + + var error: Error = Utils.clean_dir(TEST_ROOT) + + assert_eq(error, OK) + assert_true(DirAccess.dir_exists_absolute(TEST_ROOT), "root directory should be kept") + var dir: DirAccess = DirAccess.open(TEST_ROOT) + dir.include_hidden = true + assert_eq(dir.get_files().size(), 0, "all files should be removed") + assert_eq(dir.get_directories().size(), 0, "all subdirectories should be removed") + + +func test_clean_dir_returns_error_on_missing_directory() -> void: + var error: Error = Utils.clean_dir("user://test_clean_dir_does_not_exist") + + assert_ne(error, OK) + + +func _create_file(path: String) -> void: + DirAccess.make_dir_recursive_absolute(path.get_base_dir()) + var file: FileAccess = FileAccess.open(path, FileAccess.WRITE) + assert_not_null(file, "test setup should be able to create %s" % path) + file.store_string("test") + file.close() + + +# Cleanup helper independent from the code under test +func _force_delete_directory(path: String) -> void: + if not DirAccess.dir_exists_absolute(path): + return + var dir: DirAccess = DirAccess.open(path) + if dir == null: + return + dir.include_hidden = true + for file: String in dir.get_files(): + dir.remove(file) + for subfolder: String in dir.get_directories(): + _force_delete_directory(path.path_join(subfolder)) + DirAccess.remove_absolute(path) From 5bba77c8eac81538285408592a0865f36cd3e164 Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Thu, 11 Jun 2026 10:23:14 +0200 Subject: [PATCH 107/111] Show a specific error message for each language pack failure All failure paths of the download/extract/swap flow displayed the same generic ERROR_DOWNLOADING popup, which made user reports impossible to map to an actual cause (the recent .DS_Store swap failure surfaced as a plain "download error" even though the download and extraction had both succeeded). - Replace the magic error indices with a DownloadError enum, so call sites read _show_error(DownloadError.REPLACE_FAILED) instead of _show_error(2) with a comment. - Add three specific messages with fr/es/pt_BR/it translations: - ERROR_EXTRACTING_PACKAGE: archive missing or extraction failed - ERROR_INVALID_PACKAGE: extracted pack failed the validity check (kept distinct from INVALID_LANGUAGE_DIRECTORY, which describes the local pack found while offline) - ERROR_REPLACING_PACKAGE: previous pack could not be removed or the new one could not be renamed into place; tells the user to restart and retry rather than suggesting a download problem - ERROR_DOWNLOADING is now used only for actual download/server failures. Localization completeness check, naming lint and GUT suite (65/65) all pass. --- kalulu_localization.csv | 3 ++ .../language_selection/package_downloader.gd | 38 +++++++++++++------ 2 files changed, 29 insertions(+), 12 deletions(-) diff --git a/kalulu_localization.csv b/kalulu_localization.csv index 7038dbfd..7154c035 100644 --- a/kalulu_localization.csv +++ b/kalulu_localization.csv @@ -445,6 +445,9 @@ CHANGE_LANGUAGE_ERROR,"Impossible de changer la langue. Veuillez vérifier votre DISCONNECTED_ERROR,Vous avez été déconnecté. Veuillez renseigner vos identifiants à nouveau.,Se ha cerrado la sesión. Vuelva a introducir sus datos de acceso.,Você foi desconectado. Digite seus detalhes de login novamente.,Sei stato disconnesso. Inserisci nuovamente le tue credenziali. INVALID_LANGUAGE_DIRECTORY,Dossier de langue invalide,Carpeta de idioma no válida,Pasta de idioma inválida,Cartella lingua non valida NO_INTERNET_ACCESS,Vous n'êtes pas connecté à Internet. Veuillez vérifier votre connexion et réessayer.,No está conectado a Internet. Compruebe su conexión e inténtelo de nuevo.,Você não está conectado à Internet. Verifique sua conexão e tente novamente.,Non sei connesso a Internet. Verifica la connessione e riprova. +ERROR_EXTRACTING_PACKAGE,Le pack de langue téléchargé n'a pas pu être extrait. Veuillez réessayer.,No se ha podido extraer el paquete de idioma descargado. Inténtelo de nuevo.,Não foi possível extrair o pacote de idioma baixado. Tente novamente.,Impossibile estrarre il pacchetto lingua scaricato. Riprova. +ERROR_INVALID_PACKAGE,Le pack de langue téléchargé est invalide ou incomplet. Veuillez réessayer plus tard.,El paquete de idioma descargado no es válido o está incompleto. Inténtelo de nuevo más tarde.,O pacote de idioma baixado é inválido ou está incompleto. Tente novamente mais tarde.,Il pacchetto lingua scaricato non è valido o è incompleto. Riprova più tardi. +ERROR_REPLACING_PACKAGE,Impossible de remplacer l'ancien pack de langue. Veuillez redémarrer l'application et réessayer.,No se ha podido reemplazar el paquete de idioma anterior. Reinicie la aplicación e inténtelo de nuevo.,Não foi possível substituir o pacote de idioma anterior. Reinicie o aplicativo e tente novamente.,Impossibile sostituire il pacchetto lingua precedente. Riavvia l'applicazione e riprova. PICK_YOUR_DEVICE,Choisissez votre appareil,Elige tu dispositivo,Escolha seu dispositivo,Scegli il tuo dispositivo SIGN_IN,Connexion,Conexión,Conexão,Accedi RETURN_TO_MAIN_MENU,Retour à l’accueil,Volver a la página principal,Voltar para a página inicial,Torna alla schermata principale diff --git a/sources/menus/language_selection/package_downloader.gd b/sources/menus/language_selection/package_downloader.gd index 028f5b94..c2c5dabf 100644 --- a/sources/menus/language_selection/package_downloader.gd +++ b/sources/menus/language_selection/package_downloader.gd @@ -1,15 +1,29 @@ class_name PackageDownloader extends Control +enum DownloadError { + DISCONNECTED, + NO_INTERNET, + DOWNLOAD_FAILED, + INVALID_LOCAL_PACK, + EXTRACTION_FAILED, + INVALID_PACKAGE, + REPLACE_FAILED, +} + const MAIN_MENU_SCENE_PATH: String = "res://sources/menus/main/main_menu.tscn" const DEVICE_SELECTION_SCENE_PATH: String = "res://sources/menus/device_selection/device_selection.tscn" const LOGIN_SCENE_PATH: String = "res://sources/menus/login/login.tscn" const USER_LANGUAGE_RESOURCES_PATH: String = "user://language_resources" +# Translation key shown in the error popup for each DownloadError value const ERROR_MESSAGES: Array[String] = [ "DISCONNECTED_ERROR", "NO_INTERNET_ACCESS", "ERROR_DOWNLOADING", "INVALID_LANGUAGE_DIRECTORY", + "ERROR_EXTRACTING_PACKAGE", + "ERROR_INVALID_PACKAGE", + "ERROR_REPLACING_PACKAGE", ] var language: String @@ -41,7 +55,7 @@ func _ready() -> void: var teacher_settings: TeacherSettings = UserDataManager.teacher_settings if not teacher_settings: UserDataManager.logout() - _show_error(0) + _show_error(DownloadError.DISCONNECTED) return if teacher_settings.server_language_validated: @@ -59,10 +73,10 @@ func _ready() -> void: _go_to_next_scene() else: Log.warn("PackageDownloader: Offline and language directory %s is invalid" % current_language_path) - _show_error(3) # Error downloading + _show_error(DownloadError.INVALID_LOCAL_PACK) else: Log.warn("PackageDownloader: Offline with no language directory available") - _show_error(1) # No internet access + _show_error(DownloadError.NO_INTERNET) return # Gets the info of the language pack on the server @@ -75,12 +89,12 @@ func _ready() -> void: elif res.code == 401: UserDataManager.logout() Log.warn("PackageDownloader: Authentication failed while fetching language pack URL") - _show_error(0) # Disconnected error + _show_error(DownloadError.DISCONNECTED) return else: UserDataManager.logout() Log.warn("PackageDownloader: Unexpected response %d while fetching language pack URL" % res.code) - _show_error(2) # Error downloading + _show_error(DownloadError.DOWNLOAD_FAILED) return # If the language pack is not already downloaded or an update is needed @@ -106,7 +120,7 @@ func _ready() -> void: var request_error: Error = http_request.request(res.body.url as String) if request_error != OK: Log.error("PackageDownloader: Cannot start language pack download: %s" % error_string(request_error)) - _show_error(2) # Error downloading + _show_error(DownloadError.DOWNLOAD_FAILED) else: download_bar.value = 1 extract_bar.value = 1 @@ -152,7 +166,7 @@ func _copy_data(this: PackageDownloader) -> void: # Check if a zip exists for the complete locale if not FileAccess.file_exists(USER_LANGUAGE_RESOURCES_PATH.path_join(language + ".zip")): Log.warn("PackageDownloader: No downloaded archive found for %s" % language) - this.call_thread_safe("_show_error", 2) # Error downloading + this.call_thread_safe("_show_error", DownloadError.EXTRACTION_FAILED) return Log.trace("PackageDownloader: Extracting downloaded package") @@ -185,7 +199,7 @@ func _copy_data(this: PackageDownloader) -> void: var subfolder: String = unzipper.extract(language_zip_path, temp_extract_path, false) if subfolder == "": Log.error("PackageDownloader: Extraction failed for %s" % language_zip_path) - this.call_thread_safe("_show_error", 2) # Error downloading + this.call_thread_safe("_show_error", DownloadError.EXTRACTION_FAILED) return # Check the new pack before replacing the current one @@ -194,7 +208,7 @@ func _copy_data(this: PackageDownloader) -> void: Log.error("PackageDownloader: Extracted package at %s is invalid, keeping the current language pack" % new_pack_path) Utils.delete_directory_recursive(ProjectSettings.globalize_path(temp_extract_path)) DirAccess.remove_absolute(language_zip_path) - this.call_thread_safe("_show_error", 3) # Invalid language directory + this.call_thread_safe("_show_error", DownloadError.INVALID_PACKAGE) return # Replace the previous pack, now that the new one is fully extracted @@ -204,7 +218,7 @@ func _copy_data(this: PackageDownloader) -> void: if DirAccess.dir_exists_absolute(current_language_path): # Keep the temporary directory so the new pack is not lost Log.error("PackageDownloader: Cannot remove the previous language directory, aborting swap") - this.call_thread_safe("_show_error", 2) # Error downloading + this.call_thread_safe("_show_error", DownloadError.REPLACE_FAILED) return var error: Error = DirAccess.rename_absolute(new_pack_path, current_language_path) @@ -212,7 +226,7 @@ func _copy_data(this: PackageDownloader) -> void: # Keep the temporary directory so the data is not lost; the next # launch will detect the missing pack and download it again Log.error("PackageDownloader: Error " + error_string(error) + " while renaming folder from %s to %s" % [new_pack_path, current_language_path]) - this.call_thread_safe("_show_error", 2) # Error downloading + this.call_thread_safe("_show_error", DownloadError.REPLACE_FAILED) return Log.trace("PackageDownloader: Package extracted to %s" % current_language_path) @@ -225,7 +239,7 @@ func _copy_data(this: PackageDownloader) -> void: this.call_thread_safe("_go_to_next_scene") -func _show_error(error: int) -> void: +func _show_error(error: DownloadError) -> void: Log.warn("PackageDownloader: Displaying error %d (%s)" % [error, ERROR_MESSAGES[error]]) error_popup.content_text = ERROR_MESSAGES[error] error_popup.show() From dadc6f69efb624b0e6c7c1e12c9f43d07888e1ed Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Thu, 11 Jun 2026 10:32:15 +0200 Subject: [PATCH 108/111] Add missing file uid --- tests/unit_tests/test_utils.gd.uid | 1 + 1 file changed, 1 insertion(+) create mode 100644 tests/unit_tests/test_utils.gd.uid diff --git a/tests/unit_tests/test_utils.gd.uid b/tests/unit_tests/test_utils.gd.uid new file mode 100644 index 00000000..62c2615b --- /dev/null +++ b/tests/unit_tests/test_utils.gd.uid @@ -0,0 +1 @@ +uid://34wj4ytlkuvn From 30c1a9863fd385db4e448369097d7ebf73f0f69b Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Thu, 11 Jun 2026 11:12:46 +0200 Subject: [PATCH 109/111] Optimization global --- project.godot | 1 + sources/gardens/gardens.gd | 67 ++++++++++----------- sources/look_and_learn/look_and_learn.gd | 2 +- sources/menus/login/login.gd | 5 +- sources/minigames/base/base_minigame.gd | 2 +- sources/minigames/frog/lilypad_track.gd | 3 +- sources/utils/autoloads/scene_loader.gd | 66 ++++++++++++++++++++ sources/utils/autoloads/scene_loader.gd.uid | 1 + 8 files changed, 105 insertions(+), 42 deletions(-) create mode 100644 sources/utils/autoloads/scene_loader.gd create mode 100644 sources/utils/autoloads/scene_loader.gd.uid diff --git a/project.godot b/project.godot index 4b4c0754..8fee4e35 100644 --- a/project.godot +++ b/project.godot @@ -36,6 +36,7 @@ Globals="*res://sources/language_tool/globals.gd" LessonLogger="*res://sources/utils/autoloads/lesson_logger.gd" MusicManager="*res://sources/utils/autoloads/music_manager.tscn" OpeningCurtain="*res://sources/utils/autoloads/opening_curtain.tscn" +SceneLoader="*res://sources/utils/autoloads/scene_loader.gd" ServerManager="*res://sources/utils/autoloads/server_manager.tscn" UnicodeNormalizer="*res://sources/utils/autoloads/unicode_normalizer.gd" UserDataManager="*res://sources/utils/autoloads/user_data_manager.gd" diff --git a/sources/gardens/gardens.gd b/sources/gardens/gardens.gd index fa2a17cd..9f3f57dd 100644 --- a/sources/gardens/gardens.gd +++ b/sources/gardens/gardens.gd @@ -20,21 +20,25 @@ const LESSON_BUTTON_OUTLINE_RADIUS: float = 192.0 # button center, mirroring the movie icon just above it. The 384x384 button has # its center at y=192; the label (vertical-centered) then centers at y=(this+384)/2. const LESSON_BUTTON_LABEL_TOP_OFFSET: float = 104.0 -const GARDEN_SCENES: Array[PackedScene] = [ - preload("res://resources/gardens/garden_01.tscn"), - preload("res://resources/gardens/garden_02.tscn"), - preload("res://resources/gardens/garden_03.tscn"), - preload("res://resources/gardens/garden_04.tscn"), - preload("res://resources/gardens/garden_05.tscn"), - preload("res://resources/gardens/garden_06.tscn"), - preload("res://resources/gardens/garden_07.tscn"), - preload("res://resources/gardens/garden_08.tscn"), - preload("res://resources/gardens/garden_09.tscn"), - preload("res://resources/gardens/garden_10.tscn"), - preload("res://resources/gardens/garden_11.tscn"), - preload("res://resources/gardens/garden_12.tscn"), +# Loaded on demand instead of preloaded: this script never unloads (it has +# static variables), so preloaded constants would pin every garden's assets in +# memory for the whole app lifetime — including while minigames run, which +# OOM-crashes low-memory devices. +const GARDEN_SCENE_PATHS: Array[String] = [ + "res://resources/gardens/garden_01.tscn", + "res://resources/gardens/garden_02.tscn", + "res://resources/gardens/garden_03.tscn", + "res://resources/gardens/garden_04.tscn", + "res://resources/gardens/garden_05.tscn", + "res://resources/gardens/garden_06.tscn", + "res://resources/gardens/garden_07.tscn", + "res://resources/gardens/garden_08.tscn", + "res://resources/gardens/garden_09.tscn", + "res://resources/gardens/garden_10.tscn", + "res://resources/gardens/garden_11.tscn", + "res://resources/gardens/garden_12.tscn", ] -const LOOK_AND_LEARN_SCENE: PackedScene = preload("res://sources/look_and_learn/look_and_learn.tscn") +const LOOK_AND_LEARN_SCENE_PATH: String = "res://sources/look_and_learn/look_and_learn.tscn" const BOSS_BUTTON_SCENE: PackedScene = preload("res://sources/gardens/boss_button.tscn") const BOSS_MINIGAME_SCENE_PATH: String = "res://sources/minigames/boss/boss_minigame.tscn" const GARDEN_SIZE: int = 2400 @@ -71,7 +75,6 @@ static var cached_layout_lessons: int = 0 @export var minigames_body_icons: Array[Texture] = [] @export var minigames_face_icons: Array[Texture] = [] -var _minigame_scene_cache: Dictionary = {} var lessons: Dictionary = {} var _gardens_layout: GardensLayout var points: Array[Array] = [] @@ -988,20 +991,13 @@ func _lesson_button_label_color(status: StudentProgression.Status) -> Color: return lesson_button.unlocked_label_color -func _get_minigame_scene(scene_index: int) -> PackedScene: +func _get_minigame_scene_path(scene_index: int) -> String: if scene_index < 0 or scene_index >= minigame_scene_paths.size(): - return null - if _minigame_scene_cache.has(scene_index): - return _minigame_scene_cache[scene_index] as PackedScene + return "" var scene_path: String = minigame_scene_paths[scene_index] - if scene_path.is_empty(): - return null - var scene_resource: Resource = load(scene_path) - if scene_resource is PackedScene: - var packed_scene: PackedScene = scene_resource as PackedScene - _minigame_scene_cache[scene_index] = packed_scene - return packed_scene - return null + if scene_path.is_empty() or not ResourceLoader.exists(scene_path): + return "" + return scene_path func _count_completed_minigames(lesson_number: int) -> int: @@ -1073,7 +1069,8 @@ func add_gardens() -> void: for layout_index: int in range(gardens_layout.gardens.size()): Log.trace("Gardens: Preparing garden %s with layout index %s" % [str(garden_index), str(layout_index)]) var garden_layout: GardenLayout = gardens_layout.gardens[layout_index] - var garden: Garden = GARDEN_SCENES[layout_index].instantiate() + var garden_scene: PackedScene = load(GARDEN_SCENE_PATHS[layout_index]) as PackedScene + var garden: Garden = garden_scene.instantiate() garden_parent.add_child(garden) garden.garden_index = garden_index garden_index += 1 @@ -1422,7 +1419,7 @@ func _on_lesson_button_pressed() -> void: current_garden_index = current_garden.garden_index, look_and_learn_completed = false } - get_tree().change_scene_to_packed(LOOK_AND_LEARN_SCENE) + SceneLoader.change_scene(LOOK_AND_LEARN_SCENE_PATH) func _on_boss_button_pressed(lesson_number: int, garden_index: int) -> void: @@ -1438,7 +1435,7 @@ func _on_boss_button_pressed(lesson_number: int, garden_index: int) -> void: skip_minigame_layout = true, boss_gate_lesson = lesson_number } - get_tree().change_scene_to_file(BOSS_MINIGAME_SCENE_PATH) + SceneLoader.change_scene(BOSS_MINIGAME_SCENE_PATH) func _on_final_boss_button_pressed(lesson_number: int, garden_index: int) -> void: @@ -1455,14 +1452,14 @@ func _on_final_boss_button_pressed(lesson_number: int, garden_index: int) -> voi boss_gate_lesson = lesson_number, is_final_boss = true } - get_tree().change_scene_to_file(BOSS_MINIGAME_SCENE_PATH) + SceneLoader.change_scene(BOSS_MINIGAME_SCENE_PATH) func _on_minigame_button_pressed(scene_index: int, minigame_number: int) -> void: if is_locked: return - var minigame_scene: PackedScene = _get_minigame_scene(scene_index) - if not minigame_scene: + var scene_path: String = _get_minigame_scene_path(scene_index) + if scene_path.is_empty(): Log.error("Gardens: Missing minigame scene for index %d" % scene_index) return # Block a second wedge click during the curtain-close await below. @@ -1476,7 +1473,7 @@ func _on_minigame_button_pressed(scene_index: int, minigame_number: int) -> void minigame_number = minigame_number, minigame_completed = false } - get_tree().change_scene_to_packed(minigame_scene) + SceneLoader.change_scene(scene_path) func _on_scroll_container_gui_input(event: InputEvent) -> void: @@ -1515,7 +1512,7 @@ func _scroll_by_garden(p_direction: int) -> void: func _confirm_back_button_pressed() -> void: UserDataManager.logout_student() await (OpeningCurtain as OpeningCurtainClass).close() - get_tree().change_scene_to_file("res://sources/menus/login/login.tscn") + SceneLoader.change_scene("res://sources/menus/login/login.tscn") func _on_back_button_button_down() -> void: diff --git a/sources/look_and_learn/look_and_learn.gd b/sources/look_and_learn/look_and_learn.gd index b85f13b1..a84a0996 100644 --- a/sources/look_and_learn/look_and_learn.gd +++ b/sources/look_and_learn/look_and_learn.gd @@ -160,7 +160,7 @@ func _back_to_gardens() -> void: Log.info("LookAndLearn: Returning to gardens for lesson %d" % lesson_nb) await (OpeningCurtain as OpeningCurtainClass).close() Gardens.transition_data = gardens_data - get_tree().change_scene_to_file("res://sources/gardens/gardens.tscn") + SceneLoader.change_scene("res://sources/gardens/gardens.tscn") func _on_back_button_pressed() -> void: diff --git a/sources/menus/login/login.gd b/sources/menus/login/login.gd index 58e00e98..29f41354 100644 --- a/sources/menus/login/login.gd +++ b/sources/menus/login/login.gd @@ -2,7 +2,7 @@ extends Control const TEACHER_PASSWORD: String = "42" const BACK_SCENE_PATH: String = "res://sources/menus/main/main_menu.tscn" -const NEXT_SCENE: PackedScene = preload("res://sources/gardens/gardens.tscn") +const NEXT_SCENE_PATH: String = "res://sources/gardens/gardens.tscn" const TEACHER_SCENE_PATH: String = "res://sources/menus/settings/teacher_settings.tscn" const DEVELOPER_SCENE_PATH: String = "res://sources/menus/settings/developer_settings.tscn" const PACKAGE_LOADER_SCENE_PATH: String = "res://sources/menus/language_selection/package_downloader.tscn" @@ -73,8 +73,7 @@ func _on_code_keyboard_password_entered(password: String) -> void: await kalulu.play_kalulu_speech(right_password_speech) await OpeningCurtain.close() Log.trace("LoginScreen: Start loading next scene") - get_tree().change_scene_to_packed(NEXT_SCENE) - Log.trace("LoginScreen: End loading next scene") + SceneLoader.change_scene(NEXT_SCENE_PATH) else: Log.warn("LoginScreen: Unknown student code entered (length=%d)" % password.length()) kalulu_button.hide() diff --git a/sources/minigames/base/base_minigame.gd b/sources/minigames/base/base_minigame.gd index f8ecbf95..75d1b588 100644 --- a/sources/minigames/base/base_minigame.gd +++ b/sources/minigames/base/base_minigame.gd @@ -435,7 +435,7 @@ func _go_back_to_the_garden() -> void: _save_logs() Gardens.transition_data = gardens_data - get_tree().change_scene_to_file("res://sources/gardens/gardens.tscn") + SceneLoader.change_scene("res://sources/gardens/gardens.tscn") func _play_stimulus() -> void: diff --git a/sources/minigames/frog/lilypad_track.gd b/sources/minigames/frog/lilypad_track.gd index 83fc810e..04b24973 100644 --- a/sources/minigames/frog/lilypad_track.gd +++ b/sources/minigames/frog/lilypad_track.gd @@ -5,8 +5,7 @@ signal lilypad_in_center(lilypad: Lilypad) const LILYPAD_SCENE_PATH: String = "res://sources/minigames/frog/lilypad.tscn" -static var _lilypad_scene: PackedScene - +var _lilypad_scene: PackedScene var top_to_bottom: bool = false var is_stopped: bool = false var is_cleared: bool = false diff --git a/sources/utils/autoloads/scene_loader.gd b/sources/utils/autoloads/scene_loader.gd new file mode 100644 index 00000000..7a99fc0f --- /dev/null +++ b/sources/utils/autoloads/scene_loader.gd @@ -0,0 +1,66 @@ +extends Node +## Scene changer that keeps peak memory low on low-end devices. +## +## [method SceneTree.change_scene_to_file] loads the new scene while the old +## one is still fully resident, so transitions between heavy scenes (gardens, +## minigames) momentarily need the memory of both — enough to OOM-crash old +## tablets. This helper frees the current scene first, then streams the new +## scene from disk on a background thread so the main thread keeps rendering +## frames instead of freezing. +## +## Callers are expected to have covered the screen (OpeningCurtain closed) +## before calling [method change_scene]; the curtain stays visible while the +## tree has no current scene. + +## Scene shown if the requested scene fails to load, so the player is never +## stuck on a black screen. +const FALLBACK_SCENE_PATH: String = "res://sources/menus/main/main_menu.tscn" + +var _is_changing: bool = false + + +func change_scene(scene_path: String) -> void: + if _is_changing: + Log.warn("SceneLoader: Change to %s requested while another change is in progress; ignoring" % scene_path) + return + if not ResourceLoader.exists(scene_path): + Log.error("SceneLoader: Scene does not exist: %s" % scene_path) + return + _is_changing = true + # Defer so the calling scene is never freed while one of its methods is + # still on the stack. + _change_scene_deferred.call_deferred(scene_path) + + +func _change_scene_deferred(scene_path: String) -> void: + var tree: SceneTree = get_tree() + # Free the old scene before loading the new one: this roughly halves the + # memory peak of the transition. + if tree.current_scene: + tree.unload_current_scene() + var error: Error = ResourceLoader.load_threaded_request(scene_path) + if error != OK: + Log.error("SceneLoader: Could not start loading %s (error %s)" % [scene_path, error_string(error)]) + _finish_with_fallback(tree, scene_path) + return + var status: ResourceLoader.ThreadLoadStatus = ResourceLoader.load_threaded_get_status(scene_path) + while status == ResourceLoader.THREAD_LOAD_IN_PROGRESS: + await tree.process_frame + status = ResourceLoader.load_threaded_get_status(scene_path) + if status != ResourceLoader.THREAD_LOAD_LOADED: + Log.error("SceneLoader: Failed to load %s (status %d)" % [scene_path, status]) + _finish_with_fallback(tree, scene_path) + return + var packed_scene: PackedScene = ResourceLoader.load_threaded_get(scene_path) as PackedScene + if not packed_scene: + Log.error("SceneLoader: %s is not a PackedScene" % scene_path) + _finish_with_fallback(tree, scene_path) + return + _is_changing = false + tree.change_scene_to_packed(packed_scene) + + +func _finish_with_fallback(tree: SceneTree, failed_scene_path: String) -> void: + _is_changing = false + if failed_scene_path != FALLBACK_SCENE_PATH: + tree.change_scene_to_file(FALLBACK_SCENE_PATH) diff --git a/sources/utils/autoloads/scene_loader.gd.uid b/sources/utils/autoloads/scene_loader.gd.uid new file mode 100644 index 00000000..e8553604 --- /dev/null +++ b/sources/utils/autoloads/scene_loader.gd.uid @@ -0,0 +1 @@ +uid://bm3xnmft2e4ul From b975b5e80577925cf5c6ffd1c61662ca2c1be907 Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Thu, 11 Jun 2026 11:49:29 +0200 Subject: [PATCH 110/111] Debug possible corrupted scene file --- sources/utils/autoloads/scene_loader.gd | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/sources/utils/autoloads/scene_loader.gd b/sources/utils/autoloads/scene_loader.gd index 7a99fc0f..af414d9e 100644 --- a/sources/utils/autoloads/scene_loader.gd +++ b/sources/utils/autoloads/scene_loader.gd @@ -56,8 +56,12 @@ func _change_scene_deferred(scene_path: String) -> void: Log.error("SceneLoader: %s is not a PackedScene" % scene_path) _finish_with_fallback(tree, scene_path) return + error = tree.change_scene_to_packed(packed_scene) + if error != OK: + Log.error("SceneLoader: Could not change to %s (error %s)" % [scene_path, error_string(error)]) + _finish_with_fallback(tree, scene_path) + return _is_changing = false - tree.change_scene_to_packed(packed_scene) func _finish_with_fallback(tree: SceneTree, failed_scene_path: String) -> void: From a29a5f21f81f66f9f06b5e61de14cdeff4e6f6da Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Thu, 11 Jun 2026 12:21:51 +0200 Subject: [PATCH 111/111] build version update --- export_presets.cfg | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/export_presets.cfg b/export_presets.cfg index 09cab038..93145521 100644 --- a/export_presets.cfg +++ b/export_presets.cfg @@ -38,7 +38,7 @@ architectures/armeabi-v7a=false architectures/arm64-v8a=true architectures/x86=false architectures/x86_64=false -version/code=78 +version/code=79 version/name="" package/unique_name="org.godotengine.kalulu" package/name="Kalulu" @@ -264,7 +264,7 @@ architectures/armeabi-v7a=false architectures/arm64-v8a=true architectures/x86=false architectures/x86_64=false -version/code=78 +version/code=79 version/name="" package/unique_name="org.godotengine.kalulu" package/name="Kalulu" @@ -490,7 +490,7 @@ architectures/armeabi-v7a=true architectures/arm64-v8a=false architectures/x86=false architectures/x86_64=false -version/code=78 +version/code=79 version/name="" package/unique_name="org.godotengine.kalulu" package/name="Kalulu"

MiM$T&k>J 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 LO;@#)U={p7507$x literal 0 HcmV?d00001 diff --git a/assets/gardens/animals/pink_jellyfish.png.import b/assets/gardens/animals/pink_jellyfish.png.import new file mode 100644 index 00000000..1e8c7730 --- /dev/null +++ b/assets/gardens/animals/pink_jellyfish.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dcuobvoav863b" +path="res://.godot/imported/pink_jellyfish.png-47ea6885f7ba9be8ff5f438c055bc4a1.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/gardens/animals/pink_jellyfish.png" +dest_files=["res://.godot/imported/pink_jellyfish.png-47ea6885f7ba9be8ff5f438c055bc4a1.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/gardens/gardens/garden_10.png b/assets/gardens/gardens/garden_10.png new file mode 100644 index 0000000000000000000000000000000000000000..a52cfc96a5042ed14f1824012638cdb1d2afbeeb GIT binary patch literal 14873 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 E3md(cc>n+a literal 0 HcmV?d00001 diff --git a/assets/gardens/gardens/garden_10.png.import b/assets/gardens/gardens/garden_10.png.import new file mode 100644 index 00000000..90766fbe --- /dev/null +++ b/assets/gardens/gardens/garden_10.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cahtl4j3wxahn" +path="res://.godot/imported/garden_10.png-39a7d010b681ef7c20becd3e54ebced2.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/gardens/gardens/garden_10.png" +dest_files=["res://.godot/imported/garden_10.png-39a7d010b681ef7c20becd3e54ebced2.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/gardens/gardens/garden_11.png b/assets/gardens/gardens/garden_11.png new file mode 100644 index 0000000000000000000000000000000000000000..aa47948918341520e0ebc5160eed6a7fd0000ae1 GIT binary patch literal 14636 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 k`1#}g1^@s6$qD8Z00009a7bBm000XT z000XT0n*)m`~Uz4LP=)f1Ug_Vi0NRdfcr4`U;!K3NVepe-+R25haFk$-y@Ai8tHDg+c99qCEu@s*AD9u z6o2(y0mn@CpE2}&i)UaG+nqv$i-TXz{Rh<{M#^d-Ou>0;6g*O&YM8&s#=ys#WfV^1V*lxNMk6a%W)ZrQVJxd2= zH6|9(=kzDIPgY2)k$3sfcU?ZLB^kpM9N+=?L&pwd=$4)$eW_0`Jrq`m@8G?^58cvd z=nx#l>X(S4=#`KyeGL5WyAnOHMSi=tVP43V{@8Z~dg2~&ToYdp2-VV4#KFJCfeG#lC(XNS(I2rs+$T;ZVO)w{tV1^f z$7Nd6BQ_-S&4j~Z%GOJ(U3%|1ZdQsK&3Hjxgc&u1H*G~P7Wo&Xz`tz@GMrK?C98?( zO)^4_etAOttBZ>)>xiE13oxPMqBJF|O7s+2t7Sv5c)2Kindl?LIWTWLe$IryG)_0c zhs8&v#r~gDOHa|0QKF46NQnGQ^d;7Z50wr39QxztJ;MYaGVc+M--tf#qb5eDOyJPG zXIMl{3wMR3TSkc<#)YL@a)BOxyrYABXd@_+cX&*RHNqssv?jwdCb~jQbbYK%bbYLC z$fk=8kQSD{>a!+BXDr~*r!RV}h|wK0IEX$+_AfJr%QO2W(uL@+?B4=okZd{Hm+#nn zpCKK+F+4I#*2ukLvu#7<8z(;7={SA8zsVQ|KR8(w36~QXi<@jwMZ6S!`25nvs$_=| z(kxhJOI-Xy1kcNEs0zcb5#fJg!?_rE20kHvSzdKx-2}!2@c=VyYY`u`iHH{Y>1z&0 zfz_f-s`9n7$c%avhx{(PesHK80vjH&sa1uT=n65>6=I?*#6(w!iLMY6T_GmALQHgp z#3=e0nN+YGyq37!5V#9w$XPHTGk+-^96dcWVzcz`NB_QOzlVy^jMyxF%iHbFLb39U z!;E8&EItXPZfC?c%a$Qc{5>8|9d1C`>Y^=D*C3NfViP?iQm${b==^Y87sS@5hs2cY zJ8K4+K;pvEPdEI}adbRn;N;X>H0tCmHJ98XdV;*kUoTu+A$?ljw(tn3`-dBh=yi6A z-Xe}xaDAF1aw4_#wtf1X>;2h1@?s1%a<;5-&##tcC&=3MDL!HmyWOtoC)+h++Ts~8 ze3IR6_geA0Uw6CRsAak9ld|S6>)yuFnAqerT-(sTYs)y#E%=JVO&;4s z#UoMEesnf3*1HD@`m3xrinx=Wn@(qu;m~a^(FF-M*STNks>macCbcNV_x0$eh z*omo6PY{7mWBDuOMF@8FX=udMyf3*tdGkP^Ytcd_7E2!kzpvc$H)id%h{e*!HSV!P z1#1$E=y~527!t8G?E9sn=_(3O*@KY%`Tev5n>(1=|V#$iuk`z(G$eEc{utm zntrc>yy99E&YaKYea2hCK~}y*@rS7(=knyw7TGx>czil?RRw<_{yFjq;>8z3wi%K9 zroKe~gso!j4WG?>RbKkg9lD_LDf+bJ`zPXdb(!!WtuTYYsbFY><^bs)X0p zypMUig~@vqZf2lO^!⋼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 P00000NkvXXu0mjfu*cP+ literal 0 HcmV?d00001 diff --git a/assets/gardens/victory_assets/victory_asset_plant_26.png.import b/assets/gardens/victory_assets/victory_asset_plant_26.png.import new file mode 100644 index 00000000..505f97c1 --- /dev/null +++ b/assets/gardens/victory_assets/victory_asset_plant_26.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cjb3ygn2iycj4" +path="res://.godot/imported/victory_asset_plant_26.png-377818411fbf5a27dce9fa7548f57cec.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/gardens/victory_assets/victory_asset_plant_26.png" +dest_files=["res://.godot/imported/victory_asset_plant_26.png-377818411fbf5a27dce9fa7548f57cec.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/gardens/victory_assets/victory_asset_snowflakes.png b/assets/gardens/victory_assets/victory_asset_snowflakes.png new file mode 100644 index 0000000000000000000000000000000000000000..ec3b0acd7b82f2c8dd7b19f8ffd4aad6ce692c80 GIT binary patch literal 2534 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 literal 0 HcmV?d00001 diff --git a/assets/gardens/victory_assets/victory_asset_whale.png.import b/assets/gardens/victory_assets/victory_asset_whale.png.import new file mode 100644 index 00000000..2274c992 --- /dev/null +++ b/assets/gardens/victory_assets/victory_asset_whale.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://28wjedoatx7c" +path="res://.godot/imported/victory_asset_whale.png-85e24dd82f8b152901ac2291e91ea46c.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/gardens/victory_assets/victory_asset_whale.png" +dest_files=["res://.godot/imported/victory_asset_whale.png-85e24dd82f8b152901ac2291e91ea46c.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/resources/gardens/garden_10.tscn b/resources/gardens/garden_10.tscn index 868b1e6c..64bbb3d8 100644 --- a/resources/gardens/garden_10.tscn +++ b/resources/gardens/garden_10.tscn @@ -1,10 +1,17 @@ [gd_scene format=3 uid="uid://4uyls7ihyc51"] [ext_resource type="Script" uid="uid://ch5h4p1o54whq" path="res://resources/gardens/garden.gd" id="1_5owem"] -[ext_resource type="Texture2D" uid="uid://l32ekwfso26s" path="res://assets/gardens/gardens/garden_04.png" id="2_sa1k7"] -[ext_resource type="Texture2D" uid="uid://dro75vltqiq6j" path="res://assets/gardens/victory_assets/victory_asset_plant_07.png" id="3_w51id"] +[ext_resource type="Texture2D" uid="uid://cahtl4j3wxahn" path="res://assets/gardens/gardens/garden_10.png" id="2_sa1k7"] +[ext_resource type="Texture2D" uid="uid://dcekseb1b3ruw" path="res://assets/gardens/victory_assets/victory_asset_plant_01.png" id="3_0g0ua"] [ext_resource type="PackedScene" uid="uid://delcgui3v0eek" path="res://sources/lesson_screen/lesson_button.tscn" id="4_epm30"] -[ext_resource type="Texture2D" uid="uid://d3vt2qpngkkjs" path="res://assets/gardens/animals/crab.png" id="5_36mum"] +[ext_resource type="Texture2D" uid="uid://clkr31osbqs7u" path="res://assets/gardens/victory_assets/victory_asset_plant_02.png" id="4_md4b1"] +[ext_resource type="Texture2D" uid="uid://dgssb0oonuqku" path="res://assets/gardens/victory_assets/victory_asset_fish_01.png" id="5_urjxd"] +[ext_resource type="Texture2D" uid="uid://dufnm3bkfe5yv" path="res://assets/gardens/victory_assets/victory_asset_plant_05.png" id="6_ipdnh"] +[ext_resource type="Texture2D" uid="uid://dt2a0dea0hv0c" path="res://assets/gardens/victory_assets/victory_asset_fish_02.png" id="7_xkwcf"] +[ext_resource type="Texture2D" uid="uid://bqp1nkk53y1is" path="res://assets/gardens/victory_assets/victory_asset_plant_03.png" id="8_w51id"] +[ext_resource type="Texture2D" uid="uid://dcuobvoav863b" path="res://assets/gardens/animals/pink_jellyfish.png" id="8_xkwcf"] +[ext_resource type="Texture2D" uid="uid://dvxnktx1wiyxp" path="res://assets/gardens/victory_assets/victory_asset_bubbles.png" id="9_knmfc"] +[ext_resource type="Texture2D" uid="uid://f2arml2f4b8p" path="res://assets/gardens/victory_assets/victory_asset_plant_04.png" id="10_83oc2"] [node name="Garden" type="Control" unique_id=167073905] custom_minimum_size = Vector2(2400, 2.08165e-12) @@ -17,14 +24,14 @@ grow_vertical = 2 mouse_filter = 2 script = ExtResource("1_5owem") title = "Purple Turtle Garden" -unlocked_lesson = Color(0.7490196, 0.2784314, 0, 1) -unlocked_lesson_text = Color(1, 0.7921569, 0.6901961, 1) -completed_lesson = Color(1, 0.7921569, 0.6901961, 1) -completed_lesson_text = Color(0.7490196, 0.2784314, 0, 1) +unlocked_lesson = Color(0.6509804, 0.2901961, 0.5019608, 1) +unlocked_lesson_text = Color(1, 0.81960785, 0.9254902, 1) +completed_lesson = Color(1, 0.81960785, 0.9254902, 1) +completed_lesson_text = Color(0.6509804, 0.2901961, 0.5019608, 1) [node name="Background" type="TextureRect" parent="." unique_id=1058030897] unique_name_in_owner = true -modulate = Color(1, 0.49803922, 0.2, 1) +modulate = Color(0.87058824, 0.3882353, 0.67058825, 1) layout_mode = 0 offset_left = 350.0 offset_top = 50.0 @@ -45,14 +52,106 @@ grow_vertical = 2 mouse_filter = 2 [node name="Victory_Asset_01" type="TextureRect" parent="Victory_Assets" unique_id=1278004645] -modulate = Color(0.7490196, 0.2784314, 0, 1) +modulate = Color(0.6509804, 0.2901961, 0.5019608, 1) layout_mode = 0 -offset_left = 761.0 -offset_top = 1263.0 -offset_right = 939.0 -offset_bottom = 1575.0 +offset_left = 370.0 +offset_top = 148.0 +offset_right = 449.0 +offset_bottom = 777.0 +scale = Vector2(1.5, 1.5) mouse_filter = 2 -texture = ExtResource("3_w51id") +texture = ExtResource("3_0g0ua") +expand_mode = 1 +stretch_mode = 5 + +[node name="Victory_Asset_02" type="TextureRect" parent="Victory_Assets" unique_id=639876396] +modulate = Color(0.6509804, 0.2901961, 0.5019608, 1) +layout_mode = 0 +offset_left = 809.0 +offset_top = 1309.0 +offset_right = 892.0 +offset_bottom = 1449.0 +scale = Vector2(2, 2) +mouse_filter = 2 +texture = ExtResource("4_md4b1") +expand_mode = 1 +stretch_mode = 5 + +[node name="Victory_Asset_03" type="TextureRect" parent="Victory_Assets" unique_id=2017285664] +modulate = Color(0.6509804, 0.2901961, 0.5019608, 1) +layout_mode = 0 +offset_left = 1134.0 +offset_top = 1008.0 +offset_right = 1323.0 +offset_bottom = 1150.0 +scale = Vector2(2, 2) +mouse_filter = 2 +texture = ExtResource("5_urjxd") +expand_mode = 1 +stretch_mode = 5 + +[node name="Victory_Asset_04" type="TextureRect" parent="Victory_Assets" unique_id=1043593306] +modulate = Color(0.6509804, 0.2901961, 0.5019608, 1) +layout_mode = 0 +offset_left = 1073.0 +offset_top = 1290.0 +offset_right = 1125.0 +offset_bottom = 1498.0 +scale = Vector2(2, 2) +mouse_filter = 2 +texture = ExtResource("6_ipdnh") +expand_mode = 1 +stretch_mode = 5 + +[node name="Victory_Asset_05" type="TextureRect" parent="Victory_Assets" unique_id=287565494] +modulate = Color(0.6509804, 0.2901961, 0.5019608, 1) +layout_mode = 0 +offset_left = 1317.0 +offset_top = 301.0 +offset_right = 1478.0 +offset_bottom = 462.0 +scale = Vector2(2, 2) +mouse_filter = 2 +texture = ExtResource("7_xkwcf") +expand_mode = 1 +stretch_mode = 5 + +[node name="Victory_Asset_06" type="TextureRect" parent="Victory_Assets" unique_id=1951757820] +modulate = Color(0.6509804, 0.2901961, 0.5019608, 1) +layout_mode = 0 +offset_left = 791.0 +offset_top = 330.0 +offset_right = 910.0 +offset_bottom = 498.0 +scale = Vector2(2, 2) +mouse_filter = 2 +texture = ExtResource("8_w51id") +expand_mode = 1 +stretch_mode = 5 + +[node name="Victory_Asset_07" type="TextureRect" parent="Victory_Assets" unique_id=574678348] +modulate = Color(0.6509804, 0.2901961, 0.5019608, 1) +layout_mode = 0 +offset_left = 559.0 +offset_top = 612.0 +offset_right = 616.0 +offset_bottom = 735.0 +scale = Vector2(2, 2) +mouse_filter = 2 +texture = ExtResource("9_knmfc") +expand_mode = 1 +stretch_mode = 5 + +[node name="Victory_Asset_08" type="TextureRect" parent="Victory_Assets" unique_id=1778122463] +modulate = Color(0.6509804, 0.2901961, 0.5019608, 1) +layout_mode = 0 +offset_left = 1321.0 +offset_top = 1352.0 +offset_right = 1394.0 +offset_bottom = 1477.0 +scale = Vector2(2, 2) +mouse_filter = 2 +texture = ExtResource("10_83oc2") expand_mode = 1 stretch_mode = 5 @@ -83,34 +182,35 @@ pivot_offset = Vector2(120, 120) [node name="Slot3" parent="Buttons" unique_id=353688519 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 1066.0 -offset_top = 810.0 -offset_right = 1306.0 -offset_bottom = 1050.0 +offset_left = 1034.0 +offset_top = 706.0 +offset_right = 1274.0 +offset_bottom = 946.0 pivot_offset = Vector2(120, 120) [node name="Slot4" parent="Buttons" unique_id=1536126098 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 1405.0 -offset_top = 885.0 -offset_right = 1645.0 -offset_bottom = 1125.0 +offset_left = 1387.0 +offset_top = 723.0 +offset_right = 1627.0 +offset_bottom = 963.0 pivot_offset = Vector2(120, 120) [node name="Slot5" parent="Buttons" unique_id=960033946 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 1720.0 -offset_top = 1020.0 -offset_right = 1960.0 -offset_bottom = 1260.0 +offset_left = 1586.0 +offset_top = 978.0 +offset_right = 1826.0 +offset_bottom = 1218.0 pivot_offset = Vector2(120, 120) -[node name="Crab" type="TextureRect" parent="." unique_id=518902024] +[node name="Pink Jellyfish" type="TextureRect" parent="." unique_id=518902024] layout_mode = 0 -offset_left = 629.0 -offset_top = 259.0 -offset_right = 929.0 -offset_bottom = 559.0 -texture = ExtResource("5_36mum") +offset_left = 1667.0 +offset_top = 19.0 +offset_right = 2245.0 +offset_bottom = 996.0 +scale = Vector2(0.6, 0.6) +texture = ExtResource("8_xkwcf") expand_mode = 1 stretch_mode = 5 diff --git a/resources/gardens/garden_11.tscn b/resources/gardens/garden_11.tscn index e6061fce..6d0b0c44 100644 --- a/resources/gardens/garden_11.tscn +++ b/resources/gardens/garden_11.tscn @@ -1,10 +1,17 @@ [gd_scene format=3 uid="uid://c2yff8xrssk83"] [ext_resource type="Script" uid="uid://ch5h4p1o54whq" path="res://resources/gardens/garden.gd" id="1_5owem"] -[ext_resource type="Texture2D" uid="uid://l32ekwfso26s" path="res://assets/gardens/gardens/garden_04.png" id="2_13gkf"] +[ext_resource type="Texture2D" uid="uid://dpl670l7onk5n" path="res://assets/gardens/gardens/garden_11.png" id="2_13gkf"] +[ext_resource type="Texture2D" uid="uid://dckd1xhcdf2ie" path="res://assets/gardens/victory_assets/victory_asset_plant_06.png" id="3_13gkf"] [ext_resource type="Texture2D" uid="uid://dro75vltqiq6j" path="res://assets/gardens/victory_assets/victory_asset_plant_07.png" id="3_th10l"] [ext_resource type="PackedScene" uid="uid://delcgui3v0eek" path="res://sources/lesson_screen/lesson_button.tscn" id="4_epm30"] -[ext_resource type="Texture2D" uid="uid://d3vt2qpngkkjs" path="res://assets/gardens/animals/crab.png" id="5_vra1r"] +[ext_resource type="Texture2D" uid="uid://6bosyi1wv8vu" path="res://assets/gardens/animals/khaki_turtle.png" id="5_13gkf"] +[ext_resource type="Texture2D" uid="uid://blaltndbcv2yq" path="res://assets/gardens/victory_assets/victory_asset_plant_08.png" id="5_m2rr7"] +[ext_resource type="Texture2D" uid="uid://dgssb0oonuqku" path="res://assets/gardens/victory_assets/victory_asset_fish_01.png" id="6_th10l"] +[ext_resource type="Texture2D" uid="uid://bv510d5r4dn82" path="res://assets/gardens/victory_assets/victory_asset_dragon_flies_01.png" id="7_t2ok3"] +[ext_resource type="Texture2D" uid="uid://bpxc4vhri16pd" path="res://assets/gardens/victory_assets/victory_asset_pearl.png" id="8_26esv"] +[ext_resource type="Texture2D" uid="uid://co6vu63bybpnc" path="res://assets/gardens/victory_assets/victory_asset_plant_09.png" id="9_lswb8"] +[ext_resource type="Texture2D" uid="uid://gm5x5p2f07rh" path="res://assets/gardens/victory_assets/victory_asset_plant_10.png" id="10_m37ct"] [node name="Garden" type="Control" unique_id=167073905] custom_minimum_size = Vector2(2400, 2.08165e-12) @@ -17,14 +24,14 @@ grow_vertical = 2 mouse_filter = 2 script = ExtResource("1_5owem") title = "Purple Turtle Garden" -unlocked_lesson = Color(0.7490196, 0.2784314, 0, 1) -unlocked_lesson_text = Color(1, 0.7921569, 0.6901961, 1) -completed_lesson = Color(1, 0.7921569, 0.6901961, 1) -completed_lesson_text = Color(0.7490196, 0.2784314, 0, 1) +unlocked_lesson = Color(0.3372549, 0.29803923, 0.16470589, 1) +unlocked_lesson_text = Color(0.9490196, 0.8901961, 0.72156864, 1) +completed_lesson = Color(0.9490196, 0.8901961, 0.72156864, 1) +completed_lesson_text = Color(0.3372549, 0.29803923, 0.16470589, 1) [node name="Background" type="TextureRect" parent="." unique_id=1058030897] unique_name_in_owner = true -modulate = Color(1, 0.49803922, 0.2, 1) +modulate = Color(0.6117647, 0.5176471, 0.23137255, 1) layout_mode = 0 offset_left = 350.0 offset_top = 50.0 @@ -45,17 +52,109 @@ grow_vertical = 2 mouse_filter = 2 [node name="Victory_Asset_01" type="TextureRect" parent="Victory_Assets" unique_id=1278004645] -modulate = Color(0.7490196, 0.2784314, 0, 1) +modulate = Color(0.3372549, 0.29803923, 0.16470589, 1) layout_mode = 0 -offset_left = 761.0 -offset_top = 1263.0 -offset_right = 939.0 -offset_bottom = 1575.0 +offset_left = 1623.0 +offset_top = 549.0 +offset_right = 1782.0 +offset_bottom = 719.0 +scale = Vector2(2, 2) +mouse_filter = 2 +texture = ExtResource("3_13gkf") +expand_mode = 1 +stretch_mode = 5 + +[node name="Victory_Asset_02" type="TextureRect" parent="Victory_Assets" unique_id=1249100073] +modulate = Color(0.3372549, 0.29803923, 0.16470589, 1) +layout_mode = 0 +offset_left = 799.0 +offset_top = 1233.0 +offset_right = 930.0 +offset_bottom = 1464.0 +scale = Vector2(1.5, 1.5) mouse_filter = 2 texture = ExtResource("3_th10l") expand_mode = 1 stretch_mode = 5 +[node name="Victory_Asset_03" type="TextureRect" parent="Victory_Assets" unique_id=1357302889] +modulate = Color(0.3372549, 0.29803923, 0.16470589, 1) +layout_mode = 0 +offset_left = 1225.0 +offset_top = 311.0 +offset_right = 1388.0 +offset_bottom = 473.0 +scale = Vector2(2, 2) +mouse_filter = 2 +texture = ExtResource("5_m2rr7") +expand_mode = 1 +stretch_mode = 5 + +[node name="Victory_Asset_04" type="TextureRect" parent="Victory_Assets" unique_id=482395264] +modulate = Color(0.3372549, 0.29803923, 0.16470589, 1) +layout_mode = 0 +offset_left = 1121.0 +offset_top = 1293.0 +offset_right = 1310.0 +offset_bottom = 1435.0 +scale = Vector2(2, 2) +mouse_filter = 2 +texture = ExtResource("6_th10l") +expand_mode = 1 +stretch_mode = 5 + +[node name="Victory_Asset_05" type="TextureRect" parent="Victory_Assets" unique_id=1185193626] +modulate = Color(0.3372549, 0.29803923, 0.16470589, 1) +layout_mode = 0 +offset_left = 989.0 +offset_top = 1081.0 +offset_right = 1116.0 +offset_bottom = 1142.0 +scale = Vector2(2, 2) +mouse_filter = 2 +texture = ExtResource("7_t2ok3") +expand_mode = 1 +stretch_mode = 5 + +[node name="Victory_Asset_06" type="TextureRect" parent="Victory_Assets" unique_id=1997244728] +modulate = Color(0.3372549, 0.29803923, 0.16470589, 1) +layout_mode = 0 +offset_left = 1569.0 +offset_top = 1255.0 +offset_right = 1657.0 +offset_bottom = 1346.0 +scale = Vector2(2, 2) +mouse_filter = 2 +texture = ExtResource("8_26esv") +expand_mode = 1 +stretch_mode = 5 + +[node name="Victory_Asset_07" type="TextureRect" parent="Victory_Assets" unique_id=990129889] +modulate = Color(0.3372549, 0.29803923, 0.16470589, 1) +layout_mode = 0 +offset_left = 853.0 +offset_top = 351.0 +offset_right = 958.0 +offset_bottom = 526.0 +scale = Vector2(2, 2) +mouse_filter = 2 +texture = ExtResource("9_lswb8") +expand_mode = 1 +stretch_mode = 5 + +[node name="Victory_Asset_08" type="TextureRect" parent="Victory_Assets" unique_id=420651120] +modulate = Color(0.3372549, 0.29803923, 0.16470589, 1) +layout_mode = 0 +offset_left = 567.0 +offset_top = 679.0 +offset_right = 648.0 +offset_bottom = 761.0 +scale = Vector2(2, 2) +mouse_filter = 2 +texture = ExtResource("10_m37ct") +expand_mode = 1 +stretch_mode = 5 + [node name="Buttons" type="Control" parent="." unique_id=1964597] layout_mode = 1 anchors_preset = 15 @@ -105,12 +204,25 @@ offset_right = 1960.0 offset_bottom = 1260.0 pivot_offset = Vector2(120, 120) -[node name="Crab" type="TextureRect" parent="." unique_id=518902024] +[node name="Turtle_01" type="TextureRect" parent="." unique_id=518902024] layout_mode = 0 -offset_left = 629.0 -offset_top = 259.0 -offset_right = 929.0 -offset_bottom = 559.0 -texture = ExtResource("5_vra1r") +offset_left = 569.0 +offset_top = 99.0 +offset_right = 709.0 +offset_bottom = 236.0 +scale = Vector2(2, 2) +texture = ExtResource("5_13gkf") +expand_mode = 1 +stretch_mode = 5 + +[node name="Turtle_02" type="TextureRect" parent="." unique_id=1077405437] +layout_mode = 0 +offset_left = 395.0 +offset_top = 409.00003 +offset_right = 535.0 +offset_bottom = 546.0 +rotation = -0.30425045 +scale = Vector2(1.2, 1.2) +texture = ExtResource("5_13gkf") expand_mode = 1 stretch_mode = 5 diff --git a/resources/gardens/garden_12.tscn b/resources/gardens/garden_12.tscn index 6d2041fb..718e8397 100644 --- a/resources/gardens/garden_12.tscn +++ b/resources/gardens/garden_12.tscn @@ -1,10 +1,17 @@ [gd_scene format=3 uid="uid://dlq2i1hs2w3n6"] [ext_resource type="Script" uid="uid://ch5h4p1o54whq" path="res://resources/gardens/garden.gd" id="1_5owem"] -[ext_resource type="Texture2D" uid="uid://l32ekwfso26s" path="res://assets/gardens/gardens/garden_04.png" id="2_xmsgp"] -[ext_resource type="Texture2D" uid="uid://dro75vltqiq6j" path="res://assets/gardens/victory_assets/victory_asset_plant_07.png" id="3_g51bh"] +[ext_resource type="Texture2D" uid="uid://b6pmtjjp4rejb" path="res://assets/gardens/gardens/garden_12.png" id="2_xmsgp"] +[ext_resource type="Texture2D" uid="uid://jid1k44bn2xx" path="res://assets/gardens/victory_assets/victory_asset_mountain.png" id="3_xmsgp"] [ext_resource type="PackedScene" uid="uid://delcgui3v0eek" path="res://sources/lesson_screen/lesson_button.tscn" id="4_epm30"] -[ext_resource type="Texture2D" uid="uid://d3vt2qpngkkjs" path="res://assets/gardens/animals/crab.png" id="5_go3so"] +[ext_resource type="Texture2D" uid="uid://cjb3ygn2iycj4" path="res://assets/gardens/victory_assets/victory_asset_plant_26.png" id="4_go3so"] +[ext_resource type="Texture2D" uid="uid://dgssb0oonuqku" path="res://assets/gardens/victory_assets/victory_asset_fish_01.png" id="5_88yjd"] +[ext_resource type="Texture2D" uid="uid://cy1nrnl520goj" path="res://assets/gardens/animals/penguin.png" id="5_xmsgp"] +[ext_resource type="Texture2D" uid="uid://d0je2xrnu1gem" path="res://assets/gardens/victory_assets/victory_asset_snowman.png" id="6_4h4hf"] +[ext_resource type="Texture2D" uid="uid://bcjk0l771ugvq" path="res://assets/gardens/victory_assets/victory_asset_snowpile.png" id="7_wf34p"] +[ext_resource type="Texture2D" uid="uid://0g80o48ewp7d" path="res://assets/gardens/victory_assets/victory_asset_cloud_snow.png" id="8_4h4hf"] +[ext_resource type="Texture2D" uid="uid://28wjedoatx7c" path="res://assets/gardens/victory_assets/victory_asset_whale.png" id="9_m7voh"] +[ext_resource type="Texture2D" uid="uid://bqxwflyxhcdvw" path="res://assets/gardens/victory_assets/victory_asset_snowflakes.png" id="10_g51bh"] [node name="Garden" type="Control" unique_id=167073905] custom_minimum_size = Vector2(2400, 2.08165e-12) @@ -17,14 +24,14 @@ grow_vertical = 2 mouse_filter = 2 script = ExtResource("1_5owem") title = "Purple Turtle Garden" -unlocked_lesson = Color(0.7490196, 0.2784314, 0, 1) -unlocked_lesson_text = Color(1, 0.7921569, 0.6901961, 1) -completed_lesson = Color(1, 0.7921569, 0.6901961, 1) -completed_lesson_text = Color(0.7490196, 0.2784314, 0, 1) +unlocked_lesson = Color(0, 0.5529412, 0.76862746, 1) +unlocked_lesson_text = Color(0.78431374, 0.9019608, 0.9529412, 1) +completed_lesson = Color(0.78431374, 0.9019608, 0.9529412, 1) +completed_lesson_text = Color(0, 0.5529412, 0.76862746, 1) [node name="Background" type="TextureRect" parent="." unique_id=1058030897] unique_name_in_owner = true -modulate = Color(1, 0.49803922, 0.2, 1) +modulate = Color(0.3372549, 0.76862746, 0.9372549, 1) layout_mode = 0 offset_left = 350.0 offset_top = 50.0 @@ -45,14 +52,106 @@ grow_vertical = 2 mouse_filter = 2 [node name="Victory_Asset_01" type="TextureRect" parent="Victory_Assets" unique_id=1278004645] -modulate = Color(0.7490196, 0.2784314, 0, 1) +modulate = Color(0, 0.5529412, 0.76862746, 1) layout_mode = 0 -offset_left = 761.0 -offset_top = 1263.0 -offset_right = 939.0 -offset_bottom = 1575.0 +offset_left = 755.0 +offset_top = 314.0 +offset_right = 978.0 +offset_bottom = 394.0 +scale = Vector2(2, 2) mouse_filter = 2 -texture = ExtResource("3_g51bh") +texture = ExtResource("3_xmsgp") +expand_mode = 1 +stretch_mode = 5 + +[node name="Victory_Asset_02" type="TextureRect" parent="Victory_Assets" unique_id=668076947] +modulate = Color(0, 0.5529412, 0.76862746, 1) +layout_mode = 0 +offset_left = 1376.0 +offset_top = 275.0 +offset_right = 1475.0 +offset_bottom = 409.0 +scale = Vector2(2, 2) +mouse_filter = 2 +texture = ExtResource("4_go3so") +expand_mode = 1 +stretch_mode = 5 + +[node name="Victory_Asset_03" type="TextureRect" parent="Victory_Assets" unique_id=2032790296] +modulate = Color(0, 0.5529412, 0.76862746, 1) +layout_mode = 0 +offset_left = 852.0 +offset_top = 1155.0 +offset_right = 1013.0 +offset_bottom = 1316.0 +mouse_filter = 2 +texture = ExtResource("5_88yjd") +expand_mode = 1 +stretch_mode = 5 +flip_h = true + +[node name="Victory_Asset_04" type="TextureRect" parent="Victory_Assets" unique_id=1525582337] +modulate = Color(0, 0.5529412, 0.76862746, 1) +layout_mode = 0 +offset_left = 1705.0 +offset_top = 867.0 +offset_right = 1796.0 +offset_bottom = 952.0 +scale = Vector2(2, 2) +mouse_filter = 2 +texture = ExtResource("6_4h4hf") +expand_mode = 1 +stretch_mode = 5 + +[node name="Victory_Asset_05" type="TextureRect" parent="Victory_Assets" unique_id=322571717] +modulate = Color(0, 0.5529412, 0.76862746, 1) +layout_mode = 0 +offset_left = 1618.0 +offset_top = 1495.0 +offset_right = 1755.0 +offset_bottom = 1558.0 +scale = Vector2(2, 2) +mouse_filter = 2 +texture = ExtResource("7_wf34p") +expand_mode = 1 +stretch_mode = 5 + +[node name="Victory_Asset_06" type="TextureRect" parent="Victory_Assets" unique_id=513223434] +modulate = Color(0, 0.5529412, 0.76862746, 1) +layout_mode = 0 +offset_left = 993.0 +offset_top = 35.0 +offset_right = 1118.0 +offset_bottom = 187.0 +scale = Vector2(2, 2) +mouse_filter = 2 +texture = ExtResource("8_4h4hf") +expand_mode = 1 +stretch_mode = 5 + +[node name="Victory_Asset_07" type="TextureRect" parent="Victory_Assets" unique_id=354507578] +modulate = Color(0, 0.5529412, 0.76862746, 1) +layout_mode = 0 +offset_left = 915.0 +offset_top = 951.0 +offset_right = 1073.0 +offset_bottom = 1016.0 +scale = Vector2(2, 2) +mouse_filter = 2 +texture = ExtResource("9_m7voh") +expand_mode = 1 +stretch_mode = 5 + +[node name="Victory_Asset_08" type="TextureRect" parent="Victory_Assets" unique_id=705391478] +modulate = Color(0, 0.5529412, 0.76862746, 1) +layout_mode = 0 +offset_left = 1609.0 +offset_top = 612.0 +offset_right = 1685.0 +offset_bottom = 689.0 +scale = Vector2(2, 2) +mouse_filter = 2 +texture = ExtResource("10_g51bh") expand_mode = 1 stretch_mode = 5 @@ -67,50 +166,51 @@ mouse_filter = 2 [node name="Slot1" parent="Buttons" unique_id=1361620593 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 494.0 -offset_top = 1052.0 -offset_right = 734.0 -offset_bottom = 1292.0 +offset_left = 434.0 +offset_top = 452.0 +offset_right = 674.0 +offset_bottom = 692.0 pivot_offset = Vector2(120, 120) [node name="Slot2" parent="Buttons" unique_id=1025579258 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 762.0 -offset_top = 887.0 -offset_right = 1002.0 -offset_bottom = 1127.0 +offset_left = 800.0 +offset_top = 537.0 +offset_right = 1040.0 +offset_bottom = 777.0 pivot_offset = Vector2(120, 120) [node name="Slot3" parent="Buttons" unique_id=353688519 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 1066.0 -offset_top = 810.0 -offset_right = 1306.0 -offset_bottom = 1050.0 +offset_left = 1165.0 +offset_top = 658.0 +offset_right = 1405.0 +offset_bottom = 898.0 pivot_offset = Vector2(120, 120) [node name="Slot4" parent="Buttons" unique_id=1536126098 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 1405.0 -offset_top = 885.0 -offset_right = 1645.0 -offset_bottom = 1125.0 +offset_left = 1410.0 +offset_top = 1016.0 +offset_right = 1650.0 +offset_bottom = 1256.0 pivot_offset = Vector2(120, 120) [node name="Slot5" parent="Buttons" unique_id=960033946 instance=ExtResource("4_epm30")] layout_mode = 0 -offset_left = 1720.0 -offset_top = 1020.0 -offset_right = 1960.0 -offset_bottom = 1260.0 +offset_left = 1144.0 +offset_top = 1328.0 +offset_right = 1384.0 +offset_bottom = 1568.0 pivot_offset = Vector2(120, 120) -[node name="Crab" type="TextureRect" parent="." unique_id=518902024] +[node name="Penguin" type="TextureRect" parent="." unique_id=518902024] layout_mode = 0 -offset_left = 629.0 -offset_top = 259.0 -offset_right = 929.0 -offset_bottom = 559.0 -texture = ExtResource("5_go3so") +offset_left = 564.0 +offset_top = 2.0 +offset_right = 691.0 +offset_bottom = 159.0 +scale = Vector2(2, 2) +texture = ExtResource("5_xmsgp") expand_mode = 1 stretch_mode = 5 From 8f4a1be9392e39b9d7fb0e00434011ec654ec307 Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Tue, 26 May 2026 16:40:56 +0200 Subject: [PATCH 076/111] Cleaning code for cloud manager --- sources/utils/clouds_manager.gd | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/sources/utils/clouds_manager.gd b/sources/utils/clouds_manager.gd index 6e9cd5eb..93292463 100644 --- a/sources/utils/clouds_manager.gd +++ b/sources/utils/clouds_manager.gd @@ -83,15 +83,15 @@ func _initialize_clouds() -> void: sprites.shuffle() var slot_count: int = sprites.size() - for i: int in range(slot_count): - _init_cloud_start(sprites[i], i, slot_count) + for index: int in range(slot_count): + _init_cloud_start(sprites[index], index, slot_count) func _populate_extra_clouds() -> void: if clouds_per_screen <= 0 or spawn_width <= 0.0: return var viewport_w: float = max(1.0, screen_width) - var screens: int = max(1, int(ceil(spawn_width / viewport_w))) + var screens: int = maxi(1, ceili(spawn_width / viewport_w)) var target_count: int = clouds_per_screen * screens var template_clouds: Array[Sprite2D] = [] @@ -102,8 +102,8 @@ func _populate_extra_clouds() -> void: return var to_add: int = target_count - template_clouds.size() - for i: int in range(to_add): - var template: Sprite2D = template_clouds[i % template_clouds.size()] + for index: int in range(to_add): + var template: Sprite2D = template_clouds[index % template_clouds.size()] var clone: Sprite2D = template.duplicate() as Sprite2D add_child(clone) From d55c05b53debcfc371289cc1eda277fe453ac4e0 Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Thu, 28 May 2026 09:31:11 +0200 Subject: [PATCH 077/111] Debug clouds "world bounds" --- sources/gardens/gardens.gd | 40 ++++++++++++++++++++++++--------- sources/utils/clouds_manager.gd | 8 +++++-- 2 files changed, 35 insertions(+), 13 deletions(-) diff --git a/sources/gardens/gardens.gd b/sources/gardens/gardens.gd index 0371359d..8198c9f8 100644 --- a/sources/gardens/gardens.gd +++ b/sources/gardens/gardens.gd @@ -204,23 +204,39 @@ func _apply_progression_to_gardens(transition_context: Dictionary) -> void: #region Scene setup and ready sequence -func _configure_clouds_for_gardens() -> void: - if not clouds or not garden_parent: - return - # Spread clouds across the full scrollable garden width so they remain - # visible regardless of which garden the player scrolls to. +func _compute_cloud_world_bounds() -> Vector2: + if not garden_parent: + return Vector2.ZERO var garden_count: int = garden_parent.get_child_count() if garden_count <= 0: - return - var content_world_width: float = float(garden_count * GARDEN_SIZE) - # max_scroll is what the parent will actually pass through scroll_offset. - # The CloudsManager needs this (not just world_width) to position clouds - # inside their reachable drift_x range when parallax_factor < 1.0. + return Vector2.ZERO + var trailing_spacer_width: float = 0.0 + if scroll_end_spacer: + trailing_spacer_width = scroll_end_spacer.custom_minimum_size.x + var content_world_width: float = float(garden_count * GARDEN_SIZE) + trailing_spacer_width var viewport_w: float = scroll_container.size.x if viewport_w <= 0.0: viewport_w = float(get_viewport_rect().size.x) var max_scroll: float = maxf(0.0, content_world_width - viewport_w) - clouds.configure_world(content_world_width, max_scroll) + return Vector2(content_world_width, max_scroll) + + +func _configure_clouds_for_gardens() -> void: + if not clouds: + return + var bounds: Vector2 = _compute_cloud_world_bounds() + if bounds == Vector2.ZERO: + return + clouds.configure_world(bounds.x, bounds.y) + + +func _refresh_cloud_world_bounds() -> void: + if not clouds: + return + var bounds: Vector2 = _compute_cloud_world_bounds() + if bounds == Vector2.ZERO: + return + clouds.set_world_bounds(bounds.x, bounds.y) func _scroll_to_starting_garden(_transition_context: Dictionary) -> void: @@ -1029,6 +1045,7 @@ func _set_up_final_boss_button() -> void: func _reset_final_boss_scroll_space() -> void: if scroll_end_spacer: scroll_end_spacer.custom_minimum_size.x = scroll_end_base_width + _refresh_cloud_world_bounds() func _update_final_boss_scroll_space(final_boss_center: Vector2, final_boss_size: Vector2) -> void: @@ -1042,6 +1059,7 @@ func _update_final_boss_scroll_space(final_boss_center: Vector2, final_boss_size var final_boss_right_edge: float = final_boss_center.x + final_boss_size.x * 0.5 var extra_width: float = max(0.0, final_boss_right_edge - last_garden_right_edge) scroll_end_spacer.custom_minimum_size.x = scroll_end_base_width + extra_width + _refresh_cloud_world_bounds() func _extend_unlocked_path_to_final_boss() -> void: diff --git a/sources/utils/clouds_manager.gd b/sources/utils/clouds_manager.gd index 93292463..e6727b13 100644 --- a/sources/utils/clouds_manager.gd +++ b/sources/utils/clouds_manager.gd @@ -60,12 +60,16 @@ func _process(delta: float) -> void: func configure_world(world_width: float, p_max_scroll: float = -1.0, override_clouds_per_screen: int = -1) -> void: if override_clouds_per_screen >= 0: clouds_per_screen = override_clouds_per_screen - spawn_width = world_width - max_scroll = p_max_scroll if p_max_scroll >= 0.0 else world_width + set_world_bounds(world_width, p_max_scroll) screen_width = get_viewport_rect().size.x _initialize_clouds() +func set_world_bounds(world_width: float, p_max_scroll: float = -1.0) -> void: + spawn_width = world_width + max_scroll = p_max_scroll if p_max_scroll >= 0.0 else world_width + + func _initialize_clouds() -> void: _populate_extra_clouds() cloud_speeds.clear() From ba8646c1bdb523f7461daac352e36a0b0997784f Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Thu, 28 May 2026 10:21:51 +0200 Subject: [PATCH 078/111] Place clouds behind UI buttons --- sources/gardens/gardens.tscn | 1 + 1 file changed, 1 insertion(+) diff --git a/sources/gardens/gardens.tscn b/sources/gardens/gardens.tscn index 0609d6e4..a4a573e9 100644 --- a/sources/gardens/gardens.tscn +++ b/sources/gardens/gardens.tscn @@ -480,6 +480,7 @@ unique_name_in_owner = true visible = false [node name="CloudsLayer" type="CanvasLayer" parent="." unique_id=100000001] +layer = 0 [node name="Clouds" type="Node2D" parent="CloudsLayer" unique_id=100000002] unique_name_in_owner = true From c9bdedb576d2310517669fe1ebf67bb9086a3614 Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Thu, 28 May 2026 10:29:10 +0200 Subject: [PATCH 079/111] Bold font for lesson buttons --- sources/lesson_screen/lesson_button.tscn | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sources/lesson_screen/lesson_button.tscn b/sources/lesson_screen/lesson_button.tscn index cfee99f0..396fe4f8 100644 --- a/sources/lesson_screen/lesson_button.tscn +++ b/sources/lesson_screen/lesson_button.tscn @@ -1,6 +1,7 @@ [gd_scene format=3 uid="uid://delcgui3v0eek"] [ext_resource type="Script" uid="uid://d1gj4en3e7b8b" path="res://sources/lesson_screen/lesson_button.gd" id="4_mbltp"] +[ext_resource type="FontFile" uid="uid://bj2rpti6g24kk" path="res://assets/fonts/kalulu_mulish_bold.otf" id="4_t6rjb"] [ext_resource type="PackedScene" uid="uid://cn2rw06pltyiu" path="res://sources/utils/fx/right.tscn" id="7_rtwam"] [ext_resource type="Texture2D" uid="uid://cxjy5f7oyl8mq" path="res://assets/gardens/buttons/lesson_circle.png" id="lesson_circle"] @@ -73,6 +74,7 @@ offset_top = 8.0 grow_horizontal = 2 grow_vertical = 2 mouse_filter = 1 +theme_override_fonts/font = ExtResource("4_t6rjb") theme_override_font_sizes/font_size = 88 horizontal_alignment = 1 vertical_alignment = 1 From 0e55e5d464193ccb229aa4df636c98538df0bff8 Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Thu, 28 May 2026 10:29:23 +0200 Subject: [PATCH 080/111] Small corrections for gardens assets --- resources/gardens/garden_03.tscn | 10 +++++----- resources/gardens/garden_04.tscn | 24 ++++++++++++------------ resources/gardens/garden_12.tscn | 31 ++++++++++++++++--------------- 3 files changed, 33 insertions(+), 32 deletions(-) diff --git a/resources/gardens/garden_03.tscn b/resources/gardens/garden_03.tscn index ff04cc87..19635580 100644 --- a/resources/gardens/garden_03.tscn +++ b/resources/gardens/garden_03.tscn @@ -141,11 +141,11 @@ stretch_mode = 5 [node name="Victory_Asset_08" type="TextureRect" parent="Victory_Assets" unique_id=1465342151] modulate = Color(0.52156866, 0.03137255, 0.40392157, 1) layout_mode = 0 -offset_left = 1064.0 -offset_top = 205.0 -offset_right = 1230.0 -offset_bottom = 322.0 -scale = Vector2(2, 2) +offset_left = 984.00006 +offset_top = 214.0 +offset_right = 1211.0 +offset_bottom = 373.0 +scale = Vector2(1.8, 1.8) mouse_filter = 2 texture = ExtResource("10_j3ks8") stretch_mode = 5 diff --git a/resources/gardens/garden_04.tscn b/resources/gardens/garden_04.tscn index 0109269e..05f6b1a7 100644 --- a/resources/gardens/garden_04.tscn +++ b/resources/gardens/garden_04.tscn @@ -70,7 +70,7 @@ offset_left = 568.0 offset_top = 994.0 offset_right = 742.0 offset_bottom = 1221.0 -scale = Vector2(2, 2) +scale = Vector2(1.6, 1.6) texture = ExtResource("4_1pxce") stretch_mode = 5 @@ -99,11 +99,11 @@ stretch_mode = 4 [node name="Victory_Asset_05" type="TextureRect" parent="Victory_Assets" unique_id=1947559940] modulate = Color(0.7490196, 0.2784314, 0, 1) layout_mode = 0 -offset_left = 1624.0 -offset_top = 912.0 -offset_right = 1832.0 -offset_bottom = 1046.0 -scale = Vector2(2, 2) +offset_left = 1639.0 +offset_top = 950.0 +offset_right = 1847.0 +offset_bottom = 1084.0 +scale = Vector2(1.6, 1.6) texture = ExtResource("7_r5gxh") stretch_mode = 4 @@ -125,18 +125,18 @@ offset_left = 913.0 offset_top = 1103.0 offset_right = 1095.0 offset_bottom = 1230.0 -scale = Vector2(2, 2) +scale = Vector2(1.6, 1.6) texture = ExtResource("9_nt0kr") stretch_mode = 4 [node name="Victory_Asset_08" type="TextureRect" parent="Victory_Assets" unique_id=977643190] modulate = Color(0.7490196, 0.2784314, 0, 1) layout_mode = 0 -offset_left = 1477.0 -offset_top = 500.0 -offset_right = 1636.0 -offset_bottom = 648.0 -scale = Vector2(2, 2) +offset_left = 1475.0 +offset_top = 525.0 +offset_right = 1634.0 +offset_bottom = 673.0 +scale = Vector2(1.5, 1.5) texture = ExtResource("10_0vwua") stretch_mode = 4 diff --git a/resources/gardens/garden_12.tscn b/resources/gardens/garden_12.tscn index 718e8397..9557c74d 100644 --- a/resources/gardens/garden_12.tscn +++ b/resources/gardens/garden_12.tscn @@ -58,7 +58,7 @@ offset_left = 755.0 offset_top = 314.0 offset_right = 978.0 offset_bottom = 394.0 -scale = Vector2(2, 2) +scale = Vector2(2.5, 2.5) mouse_filter = 2 texture = ExtResource("3_xmsgp") expand_mode = 1 @@ -71,7 +71,7 @@ offset_left = 1376.0 offset_top = 275.0 offset_right = 1475.0 offset_bottom = 409.0 -scale = Vector2(2, 2) +scale = Vector2(3, 3) mouse_filter = 2 texture = ExtResource("4_go3so") expand_mode = 1 @@ -84,6 +84,7 @@ offset_left = 852.0 offset_top = 1155.0 offset_right = 1013.0 offset_bottom = 1316.0 +scale = Vector2(1.5, 1.5) mouse_filter = 2 texture = ExtResource("5_88yjd") expand_mode = 1 @@ -97,7 +98,7 @@ offset_left = 1705.0 offset_top = 867.0 offset_right = 1796.0 offset_bottom = 952.0 -scale = Vector2(2, 2) +scale = Vector2(3, 3) mouse_filter = 2 texture = ExtResource("6_4h4hf") expand_mode = 1 @@ -106,11 +107,11 @@ stretch_mode = 5 [node name="Victory_Asset_05" type="TextureRect" parent="Victory_Assets" unique_id=322571717] modulate = Color(0, 0.5529412, 0.76862746, 1) layout_mode = 0 -offset_left = 1618.0 -offset_top = 1495.0 -offset_right = 1755.0 -offset_bottom = 1558.0 -scale = Vector2(2, 2) +offset_left = 1490.0001 +offset_top = 1523.0 +offset_right = 1627.0001 +offset_bottom = 1586.0 +scale = Vector2(3, 3) mouse_filter = 2 texture = ExtResource("7_wf34p") expand_mode = 1 @@ -123,7 +124,7 @@ offset_left = 993.0 offset_top = 35.0 offset_right = 1118.0 offset_bottom = 187.0 -scale = Vector2(2, 2) +scale = Vector2(2.2, 2.2) mouse_filter = 2 texture = ExtResource("8_4h4hf") expand_mode = 1 @@ -132,11 +133,11 @@ stretch_mode = 5 [node name="Victory_Asset_07" type="TextureRect" parent="Victory_Assets" unique_id=354507578] modulate = Color(0, 0.5529412, 0.76862746, 1) layout_mode = 0 -offset_left = 915.0 -offset_top = 951.0 -offset_right = 1073.0 -offset_bottom = 1016.0 -scale = Vector2(2, 2) +offset_left = 851.0 +offset_top = 927.0 +offset_right = 1009.0 +offset_bottom = 992.0 +scale = Vector2(3, 3) mouse_filter = 2 texture = ExtResource("9_m7voh") expand_mode = 1 @@ -149,7 +150,7 @@ offset_left = 1609.0 offset_top = 612.0 offset_right = 1685.0 offset_bottom = 689.0 -scale = Vector2(2, 2) +scale = Vector2(3, 3) mouse_filter = 2 texture = ExtResource("10_g51bh") expand_mode = 1 From 9e512ec4a521b41d8a593d8687cd5a7b99197e4c Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Thu, 28 May 2026 11:42:03 +0200 Subject: [PATCH 081/111] Boss buttons does not stop scrolling --- sources/gardens/gardens.gd | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/sources/gardens/gardens.gd b/sources/gardens/gardens.gd index 8198c9f8..b9d387bf 100644 --- a/sources/gardens/gardens.gd +++ b/sources/gardens/gardens.gd @@ -1013,6 +1013,7 @@ func _set_up_boss_buttons() -> void: boss_button.set_button_disabled(true) var garden_index: int = _get_garden_index_for_lesson(gate_lesson) boss_button.pressed.connect(_on_boss_button_pressed.bind(gate_lesson, garden_index)) + boss_button.gui_input.connect(_on_boss_button_gui_input) _set_up_final_boss_button() @@ -1039,6 +1040,7 @@ func _set_up_final_boss_button() -> void: boss_button.position = final_boss_center - final_boss_size * 0.5 boss_button.set_button_disabled(false) boss_button.pressed.connect(_on_final_boss_button_pressed.bind(final_lesson_number, last_garden_index)) + boss_button.gui_input.connect(_on_boss_button_gui_input) _update_final_boss_scroll_space(final_boss_center, final_boss_size) @@ -1305,6 +1307,19 @@ func _on_scroll_container_gui_input(event: InputEvent) -> void: scroll_container.scroll_horizontal -= int(motion_event.relative.x) +func _on_boss_button_gui_input(event: InputEvent) -> void: + # Boss buttons live outside the ScrollContainer, so without forwarding, + # their default STOP mouse filter would swallow scroll events that pass over them. + if event is InputEventMouseButton: + var mb: InputEventMouseButton = event + if mb.button_index == MOUSE_BUTTON_WHEEL_UP or mb.button_index == MOUSE_BUTTON_WHEEL_DOWN \ + or mb.button_index == MOUSE_BUTTON_WHEEL_LEFT or mb.button_index == MOUSE_BUTTON_WHEEL_RIGHT: + _on_scroll_container_gui_input(event) + return + if is_scrolling and event is InputEventMouseMotion: + _on_scroll_container_gui_input(event) + + func _scroll_by_garden(p_direction: int) -> void: var target_scroll: int = scroll_container.scroll_horizontal + p_direction * 200 scroll_container.scroll_horizontal = target_scroll From 14f1d68a47e1677025ad16610dc0dd0172b9366c Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Thu, 28 May 2026 11:59:10 +0200 Subject: [PATCH 082/111] Update boss button --- assets/minigames/boss/boss_icon.png | Bin 6344 -> 12289 bytes assets/minigames/boss/boss_icon_full.png | Bin 6404 -> 13516 bytes sources/gardens/boss_button.tscn | 15 +++++++-------- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/assets/minigames/boss/boss_icon.png b/assets/minigames/boss/boss_icon.png index 7195ced1082f23a89792556ab85285b909813c56..28ed0b6963edace9cc69fcb7bb5006d3332a3e9b 100644 GIT binary patch literal 12289 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 literal 6344 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 diff --git a/assets/minigames/boss/boss_icon_full.png b/assets/minigames/boss/boss_icon_full.png index 11718060f522eeecc3f2503a7533c8fe573cc28f..9ea619048841d0a28a104c27df2e7b7e0466fb52 100644 GIT binary patch literal 13516 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 JGAZ*9{{wI{Y7YPa literal 6404 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 Date: Thu, 28 May 2026 12:05:30 +0200 Subject: [PATCH 083/111] Debug boss button texture --- sources/gardens/boss_button.gd | 26 +++++++++++++++++++++++--- sources/gardens/boss_button.tscn | 2 ++ 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/sources/gardens/boss_button.gd b/sources/gardens/boss_button.gd index 79111909..18b163dc 100644 --- a/sources/gardens/boss_button.gd +++ b/sources/gardens/boss_button.gd @@ -3,6 +3,8 @@ extends LessonButton @export var icon_texture: Texture2D: set = _set_icon_texture +@export var completed_icon_texture: Texture2D: + set = _set_completed_icon_texture @onready var icon: TextureRect = %Icon @@ -11,10 +13,28 @@ func _ready() -> void: super() if label: label.hide() - _set_icon_texture(icon_texture) + _refresh_icon() func _set_icon_texture(value: Texture2D) -> void: icon_texture = value - if icon: - icon.texture = value + _refresh_icon() + + +func _set_completed_icon_texture(value: Texture2D) -> void: + completed_icon_texture = value + _refresh_icon() + + +func _set_completed(value: bool) -> void: + super(value) + _refresh_icon() + + +func _refresh_icon() -> void: + if not icon: + return + if completed and completed_icon_texture: + icon.texture = completed_icon_texture + else: + icon.texture = icon_texture diff --git a/sources/gardens/boss_button.tscn b/sources/gardens/boss_button.tscn index 615a4864..3b3a2e78 100644 --- a/sources/gardens/boss_button.tscn +++ b/sources/gardens/boss_button.tscn @@ -3,6 +3,7 @@ [ext_resource type="Script" uid="uid://bbjhs5nta7xxj" path="res://sources/gardens/boss_button.gd" id="5_3d6pj"] [ext_resource type="PackedScene" uid="uid://cn2rw06pltyiu" path="res://sources/utils/fx/right.tscn" id="7_rtwam"] [ext_resource type="Texture2D" uid="uid://cfnjk06m367r3" path="res://assets/minigames/boss/boss_icon.png" id="8_oy4mt"] +[ext_resource type="Texture2D" uid="uid://bc3e0qths2cvt" path="res://assets/minigames/boss/boss_icon_full.png" id="9_full"] [ext_resource type="Texture2D" uid="uid://cxjy5f7oyl8mq" path="res://assets/gardens/buttons/lesson_circle.png" id="lesson_circle"] [node name="BossButton" type="TextureButton" unique_id=1297494779] @@ -21,6 +22,7 @@ texture_focused = ExtResource("lesson_circle") stretch_mode = 0 script = ExtResource("5_3d6pj") icon_texture = ExtResource("8_oy4mt") +completed_icon_texture = ExtResource("9_full") [node name="RightFX" parent="." unique_id=1100015067 instance=ExtResource("7_rtwam")] unique_name_in_owner = true From 0ac4967486bad367b433a71d001a29235bfd8bf8 Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Thu, 28 May 2026 13:38:11 +0200 Subject: [PATCH 084/111] Ensure the help speech of Kalulu is triggered only once when the threshold is crossed, and not every mistake after that. --- sources/minigames/base/base_minigame.gd | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sources/minigames/base/base_minigame.gd b/sources/minigames/base/base_minigame.gd index 192b38b4..f8ecbf95 100644 --- a/sources/minigames/base/base_minigame.gd +++ b/sources/minigames/base/base_minigame.gd @@ -89,7 +89,8 @@ var current_lives: int = 0: Log.trace("BaseMinigame: Lives changed from %d to %d (max %d) for %s" % [previous_lives, current_lives, max_number_of_lives, TYPE_NAMES[minigame_name]]) if current_lives < previous_lives: consecutive_errors += previous_lives - current_lives - if current_lives <= max_number_of_lives - errors_before_help_speech: + var help_speech_threshold: int = max_number_of_lives - errors_before_help_speech + if previous_lives > help_speech_threshold and current_lives <= help_speech_threshold: _play_kalulu_help_speech() if consecutive_errors == errors_before_highlight: is_highlighting = true From 6a45cd4fc273ede189b4f14371fee9558b18a9a5 Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Thu, 28 May 2026 15:42:15 +0200 Subject: [PATCH 085/111] Security if language pack has less than 3 exercices in lesson --- sources/gardens/gardens.gd | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/sources/gardens/gardens.gd b/sources/gardens/gardens.gd index b9d387bf..e134c678 100644 --- a/sources/gardens/gardens.gd +++ b/sources/gardens/gardens.gd @@ -695,13 +695,14 @@ func _get_minigame_layouts() -> Array[MinigameLayout]: func _open_minigames_layout(button: LessonButton, lesson_number: int) -> void: if in_minigame_selection or not UserDataManager.student_progression: return - feedback_audio_stream_player2.pitch_scale = 1.1 - feedback_audio_stream_player2.play() - in_minigame_selection = true # Gets the correct exercises for the lesson var exercises: Array[int] = Database.get_exercise_for_lesson(lesson_number) if not exercises or exercises.size() < 3: + Log.error("Gardens: Cannot open minigame layout for lesson %d: expected 3 exercises, got %d" % [lesson_number, exercises.size() if exercises else 0]) return + feedback_audio_stream_player2.pitch_scale = 1.1 + feedback_audio_stream_player2.play() + in_minigame_selection = true # Sets the variables for the current garden and lesson current_lesson_number = lesson_number var garden_index_for_lesson: int = _get_garden_index_for_lesson(lesson_number) From a5c374ab2468c67a36491077273d9bf527815f76 Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Thu, 28 May 2026 16:27:00 +0200 Subject: [PATCH 086/111] New star colors in background of gardens --- sources/gardens/gardens.tscn | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/sources/gardens/gardens.tscn b/sources/gardens/gardens.tscn index a4a573e9..f0e14cee 100644 --- a/sources/gardens/gardens.tscn +++ b/sources/gardens/gardens.tscn @@ -52,6 +52,14 @@ point_count = 3 width = 32 curve = SubResource("Curve_wa85y") +[sub_resource type="Gradient" id="Gradient_stars"] +interpolation_mode = 1 +offsets = PackedFloat32Array(0, 0.166667, 0.333333, 0.5, 0.666667, 0.833333) +colors = PackedColorArray(1, 0.827451, 0.4, 1, 1, 0.74902, 0.580392, 1, 0.960784, 0.658824, 0.784314, 1, 0.498039, 0.784314, 1, 1, 0.658824, 0.941176, 0.815686, 1, 0.737255, 0.643137, 1, 1) + +[sub_resource type="GradientTexture1D" id="GradientTexture1D_stars"] +gradient = SubResource("Gradient_stars") + [sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_m12rm"] particle_flag_disable_z = true emission_shape = 3 @@ -62,9 +70,8 @@ angular_velocity_max = 90.0 gravity = Vector3(0, 0, 0) scale_min = 0.1 scale_max = 0.25 +color_initial_ramp = SubResource("GradientTexture1D_stars") alpha_curve = SubResource("CurveTexture_upllx") -hue_variation_min = -1.0 -hue_variation_max = 1.0 [sub_resource type="CanvasItemMaterial" id="CanvasItemMaterial_13bcn"] particles_animation = true From bab4d8da2759beadf44f16fefbbf852e34e364fc Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Fri, 29 May 2026 17:16:38 +0200 Subject: [PATCH 087/111] Prevent boss minigame crash --- sources/minigames/boss/boss_minigame.gd | 116 ++++++++++++++++++++-- sources/minigames/boss/boss_minigame.tscn | 51 ---------- 2 files changed, 107 insertions(+), 60 deletions(-) diff --git a/sources/minigames/boss/boss_minigame.gd b/sources/minigames/boss/boss_minigame.gd index 9a810d58..625bd626 100644 --- a/sources/minigames/boss/boss_minigame.gd +++ b/sources/minigames/boss/boss_minigame.gd @@ -4,6 +4,14 @@ const FINAL_BOSS_GAME_DURATION: int = 20 * 60 const FINAL_BOSS_TOTAL_WORDS: int = 180 const GAUGE_COLOR_LOW: Color = Color(0.55, 0.95, 0.45) const GAUGE_COLOR_HIGH: Color = Color(0.996078, 0.776471, 0.2) +const MONKEY_SCENE_PATH: String = "res://sources/minigames/monkeys/monkey.tscn" +const TURTLE_SCENE_PATH: String = "res://sources/minigames/turtles/turtle.tscn" +const PENGUIN_SCENE_PATH: String = "res://sources/minigames/penguin/penguin.tscn" +const FROG_SCENE_PATH: String = "res://sources/minigames/frog/frog.tscn" +const CRAB_SCENE_PATH: String = "res://sources/minigames/crabs/crab/crab.tscn" +const PARAKEET_SCENE_PATH: String = "res://sources/minigames/parakeets/parakeet.tscn" +const ANT_SCENE_PATH: String = "res://sources/minigames/ants/ant.tscn" +const JELLYFISH_SCENE_PATH: String = "res://sources/minigames/jellyfish/jellyfish.tscn" @export var game_duration: int = 4 * 60 @export var minimum_correct_ratio: float = 0.8 @@ -23,6 +31,14 @@ var default_label_background_color: Color var _correct_answer_tween: Tween var _victory_pulse_tween: Tween var _victory_threshold_reached: bool = false +var turtle: Turtle +var frog: Frog +var crab: Crab +var penguin: Penguin +var monkey: Monkey +var parakeet: Parakeet +var ant: Ant +var jellyfish: Jellyfish @onready var text_start_zone: Control = %ControlText @onready var texture_button_bin: TextureButton = $GameRoot/TextureButtonBin @@ -38,21 +54,14 @@ var _victory_threshold_reached: bool = false @onready var wrong_fx: WrongFX = %WrongFX @onready var right_stars: RightStarsFX = $GameRoot/Right_Stars @onready var frame_exit: Sprite2D = $GameRoot/Frame/FrameExit -@onready var turtle: Turtle = $GameRoot/Friends/Turtle -@onready var frog: Frog = $GameRoot/Friends/Frog -@onready var crab: Crab = $GameRoot/Friends/Crab -@onready var penguin: Penguin = $GameRoot/Friends/Penguin -@onready var monkey: Monkey = $GameRoot/Friends/Monkey -@onready var parakeet: Parakeet = $GameRoot/Friends/Parakeet -@onready var ant: Ant = $GameRoot/Friends/Ant -@onready var jellyfish: Jellyfish = $GameRoot/Friends_Behind_Frame/Jellyfish +@onready var friends_container: Node2D = $GameRoot/Friends +@onready var friends_behind_frame_container: Node2D = $GameRoot/Friends_Behind_Frame func _ready() -> void: super() if not is_final_boss: frame_exit.show() - setup_animal_friends() fireworks.set_colors([Color("#bca4ff"), Color("#f5a8c8"), Color("#ffbf94")]) if adult_block and adult_block.has_signal("unlocked"): adult_block.unlocked.connect(_on_adult_block_unlocked) @@ -72,6 +81,95 @@ func _ready() -> void: if UserDataManager.is_speech_played(TYPE_NAMES[minigame_name]): tutorial_count = 2 + _instantiate_animal_friends() + + +func _instantiate_animal_friends() -> void: + await get_tree().process_frame + if not is_inside_tree(): + return + + monkey = (load(MONKEY_SCENE_PATH) as PackedScene).instantiate() + monkey.position = Vector2(125, 62) + monkey.scale = Vector2(0.7, 0.7) + friends_container.add_child(monkey) + + await get_tree().process_frame + if not is_inside_tree(): + return + + turtle = (load(TURTLE_SCENE_PATH) as PackedScene).instantiate() + turtle.position = Vector2(-220, 120) + turtle.rotation = 1.5707964 + turtle.scale = Vector2(0.18, 0.18) + friends_container.add_child(turtle) + + await get_tree().process_frame + if not is_inside_tree(): + return + + penguin = (load(PENGUIN_SCENE_PATH) as PackedScene).instantiate() + penguin.position = Vector2(28, 114) + penguin.scale = Vector2(0.3, 0.3) + friends_container.add_child(penguin) + + await get_tree().process_frame + if not is_inside_tree(): + return + + frog = (load(FROG_SCENE_PATH) as PackedScene).instantiate() + frog.offset_left = -43.999985 + frog.offset_top = 112.0 + frog.offset_right = -43.999985 + frog.offset_bottom = 112.0 + frog.scale = Vector2(0.4, 0.4) + friends_container.add_child(frog) + + await get_tree().process_frame + if not is_inside_tree(): + return + + crab = (load(CRAB_SCENE_PATH) as PackedScene).instantiate() + crab.offset_left = -220.0 + crab.offset_top = 32.0 + crab.offset_right = 148.0 + crab.offset_bottom = 352.0 + crab.scale = Vector2(0.45, 0.45) + friends_container.add_child(crab) + + await get_tree().process_frame + if not is_inside_tree(): + return + + parakeet = (load(PARAKEET_SCENE_PATH) as PackedScene).instantiate() + parakeet.position = Vector2(124, -103) + parakeet.scale = Vector2(0.09, 0.09) + friends_container.add_child(parakeet) + + await get_tree().process_frame + if not is_inside_tree(): + return + + ant = (load(ANT_SCENE_PATH) as PackedScene).instantiate() + ant.position = Vector2(228, 132) + ant.scale = Vector2(0.17, 0.17) + friends_container.add_child(ant) + + await get_tree().process_frame + if not is_inside_tree(): + return + + jellyfish = (load(JELLYFISH_SCENE_PATH) as PackedScene).instantiate() + jellyfish.offset_left = 1449.0001 + jellyfish.offset_top = 1301.0001 + jellyfish.offset_right = 1849.0001 + jellyfish.offset_bottom = 1701.0001 + jellyfish.scale = Vector2(0.45, 0.45) + jellyfish.boss = true + friends_behind_frame_container.add_child(jellyfish) + + setup_animal_friends() + func setup_animal_friends() -> void: turtle.idle_boss() diff --git a/sources/minigames/boss/boss_minigame.tscn b/sources/minigames/boss/boss_minigame.tscn index d1ba6e32..6e77f268 100644 --- a/sources/minigames/boss/boss_minigame.tscn +++ b/sources/minigames/boss/boss_minigame.tscn @@ -12,7 +12,6 @@ [ext_resource type="Texture2D" uid="uid://cax5nncivwq4" path="res://assets/minigames/boss/bin.png" id="7_wij1o"] [ext_resource type="Texture2D" uid="uid://xukdk8dobsqy" path="res://assets/minigames/boss/book.png" id="8_mkvne"] [ext_resource type="Texture2D" uid="uid://1btgagsporxa" path="res://assets/minigames/parakeets/graphic/cloud_3.png" id="8_xrsj0"] -[ext_resource type="PackedScene" uid="uid://djykrpdu58f3v" path="res://sources/minigames/turtles/turtle.tscn" id="11_je4of"] [ext_resource type="Texture2D" uid="uid://dxqnvbr4tffn7" path="res://assets/minigames/minigame_ui/graphic/gauge.png" id="11_p5wnc"] [ext_resource type="Texture2D" uid="uid://7w2e4mo7yssm" path="res://assets/minigames/boss/foreground.png" id="12_2c6ay"] [ext_resource type="Texture2D" uid="uid://4ci6gmg0c15o" path="res://assets/minigames/minigame_ui/graphic/white_gauge.png" id="12_w5m1b"] @@ -22,15 +21,8 @@ [ext_resource type="LabelSettings" uid="uid://bguqnhiblwick" path="res://resources/themes/minigames_label_settings.tres" id="17_47luc"] [ext_resource type="PackedScene" uid="uid://dpfn2ag2xv24s" path="res://sources/minigames/boss/kalulu_boss.tscn" id="17_kvjsk"] [ext_resource type="PackedScene" uid="uid://b7rx6esglyd6c" path="res://sources/menus/adult_block/adult_block.tscn" id="18_4v0wd"] -[ext_resource type="PackedScene" uid="uid://bp0b4xkr7nwed" path="res://sources/minigames/monkeys/monkey.tscn" id="18_y0mix"] [ext_resource type="PackedScene" uid="uid://cs6g7fhc0bjvh" path="res://sources/utils/fx/right_stars.tscn" id="19_b2wqe"] -[ext_resource type="PackedScene" uid="uid://b78362g1yif2n" path="res://sources/minigames/penguin/penguin.tscn" id="19_j0ia3"] [ext_resource type="PackedScene" uid="uid://dlmbxcgiv8tpr" path="res://sources/utils/fx/wrong.tscn" id="19_wi3c5"] -[ext_resource type="PackedScene" uid="uid://bwe3fp0vkpufb" path="res://sources/minigames/crabs/crab/crab.tscn" id="20_j0ia3"] -[ext_resource type="PackedScene" uid="uid://bloyucpsbvpx8" path="res://sources/minigames/frog/frog.tscn" id="20_xrsj0"] -[ext_resource type="PackedScene" uid="uid://cpkwyypyikpfc" path="res://sources/minigames/jellyfish/jellyfish.tscn" id="21_3iy22"] -[ext_resource type="PackedScene" uid="uid://cmoeum0oc0p2" path="res://sources/minigames/parakeets/parakeet.tscn" id="23_h2hey"] -[ext_resource type="PackedScene" uid="uid://c6st16roxwloh" path="res://sources/minigames/ants/ant.tscn" id="24_ejade"] [sub_resource type="Curve2D" id="Curve2D_8d1qx"] _data = { @@ -92,14 +84,6 @@ texture = ExtResource("8_xrsj0") [node name="Friends_Behind_Frame" type="Node2D" parent="GameRoot" parent_id_path=PackedInt32Array(1053321881) index="3" unique_id=889769498] -[node name="Jellyfish" parent="GameRoot/Friends_Behind_Frame" index="0" unique_id=2036427610 instance=ExtResource("21_3iy22")] -offset_left = 1449.0001 -offset_top = 1301.0001 -offset_right = 1849.0001 -offset_bottom = 1701.0001 -scale = Vector2(0.45, 0.45) -boss = true - [node name="Frame" type="Node2D" parent="GameRoot" parent_id_path=PackedInt32Array(1053321881) index="4" unique_id=1674444498] position = Vector2(1080, 720) scale = Vector2(0.9, 0.9) @@ -251,41 +235,6 @@ texture = ExtResource("12_2c6ay") self_modulate = Color(1, 1, 1, 0.34509805) position = Vector2(1676, 1280) -[node name="Monkey" parent="GameRoot/Friends" index="0" unique_id=1341983060 instance=ExtResource("18_y0mix")] -position = Vector2(125, 62) -scale = Vector2(0.7, 0.7) - -[node name="Turtle" parent="GameRoot/Friends" index="1" unique_id=711306409 instance=ExtResource("11_je4of")] -position = Vector2(-220, 120) -rotation = 1.5707964 -scale = Vector2(0.17999999, 0.17999999) - -[node name="Penguin" parent="GameRoot/Friends" index="2" unique_id=1835464943 instance=ExtResource("19_j0ia3")] -position = Vector2(28, 114) -scale = Vector2(0.3, 0.3) - -[node name="Frog" parent="GameRoot/Friends" index="3" unique_id=2020692812 instance=ExtResource("20_xrsj0")] -offset_left = -43.999985 -offset_top = 112.0 -offset_right = -43.999985 -offset_bottom = 112.0 -scale = Vector2(0.4, 0.4) - -[node name="Crab" parent="GameRoot/Friends" index="4" unique_id=617305983 instance=ExtResource("20_j0ia3")] -offset_left = -220.0 -offset_top = 32.0 -offset_right = 148.0 -offset_bottom = 352.0 -scale = Vector2(0.45, 0.45) - -[node name="Parakeet" parent="GameRoot/Friends" index="5" unique_id=1132826004 instance=ExtResource("23_h2hey")] -position = Vector2(124, -103) -scale = Vector2(0.09, 0.09) - -[node name="Ant" parent="GameRoot/Friends" index="6" unique_id=1721368901 instance=ExtResource("24_ejade")] -position = Vector2(228, 132) -scale = Vector2(0.17, 0.17) - [node name="KaluluBoss" parent="GameRoot" parent_id_path=PackedInt32Array(1053321881) index="11" unique_id=1776395621 instance=ExtResource("17_kvjsk")] unique_name_in_owner = true position = Vector2(800, 1224) From 2db21b597b0ffac5fbca10981232180123988a41 Mon Sep 17 00:00:00 2001 From: Adrien Ufferte Date: Sat, 6 Jun 2026 11:13:22 +0200 Subject: [PATCH 088/111] Minigames wheel version 2 --- assets/gardens/animals/ant_body.png | Bin 0 -> 2841 bytes .../animals/ant_body.png.import} | 8 +- assets/gardens/animals/ant_face.png | Bin 0 -> 953 bytes .../animals/ant_face.png.import} | 8 +- assets/gardens/animals/caterpillar_body.png | Bin 0 -> 2890 bytes .../animals/caterpillar_body.png.import | 40 ++ assets/gardens/animals/caterpillar_face.png | Bin 0 -> 806 bytes .../animals/caterpillar_face.png.import | 40 ++ assets/gardens/animals/crab_body.png | Bin 0 -> 2253 bytes assets/gardens/animals/crab_body.png.import | 40 ++ assets/gardens/animals/crab_face.png | Bin 0 -> 1005 bytes .../animals/crab_face.png.import} | 8 +- assets/gardens/animals/frog_body.png | Bin 0 -> 2729 bytes .../animals/frog_body.png.import} | 8 +- assets/gardens/animals/frog_face.png | Bin 0 -> 1707 bytes assets/gardens/animals/frog_face.png.import | 40 ++ assets/gardens/animals/jellyfish_body.png | Bin 0 -> 5332 bytes .../gardens/animals/jellyfish_body.png.import | 40 ++ assets/gardens/animals/jellyfish_face.png | Bin 0 -> 1131 bytes .../gardens/animals/jellyfish_face.png.import | 40 ++ assets/gardens/animals/monkey_body.png | Bin 0 -> 3817 bytes assets/gardens/animals/monkey_body.png.import | 40 ++ assets/gardens/animals/monkey_face.png | Bin 0 -> 1080 bytes assets/gardens/animals/monkey_face.png.import | 40 ++ assets/gardens/animals/parakeet_body.png | Bin 0 -> 2392 bytes .../gardens/animals/parakeet_body.png.import | 40 ++ assets/gardens/animals/parakeet_face.png | Bin 0 -> 1929 bytes .../gardens/animals/parakeet_face.png.import | 40 ++ assets/gardens/animals/penguin_body.png | Bin 0 -> 2758 bytes .../gardens/animals/penguin_body.png.import | 40 ++ assets/gardens/animals/penguin_face.png | Bin 0 -> 1145 bytes .../gardens/animals/penguin_face.png.import | 40 ++ assets/gardens/animals/turtle_body.png | Bin 0 -> 5488 bytes assets/gardens/animals/turtle_body.png.import | 40 ++ assets/gardens/animals/turtle_face.png | Bin 0 -> 917 bytes assets/gardens/animals/turtle_face.png.import | 40 ++ assets/gardens/buttons/movie_icon.png | Bin 0 -> 2388 bytes assets/gardens/buttons/movie_icon.png.import | 40 ++ .../{ => victory_assets}/animals/ant.png | Bin .../animals/ant.png.import | 6 +- .../animals/caterpillar.png | Bin .../animals/caterpillar.png.import | 6 +- .../{ => victory_assets}/animals/crab.png | Bin .../animals/crab.png.import | 6 +- .../{ => victory_assets}/animals/frog.png | Bin .../animals/frog.png.import | 6 +- .../animals/jellyfish.png | Bin .../animals/jellyfish.png.import | 6 +- .../animals/khaki_turtle.png | Bin .../animals/khaki_turtle.png.import | 6 +- .../{ => victory_assets}/animals/monkey.png | Bin .../animals/monkey.png.import | 6 +- .../{ => victory_assets}/animals/penguin.png | Bin .../animals/penguin.png.import | 6 +- .../animals/pink_jellyfish.png | Bin .../animals/pink_jellyfish.png.import | 6 +- .../animals/red_parakeet.png | Bin .../animals/red_parakeet.png.import | 6 +- .../{ => victory_assets}/animals/turtle.png | Bin .../animals/turtle.png.import | 6 +- .../animals/yellow_parakeet.png | Bin .../animals/yellow_parakeet.png.import | 6 +- assets/lesson_screen/bottom.png | Bin 11678 -> 0 bytes assets/lesson_screen/branches.png | Bin 40124 -> 0 bytes assets/lesson_screen/top_left.png | Bin 11949 -> 0 bytes assets/lesson_screen/top_right.png | Bin 11870 -> 0 bytes resources/gardens/garden.gd | 8 + resources/gardens/garden_01.tscn | 7 +- resources/gardens/garden_02.tscn | 7 +- resources/gardens/garden_03.tscn | 7 +- resources/gardens/garden_04.tscn | 7 +- resources/gardens/garden_05.tscn | 7 +- resources/gardens/garden_06.tscn | 7 +- resources/gardens/garden_07.tscn | 7 +- resources/gardens/garden_08.tscn | 7 +- resources/gardens/garden_09.tscn | 7 +- resources/gardens/garden_10.tscn | 7 +- resources/gardens/garden_11.tscn | 7 +- resources/gardens/garden_12.tscn | 7 +- resources/shaders/grayscale.gdshader | 7 + resources/shaders/grayscale.gdshader.uid | 1 + resources/user/student_progression.gd | 181 ++++++--- sources/gardens/boss_button.tscn | 2 + sources/gardens/gardens.gd | 369 ++++++++++++++---- sources/gardens/gardens.tscn | 215 +++------- sources/gardens/minigame_layout.gd | 23 -- sources/gardens/minigame_layout.gd.uid | 1 - sources/gardens/minigame_wedge.gd | 61 +++ sources/gardens/minigame_wedge.gd.uid | 1 + sources/gardens/minigame_wedge.tscn | 63 +++ sources/utils/autoloads/database.gd | 10 +- 91 files changed, 1322 insertions(+), 408 deletions(-) create mode 100644 assets/gardens/animals/ant_body.png rename assets/{lesson_screen/top_right.png.import => gardens/animals/ant_body.png.import} (73%) create mode 100644 assets/gardens/animals/ant_face.png rename assets/{lesson_screen/top_left.png.import => gardens/animals/ant_face.png.import} (73%) create mode 100644 assets/gardens/animals/caterpillar_body.png create mode 100644 assets/gardens/animals/caterpillar_body.png.import create mode 100644 assets/gardens/animals/caterpillar_face.png create mode 100644 assets/gardens/animals/caterpillar_face.png.import create mode 100644 assets/gardens/animals/crab_body.png create mode 100644 assets/gardens/animals/crab_body.png.import create mode 100644 assets/gardens/animals/crab_face.png rename assets/{lesson_screen/bottom.png.import => gardens/animals/crab_face.png.import} (73%) create mode 100644 assets/gardens/animals/frog_body.png rename assets/{lesson_screen/branches.png.import => gardens/animals/frog_body.png.import} (73%) create mode 100644 assets/gardens/animals/frog_face.png create mode 100644 assets/gardens/animals/frog_face.png.import create mode 100644 assets/gardens/animals/jellyfish_body.png create mode 100644 assets/gardens/animals/jellyfish_body.png.import create mode 100644 assets/gardens/animals/jellyfish_face.png create mode 100644 assets/gardens/animals/jellyfish_face.png.import create mode 100644 assets/gardens/animals/monkey_body.png create mode 100644 assets/gardens/animals/monkey_body.png.import create mode 100644 assets/gardens/animals/monkey_face.png create mode 100644 assets/gardens/animals/monkey_face.png.import create mode 100644 assets/gardens/animals/parakeet_body.png create mode 100644 assets/gardens/animals/parakeet_body.png.import create mode 100644 assets/gardens/animals/parakeet_face.png create mode 100644 assets/gardens/animals/parakeet_face.png.import create mode 100644 assets/gardens/animals/penguin_body.png create mode 100644 assets/gardens/animals/penguin_body.png.import create mode 100644 assets/gardens/animals/penguin_face.png create mode 100644 assets/gardens/animals/penguin_face.png.import create mode 100644 assets/gardens/animals/turtle_body.png create mode 100644 assets/gardens/animals/turtle_body.png.import create mode 100644 assets/gardens/animals/turtle_face.png create mode 100644 assets/gardens/animals/turtle_face.png.import create mode 100644 assets/gardens/buttons/movie_icon.png create mode 100644 assets/gardens/buttons/movie_icon.png.import rename assets/gardens/{ => victory_assets}/animals/ant.png (100%) rename assets/gardens/{ => victory_assets}/animals/ant.png.import (76%) rename assets/gardens/{ => victory_assets}/animals/caterpillar.png (100%) rename assets/gardens/{ => victory_assets}/animals/caterpillar.png.import (74%) rename assets/gardens/{ => victory_assets}/animals/crab.png (100%) rename assets/gardens/{ => victory_assets}/animals/crab.png.import (76%) rename assets/gardens/{ => victory_assets}/animals/frog.png (100%) rename assets/gardens/{ => victory_assets}/animals/frog.png.import (76%) rename assets/gardens/{ => victory_assets}/animals/jellyfish.png (100%) rename assets/gardens/{ => victory_assets}/animals/jellyfish.png.import (75%) rename assets/gardens/{ => victory_assets}/animals/khaki_turtle.png (100%) rename assets/gardens/{ => victory_assets}/animals/khaki_turtle.png.import (74%) rename assets/gardens/{ => victory_assets}/animals/monkey.png (100%) rename assets/gardens/{ => victory_assets}/animals/monkey.png.import (75%) rename assets/gardens/{ => victory_assets}/animals/penguin.png (100%) rename assets/gardens/{ => victory_assets}/animals/penguin.png.import (75%) rename assets/gardens/{ => victory_assets}/animals/pink_jellyfish.png (100%) rename assets/gardens/{ => victory_assets}/animals/pink_jellyfish.png.import (73%) rename assets/gardens/{ => victory_assets}/animals/red_parakeet.png (100%) rename assets/gardens/{ => victory_assets}/animals/red_parakeet.png.import (74%) rename assets/gardens/{ => victory_assets}/animals/turtle.png (100%) rename assets/gardens/{ => victory_assets}/animals/turtle.png.import (75%) rename assets/gardens/{ => victory_assets}/animals/yellow_parakeet.png (100%) rename assets/gardens/{ => victory_assets}/animals/yellow_parakeet.png.import (73%) delete mode 100644 assets/lesson_screen/bottom.png delete mode 100644 assets/lesson_screen/branches.png delete mode 100644 assets/lesson_screen/top_left.png delete mode 100644 assets/lesson_screen/top_right.png create mode 100644 resources/shaders/grayscale.gdshader create mode 100644 resources/shaders/grayscale.gdshader.uid delete mode 100644 sources/gardens/minigame_layout.gd delete mode 100644 sources/gardens/minigame_layout.gd.uid create mode 100644 sources/gardens/minigame_wedge.gd create mode 100644 sources/gardens/minigame_wedge.gd.uid create mode 100644 sources/gardens/minigame_wedge.tscn diff --git a/assets/gardens/animals/ant_body.png b/assets/gardens/animals/ant_body.png new file mode 100644 index 0000000000000000000000000000000000000000..e5f317852ada914148d0c7e4f51be4cde59c635a GIT binary patch literal 2841 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 literal 0 HcmV?d00001 diff --git a/assets/lesson_screen/top_left.png.import b/assets/gardens/animals/ant_face.png.import similarity index 73% rename from assets/lesson_screen/top_left.png.import rename to assets/gardens/animals/ant_face.png.import index 7f8ebbf4..1cf6d29f 100644 --- a/assets/lesson_screen/top_left.png.import +++ b/assets/gardens/animals/ant_face.png.import @@ -2,16 +2,16 @@ importer="texture" type="CompressedTexture2D" -uid="uid://dkomjpclxvmqf" -path="res://.godot/imported/top_left.png-2ca3f2b1716a8a640fa40c3a481bc4d9.ctex" +uid="uid://by3xfdin7jrsn" +path="res://.godot/imported/ant_face.png-b00fa29a7fcfe1e19ec19735f3395466.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://assets/lesson_screen/top_left.png" -dest_files=["res://.godot/imported/top_left.png-2ca3f2b1716a8a640fa40c3a481bc4d9.ctex"] +source_file="res://assets/gardens/animals/ant_face.png" +dest_files=["res://.godot/imported/ant_face.png-b00fa29a7fcfe1e19ec19735f3395466.ctex"] [params] diff --git a/assets/gardens/animals/caterpillar_body.png b/assets/gardens/animals/caterpillar_body.png new file mode 100644 index 0000000000000000000000000000000000000000..4e5e48971d64fd3265efac7eba020901fac68edf GIT binary patch literal 2890 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 literal 0 HcmV?d00001 diff --git a/assets/gardens/animals/caterpillar_body.png.import b/assets/gardens/animals/caterpillar_body.png.import new file mode 100644 index 00000000..2c501777 --- /dev/null +++ b/assets/gardens/animals/caterpillar_body.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b6nrx0dn0h3f2" +path="res://.godot/imported/caterpillar_body.png-c691b990e51d372f5dfdafa881ea6750.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/gardens/animals/caterpillar_body.png" +dest_files=["res://.godot/imported/caterpillar_body.png-c691b990e51d372f5dfdafa881ea6750.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/gardens/animals/caterpillar_face.png b/assets/gardens/animals/caterpillar_face.png new file mode 100644 index 0000000000000000000000000000000000000000..4f0706166296c23d1ed5ec63ee7bbedb2670e342 GIT binary patch literal 806 zcmeAS@N?(olHy`uVBq!ia0vp^r9kY@!3HF+KJ6+8Qk(@Ik;M!Q+(IDCc$cQX8R4lw1R>_u0oBYdqw{@SnOnVabNgD zoMpH5j@JPNJAJKH9w}UL6c<0+D7It|U+2Rs$AYpve|-FXpjqYp)4~s5`%X97Dzf;T z?)H;!u(fv=eX^oSCUnALuA&gfKCKghtd^@3$Pg^+mrP*i*jdP-!~FNaZ?n(yZHUS$e^Rz?E=H}*!)z#KLeSO=Gefd(dB5d`;Z{N&fVq#j7Hdf@<<>tP9 z_jQX`kM9Y?Qg9JTFJn}tgQe4G2`v| zTm811_*&ZAFOSgK78|oRY-NbnlFVNjdZ&#pnJf*^_~G+*!{y!Lfg*oDr=7Lclij+R z?|qz#r<2Taf4zCLW>u9$?h`(4=s78dvAyqBFMm`Z_IKBmvip{tLc$+OEs6sjy(N4}7I| z`mEuf2cPv1q(5NpeZJ@CPi?8`cT#8da~urZebJ-X;W1C1dA;X5H|_I*tUup{Q=AxZ drltK1r(QAMUSX(v8<_AJJYD@<);T3K0RRy&aX0_~ literal 0 HcmV?d00001 diff --git a/assets/gardens/animals/caterpillar_face.png.import b/assets/gardens/animals/caterpillar_face.png.import new file mode 100644 index 00000000..f83f9ca2 --- /dev/null +++ b/assets/gardens/animals/caterpillar_face.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cnihbmks0piwi" +path="res://.godot/imported/caterpillar_face.png-d383b965d4555da185ab647f352d95f3.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/gardens/animals/caterpillar_face.png" +dest_files=["res://.godot/imported/caterpillar_face.png-d383b965d4555da185ab647f352d95f3.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/gardens/animals/crab_body.png b/assets/gardens/animals/crab_body.png new file mode 100644 index 0000000000000000000000000000000000000000..656f8af6e22b6679be331cf056e6b779f1e2b889 GIT binary patch literal 2253 zcmV;;2r~DHP)Oaf z1?avm(0%P?S69Y;fG7`8zy-Q)>Fx*D0u(iys4|QcapIVw6U34niCxUl9?|>~$r(`; ze}DjsrVfYv^UTNL%;AD<+bGBv%V`*)lnP2BmZtKovk839sWqQctCn z8UUX0uNHs`A;d^zbdI2uJ_K-pn`;OFhlCJ4uFXWEQc5)d|MmFS?+76Wu?^1&Tu=kR zmdC%>2_fA$b{CTr3P8nYd!16cozV6?Z~$*X0oI(wBB`i5KHE!RZ9{<%ybXO8u#2C= zgc4g+?unZLyKGTPt8wk;8D8!BIfR2A*M1UDtwz`^|?rL=kUI)L9#c(4LByrPu8a&2n>5Can({xJw4#xfsv6oRUwlY$L* zz`|*xcPORXizyu>2t%^{nSuxEElK7}0IG{T_%7=pRuSCy#E@wF$m#vc3ceRXeQ)ZL z>{^7714qPln<~^2Ft2sv^#+?x5oy{m?JW7pRJb_gL|pMb_BGa|OZqAw4T ztx)3;ZU+8FlppYG+QImfnFg2`T}tT=fS+QN6bZXHbUTkrsnJ1XS-wn_*&;!m@75zUz_uxniNn(`7l zM~OG=I{%0ro-WwQ7|xx-3%`rtCphl8H#(x|6|SBc=2Jzzd(>j0wcWt>E_c z2G~twgw=M5XA=UE#dLT{2&sd4W*zwu)6F5+1Odkby(Z_mvB0K=CZ1T3bdHjP*dYpI z2dtVsLOulr*m?Z|cCJx7h$R4jobYLxC#g*4o&-(Pwji`G!{HE1OG~PYp^Bd#KYskR z-EL3vn^@CAMbh$A9TDQknx>&#E?XxyYIPsvT;a7 zR9+AbtS#|mV`F1XPyo2NxPWcj==FLS4u@$JC6koPWrPT80eJ32gp!g zNp=e&Aah7lBs~mg=7uzB&GyeLGS<=nkSnSo(RLm%WEn0*ogUJbdCGpC+CdRn^1{O8 z2|Xesdq`84Y=2gfx&lzPr+O_6ns+R)@SwDLv9dk2iy}Xvn;Ikv3dr|V2Lt(CVlfE~ zC|H)MO4OnnX4URC6hzxp#eTbpxHKb=n5Oyd%a<=dLQ(ism8Uvv_xt^S-@SYHfy#qU zle4q4%j4tYH3%!mWgk=NQyNO?cC*=h@c#Y#x$sy)P=KwDH&kS*Q6?&1kzNCU48Ujc9VOE=ALUh8A3+^nq_MC#2qmKO^Z~bqG^S}jYBrlz zo|Z9&2}>KlOQ_xq(*t970SVf+35mtL>;GQzH#JY~HUq>IYi(!dltgTdfr zFc|zzSmHNxoSmIrHk-`{r>CcD0HO$6l~ooMo*H&XHUQ|YR%^N0Z1%o=`=+2s>Efz# zUx6hl2@}>Y1y5pBh^hzt&q;Zw19)NE_UhZWZ!c#_Sf4hu&eIA73M;F_q(W4`Sf`l7 zuk+UUv9*&z^CXh3)lv|2a81ISJXVq0KWz?T5pw!Lq@BE{?l0Sv@j9;Ffp8m7h zY-Yk^+wJzbX_}7!{0hL&2+xl^*2Cq(?t!J**&~EVnbxBEDa{xG*)^R^(+1e^U~^$% z;qu9oCu{fa-BVXU0YOlaKY_nP9R5R;-=>kpY!arumd2~2;8f8EVD0TDFx@uRM^J#j z_<;~ofq$E+{QUvb7FBb7cc%`oivM(kRhi2$Kv017+ADx>n+Zr-gBrxNMKy%K-JK}U z*Lm8uz4q?iJAD59S$g5VfB)X>cDw%z+3mXb?jx*`a`Sn7dM*szlrhzgQV^6<1O77*o$TJgP2T-9 zVyVYq%OPqI<`W68V)1)0@jOefKby9v1`$P2fb~2pV9NrNel)P!qaz-WN4|9Ud#oPy zq*Rb)QN3^rs*DK2W`-<_>Yki7H9;K$gw0fH@hpp~gGF8r!P>0)R7=AVgxv=#+rF&G bP+a~GuQh^Ny0-D~00000NkvXXu0mjf;&(k> literal 0 HcmV?d00001 diff --git a/assets/gardens/animals/crab_body.png.import b/assets/gardens/animals/crab_body.png.import new file mode 100644 index 00000000..90ea3770 --- /dev/null +++ b/assets/gardens/animals/crab_body.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b2e61oot7ht35" +path="res://.godot/imported/crab_body.png-d5ff5fcdad64e46336ef16b4a3fb00c7.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/gardens/animals/crab_body.png" +dest_files=["res://.godot/imported/crab_body.png-d5ff5fcdad64e46336ef16b4a3fb00c7.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/gardens/animals/crab_face.png b/assets/gardens/animals/crab_face.png new file mode 100644 index 0000000000000000000000000000000000000000..cdc629c565471b42cbc77170e48202a5ff3a7727 GIT binary patch literal 1005 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 literal 0 HcmV?d00001 diff --git a/assets/lesson_screen/branches.png.import b/assets/gardens/animals/frog_body.png.import similarity index 73% rename from assets/lesson_screen/branches.png.import rename to assets/gardens/animals/frog_body.png.import index 6f76bd84..fb0dab24 100644 --- a/assets/lesson_screen/branches.png.import +++ b/assets/gardens/animals/frog_body.png.import @@ -2,16 +2,16 @@ importer="texture" type="CompressedTexture2D" -uid="uid://cffuqacgb1jra" -path="res://.godot/imported/branches.png-59c95c0c624c68eb2181d2b0fe6a5080.ctex" +uid="uid://oagcnmxs0xx1" +path="res://.godot/imported/frog_body.png-ac6c4a085cb17c6bc169773a464b64b6.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://assets/lesson_screen/branches.png" -dest_files=["res://.godot/imported/branches.png-59c95c0c624c68eb2181d2b0fe6a5080.ctex"] +source_file="res://assets/gardens/animals/frog_body.png" +dest_files=["res://.godot/imported/frog_body.png-ac6c4a085cb17c6bc169773a464b64b6.ctex"] [params] diff --git a/assets/gardens/animals/frog_face.png b/assets/gardens/animals/frog_face.png new file mode 100644 index 0000000000000000000000000000000000000000..4c249c47781a717d1c12c7f290c112374d676bef GIT binary patch literal 1707 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 MPgg&ebxsLQ0BTzNpa1{> literal 0 HcmV?d00001 diff --git a/assets/gardens/animals/jellyfish_face.png.import b/assets/gardens/animals/jellyfish_face.png.import new file mode 100644 index 00000000..9f3ecb32 --- /dev/null +++ b/assets/gardens/animals/jellyfish_face.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dppmdv8u3cwl1" +path="res://.godot/imported/jellyfish_face.png-5c0a129760def337aa729a02e1028153.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/gardens/animals/jellyfish_face.png" +dest_files=["res://.godot/imported/jellyfish_face.png-5c0a129760def337aa729a02e1028153.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/gardens/animals/monkey_body.png b/assets/gardens/animals/monkey_body.png new file mode 100644 index 0000000000000000000000000000000000000000..bc059f3515380a6af93d58df90653db6b99a8888 GIT binary patch literal 3817 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 literal 0 HcmV?d00001 diff --git a/assets/gardens/animals/monkey_body.png.import b/assets/gardens/animals/monkey_body.png.import new file mode 100644 index 00000000..62f624ab --- /dev/null +++ b/assets/gardens/animals/monkey_body.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dr12efhuotfgt" +path="res://.godot/imported/monkey_body.png-b049cc78b0f6869945a1c7d6a1301ad4.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/gardens/animals/monkey_body.png" +dest_files=["res://.godot/imported/monkey_body.png-b049cc78b0f6869945a1c7d6a1301ad4.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/gardens/animals/monkey_face.png b/assets/gardens/animals/monkey_face.png new file mode 100644 index 0000000000000000000000000000000000000000..769b99080b555569da80d3d7d7b1c65048f06dd8 GIT binary patch literal 1080 zcmeAS@N?(olHy`uVBq!ia0vp^r9hm*!3HFE^wl>3Db50q$YKTtZXpn6ymYtj4+8`9 zD^C~4kcv5PZ}0b3u9P|UF}*+g@lW}luM!8H4BR4u)UI-IZ4+C@f9&72xX%9$2Xs}r z;xcv4+*E07E$&_-=JV>b&%cKBZi~fk<~el-QsnIQe{7QaG?DZD+<3J*CCxG$oKVGQ?3VbOOc93-bf>5A^6TMX+9AF0g;7!*C^ShwsGB-}7c2RCx5CA&>D- zyW@@Z5=W#`MGsum1VXIvyeOD2$ zH{9*DDSTx}+}X6vk#X_ylT+Tmv<%#Ttn=FP8UHR8vK`3Po9?{*cI)e1A8O^_mPs>A z@K7nJtK+*~x}Wie^sHEx4*@!2|99=#~x4gN1dRrRz*Q&XFk2hS*XxS_-F8(mbXy%gVl`1<; z+1Ho85xrjgYP#1_rt75>JyZ^{o12*(TEF{l-iGICZE4$AUDb-Ye)QL`svi%&eJlG> zy8piW)~MQiGqFcfq6`my|9fAv-^Av6*47IzOD??se)#yVyYE&%FR_wUSk`_&!aaBU zZ3`P4m(4eioIT6ibySI~l}SuYEY5DNxy|-HdwA}D57ZI6m}3S+ff^zOMMXmA?EYH6 zdwa2_y_jo5hXAO@~t- zOI?gJ1wLVInRfm;P=8w)d);d9Z<_mRR@0B7ubv_&e P76lBRu6{1-oD!M00009a7bBm000XT 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 literal 0 HcmV?d00001 diff --git a/assets/gardens/animals/parakeet_face.png.import b/assets/gardens/animals/parakeet_face.png.import new file mode 100644 index 00000000..048af348 --- /dev/null +++ b/assets/gardens/animals/parakeet_face.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://l52tfb7fdrpt" +path="res://.godot/imported/parakeet_face.png-94d7bc7370d8ae647ca7d22a41893e3f.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/gardens/animals/parakeet_face.png" +dest_files=["res://.godot/imported/parakeet_face.png-94d7bc7370d8ae647ca7d22a41893e3f.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/gardens/animals/penguin_body.png b/assets/gardens/animals/penguin_body.png new file mode 100644 index 0000000000000000000000000000000000000000..1d7fda19e656e0c46fb799da847ad75de619f4d7 GIT binary patch literal 2758 zcmb_e`8(8$7ygVdu4V?4Jq9Bp!XQM;m9b=vL5i46VuqF}*#^TTOO_Gc>`WOE2FZGD z5jT@PAQWRa960vS%;_-zK!pBn(AV+M0{{RAnj0HB1ZJ&d_xg;Q$uOGu6rjW8nU{25 zvrhyVVHVW#r(wg~C8$0N+h7Ch6^^$F9{XgYk$w&#c)4T)u%Crj?+G#7PRK(nN1rMP z{=*kBaD?BppUr@pjT>wZvWCW+QtB+R61Sxg5x&!5n9=G>B3_WY7DaIueEPg!{`eAW zAPJfut|lpWooWPrNmRKS#+S_^-2#IeDkRS0zyFU-fUf()yU^!pjO{)fFsqcom zM_*#9F6vXG$0K?($DBqz(fuvzK-QX8I1f|RTT;B;7H41hOqa~_$b!wc6yR?<{1C|_ zV*V!#brtZPZaT*kyBAwf^7{^R`x>^D`~7=b+xKCUm&YuY*dkL9vJClqzBOY2uZM-R5)%@_Kr|A~hYS8DM_UlW}N^eDg3 zmD0)~ykC+v6)criGPW0M?L#9!4`c?ZtipnIW^tpk;rs{272bgE)Ko*_;n<{xLZ1jIx2kQ9P<08{&1J$ zCl_Pi?l|N!El{Amq)yvY#Pp6Z$EiW!t)P0k-t0n&%PX|Xbl$Abi4>0)nx#otQyaMG|A=14fzzaWB@n4X#fQRilrb=SU~RWU6k|9XmZ zEndh=@xT%Yf+-$q2kIYxk@OOtw%>WtsnM_fzP>&#J3D(I$Uh+9c$8e*j3%eT5jWn( zs_Vsc=;Rvn)uP%2USK8gRn8FPx)#UQG`G*0%DkuBhu8jAqy#mBMjQQITHoUpHlu0H zD6yt&)Ti^1)}}v=hI1t`q~Y+_j&zTrx!KOtyAUvtXLoFWe?NUO{YfV~3U@`hU(kYE z$NFr535Qtmmzwnr+MJL6}I|9Qa`{|oePH5q-Z zI<2kod$K;Jv)m_gOgqJO{u-u1z1#EbQjTK6d^yRb5iZ3nl23R+qWvu1j zd*7pOF0T?7*P!~(SAnKx=cXrxHS0otv)S#_Cy{3Y(#6G}_zS=I149D`*I|F{O&pzp&}F38Oenos;v*bT0Yka{4N&WT~!9^~{hk#0jsP$w?)3 zF2|9c7lrBFc=-6Sy!EhkqMZXm=-b9cj(ZOYLmy15%&m}!dSaUUeltJaO3^YCoMa{* zic7*GUPX0Pn=cgt^$JbgzCNYGn#PqpmSH1?c5xjl8}cBQty_)|>N8&-#B(k# zvWzGihuNQK+k)TFLRDHl2>TcyZ7dk6G<3nqp)T!h8+9a7>@UU08Z=QzXLZ?gi7eOK#d5A*PkOVNG~LQ2-IKsW~CgQxy}DNZZ1HJs~%0n0tlZY_XhE z=Pn`n0l6Lrw^e3)+Rz;uZf3xjC z9>>g@D4$fJB%@M4S`N?~lsd|Lf2m?6#A-*<-i69HzV#dz&QjtbXy<1ukpC($Y3cSo zpRCR;KBil5(;n{-=>IabH<)I%Pul-*OFL*&IsFCL2E9+T$+A-X3MIf9%07ETfgr7X zwn)_%p~{+?n#$$RlsTf!e%@R}r&hz5G3EN}9_et`A+;bw2xnhXE`1Ibv2r@b`eB46 zhz@#5QcO)U$;gW+WV6#i;K%u~nMwp7C;hFLI_KFh57*>5F^|+v zkF@+i`5ct|Af1^`FfqzPxgVy_H*4KqEsc4=Bq z;D7guxZKktkkS3q0Mi(>g;Z=Sj?tzG@IHME7`zL{)Q_7sV%~aQfpPB~{tl*M*7z>Z ztuSj)Mo5Ht=6MNdPoj}6qN7_Zq~T6NRybE*V7-9^Gy>}Gd0c(bO=BL|x$!2R$-Jp@ zER^vmHsR*YNo`ymbcz<d7szA6ZK<23U>d4C51!M6>^1f1)lPTN{1}b!;l&rp1D2Capd~#UuIL=&~+gD Yr`pm^yUs5s&SMIgn_M+6MY)Cl7m&av`~Uy| literal 0 HcmV?d00001 diff --git a/assets/gardens/animals/penguin_body.png.import b/assets/gardens/animals/penguin_body.png.import new file mode 100644 index 00000000..76a24047 --- /dev/null +++ b/assets/gardens/animals/penguin_body.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://noekve4gjudr" +path="res://.godot/imported/penguin_body.png-72481c56dc380b551e94e0f413ef0cf8.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/gardens/animals/penguin_body.png" +dest_files=["res://.godot/imported/penguin_body.png-72481c56dc380b551e94e0f413ef0cf8.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/gardens/animals/penguin_face.png b/assets/gardens/animals/penguin_face.png new file mode 100644 index 0000000000000000000000000000000000000000..ad9453a220a358f8f33c78290e83d5c426385994 GIT binary patch literal 1145 zcmeAS@N?(olHy`uVBq!ia0vp^r9eD^gAGWU^{Vs&Db50q$YKTtZXpn6ymYtj4+8^> zwx^3@NX4ADclKv5E@e3W@q1^nH2e1F29?|VUMehUE@)>Iw2E06`DEI+Kg??qc8M;& zdui!hmG0*cBz9_)OiGYx@w=qMu2mClIH$S$t>qnsD~ji3Gk+=bs!f0X^UiZq)BDdk z@3-%(ocH{X_L#k9-f*%w#IaB7L?El>Dg}4ZCo7s{LMJTdDx!|yUc1-K zJ31};K0EN9PVYKd(E@u;x`zIP6lYVY_RU#x$I%st^d~EGRM0e*k{P!Dq+%T z6X;X7xi9tM!zADPZ31Cxme;qWJp8nq`%Ji&=(q3RXU?8oZD%(>XZDOIT^|Gz($m|$ zmKyE&87E}(HAvR9@3BmQdY96xuU6dL+&Q_qyzh$g4+XDd2+r-g>^1AxZ{EAt_Uz9hhO=ptgI2N}IC$`2>)XufuZ&Gw3OxSb^W1zh zrLuD7<;%fRy=;LZjDPGNYVyzjAFwuTW!P$$K$pcAcWkgdyJ#sBa z&}j*n{h_Aa;p3#A%QhLzZoA^n+VQwT{6|Jcg?`Hh!&kfCIvKLxVHJBhKXdM+rx^*C#=LbZWUVMUt0&*jH9K@=oW@`O#Z6b^jyaxbO1bi6)9-5?cc0yE zP14=@+-u^lKijyEy8cRkG1qWk+2ZP)X(wEKo62_l==-tk+bQ?E6IZ{~3Fx|&_<*PO z^WO5Ee;@pt`rH1s?Zc1i(T5MW0-ahRb^N>0(!Zt;EzZRj<=gK#FTHg8`g^-s62EiL z`#O)O@7c@$k@}aXhDS*c_wV1lLrcY5-mUzQwDF6m^ZPva53kI*CvErC{&N3k z+_ybdPW4OgFhyP8%Y9Di|T|nRhwM??&VT@RYP}*&O_>^V_M`5^3D9u Zm@ogU#Gs|ArVor>faFqB0#AAz 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 XNg_nyIJXCAp@Otvx@wgwmSO(~TETf( literal 0 HcmV?d00001 diff --git a/assets/gardens/animals/turtle_body.png.import b/assets/gardens/animals/turtle_body.png.import new file mode 100644 index 00000000..03587e45 --- /dev/null +++ b/assets/gardens/animals/turtle_body.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b7rqldqdft30a" +path="res://.godot/imported/turtle_body.png-0f50da4036c6750167a288e6f006a813.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/gardens/animals/turtle_body.png" +dest_files=["res://.godot/imported/turtle_body.png-0f50da4036c6750167a288e6f006a813.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/gardens/animals/turtle_face.png b/assets/gardens/animals/turtle_face.png new file mode 100644 index 0000000000000000000000000000000000000000..95f4e78926e48162053fda24dcce42b49e8f00f3 GIT binary patch literal 917 zcmeAS@N?(olHy`uVBq!ia0vp^r9eE7gAGXXw7dQVQk(@Ik;M!Q+(IDCc`Qm5#82AuC-wJnmG{f%{IxteJARvNy2MWVr*GH;uit*Z zTt$EVx^91c)HJ47AJbCi$oz~XYkNam=GyVTBA78pBXtw93 zy?f`ztvBB{X_CtG=g&PqDII=)WdBzy&u`zpU3&d>)22;Dn;(DpP_SoC%Dd*(kDG(+ zJ@xeTHtpYEpYFc+qJ;i_UxV)^o_hNF$G3ly{`~oKx!v!Ts~=CTn)Rf5`|Z85hHuNP zy}i9pepr|`Y4UylqCLBI%_`enyLscqj3u|~7&m<_FrP7a My85}Sb4q9e0EU{5mjD0& literal 0 HcmV?d00001 diff --git a/assets/gardens/animals/turtle_face.png.import b/assets/gardens/animals/turtle_face.png.import new file mode 100644 index 00000000..7fcd487d --- /dev/null +++ b/assets/gardens/animals/turtle_face.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://nu4kpbywwpgn" +path="res://.godot/imported/turtle_face.png-e570d8d931a8a1c99178dba731ef0fdb.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/gardens/animals/turtle_face.png" +dest_files=["res://.godot/imported/turtle_face.png-e570d8d931a8a1c99178dba731ef0fdb.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/gardens/buttons/movie_icon.png b/assets/gardens/buttons/movie_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..52bfb441f69e504ad74182b95956f74a33ad117a GIT binary patch literal 2388 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 S^Mz(j0*4PBbGhlvVE-GAWlNv{ literal 0 HcmV?d00001 diff --git a/assets/gardens/buttons/movie_icon.png.import b/assets/gardens/buttons/movie_icon.png.import new file mode 100644 index 00000000..fb379f4b --- /dev/null +++ b/assets/gardens/buttons/movie_icon.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c1ml42sp1vqga" +path="res://.godot/imported/movie_icon.png-3b93e2f2cfeeb8eec0332bbcd7cda143.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/gardens/buttons/movie_icon.png" +dest_files=["res://.godot/imported/movie_icon.png-3b93e2f2cfeeb8eec0332bbcd7cda143.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/assets/gardens/animals/ant.png b/assets/gardens/victory_assets/animals/ant.png similarity index 100% rename from assets/gardens/animals/ant.png rename to assets/gardens/victory_assets/animals/ant.png diff --git a/assets/gardens/animals/ant.png.import b/assets/gardens/victory_assets/animals/ant.png.import similarity index 76% rename from assets/gardens/animals/ant.png.import rename to assets/gardens/victory_assets/animals/ant.png.import index 7e989d6f..b6c20ad1 100644 --- a/assets/gardens/animals/ant.png.import +++ b/assets/gardens/victory_assets/animals/ant.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://cn0brlkbklxuu" -path="res://.godot/imported/ant.png-a1470874074de10588ffd54aa0bc8a95.ctex" +path="res://.godot/imported/ant.png-d3fdfb32e41ad1bbed889f9d21d54167.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://assets/gardens/animals/ant.png" -dest_files=["res://.godot/imported/ant.png-a1470874074de10588ffd54aa0bc8a95.ctex"] +source_file="res://assets/gardens/victory_assets/animals/ant.png" +dest_files=["res://.godot/imported/ant.png-d3fdfb32e41ad1bbed889f9d21d54167.ctex"] [params] diff --git a/assets/gardens/animals/caterpillar.png b/assets/gardens/victory_assets/animals/caterpillar.png similarity index 100% rename from assets/gardens/animals/caterpillar.png rename to assets/gardens/victory_assets/animals/caterpillar.png diff --git a/assets/gardens/animals/caterpillar.png.import b/assets/gardens/victory_assets/animals/caterpillar.png.import similarity index 74% rename from assets/gardens/animals/caterpillar.png.import rename to assets/gardens/victory_assets/animals/caterpillar.png.import index 03a5ca20..60f51eb1 100644 --- a/assets/gardens/animals/caterpillar.png.import +++ b/assets/gardens/victory_assets/animals/caterpillar.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://ixkyfsxu07qx" -path="res://.godot/imported/caterpillar.png-03f6801670b49c8e0cea7190046ee5e8.ctex" +path="res://.godot/imported/caterpillar.png-606aeb5ed693d22c4a80f41968e1d449.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://assets/gardens/animals/caterpillar.png" -dest_files=["res://.godot/imported/caterpillar.png-03f6801670b49c8e0cea7190046ee5e8.ctex"] +source_file="res://assets/gardens/victory_assets/animals/caterpillar.png" +dest_files=["res://.godot/imported/caterpillar.png-606aeb5ed693d22c4a80f41968e1d449.ctex"] [params] diff --git a/assets/gardens/animals/crab.png b/assets/gardens/victory_assets/animals/crab.png similarity index 100% rename from assets/gardens/animals/crab.png rename to assets/gardens/victory_assets/animals/crab.png diff --git a/assets/gardens/animals/crab.png.import b/assets/gardens/victory_assets/animals/crab.png.import similarity index 76% rename from assets/gardens/animals/crab.png.import rename to assets/gardens/victory_assets/animals/crab.png.import index 0594a3a5..05289d22 100644 --- a/assets/gardens/animals/crab.png.import +++ b/assets/gardens/victory_assets/animals/crab.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://d3vt2qpngkkjs" -path="res://.godot/imported/crab.png-0a38ba7f13130791be164b6db99b3bb7.ctex" +path="res://.godot/imported/crab.png-6b9401bccc35a6e58de3bee1aa707608.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://assets/gardens/animals/crab.png" -dest_files=["res://.godot/imported/crab.png-0a38ba7f13130791be164b6db99b3bb7.ctex"] +source_file="res://assets/gardens/victory_assets/animals/crab.png" +dest_files=["res://.godot/imported/crab.png-6b9401bccc35a6e58de3bee1aa707608.ctex"] [params] diff --git a/assets/gardens/animals/frog.png b/assets/gardens/victory_assets/animals/frog.png similarity index 100% rename from assets/gardens/animals/frog.png rename to assets/gardens/victory_assets/animals/frog.png diff --git a/assets/gardens/animals/frog.png.import b/assets/gardens/victory_assets/animals/frog.png.import similarity index 76% rename from assets/gardens/animals/frog.png.import rename to assets/gardens/victory_assets/animals/frog.png.import index 3515a96d..f5ebc738 100644 --- a/assets/gardens/animals/frog.png.import +++ b/assets/gardens/victory_assets/animals/frog.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://yo3o4m6o7a0" -path="res://.godot/imported/frog.png-dbd41735c012909d9c488ecbaa029907.ctex" +path="res://.godot/imported/frog.png-50e8b0bcbd5c11e9fc83314d35821855.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://assets/gardens/animals/frog.png" -dest_files=["res://.godot/imported/frog.png-dbd41735c012909d9c488ecbaa029907.ctex"] +source_file="res://assets/gardens/victory_assets/animals/frog.png" +dest_files=["res://.godot/imported/frog.png-50e8b0bcbd5c11e9fc83314d35821855.ctex"] [params] diff --git a/assets/gardens/animals/jellyfish.png b/assets/gardens/victory_assets/animals/jellyfish.png similarity index 100% rename from assets/gardens/animals/jellyfish.png rename to assets/gardens/victory_assets/animals/jellyfish.png diff --git a/assets/gardens/animals/jellyfish.png.import b/assets/gardens/victory_assets/animals/jellyfish.png.import similarity index 75% rename from assets/gardens/animals/jellyfish.png.import rename to assets/gardens/victory_assets/animals/jellyfish.png.import index ec121f88..1a2acb72 100644 --- a/assets/gardens/animals/jellyfish.png.import +++ b/assets/gardens/victory_assets/animals/jellyfish.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://bfqwlmmliem8f" -path="res://.godot/imported/jellyfish.png-354519775b79ac38eb7fb5b2e6d6f3a9.ctex" +path="res://.godot/imported/jellyfish.png-fef4023badc953c6e37065baefef9dda.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://assets/gardens/animals/jellyfish.png" -dest_files=["res://.godot/imported/jellyfish.png-354519775b79ac38eb7fb5b2e6d6f3a9.ctex"] +source_file="res://assets/gardens/victory_assets/animals/jellyfish.png" +dest_files=["res://.godot/imported/jellyfish.png-fef4023badc953c6e37065baefef9dda.ctex"] [params] diff --git a/assets/gardens/animals/khaki_turtle.png b/assets/gardens/victory_assets/animals/khaki_turtle.png similarity index 100% rename from assets/gardens/animals/khaki_turtle.png rename to assets/gardens/victory_assets/animals/khaki_turtle.png diff --git a/assets/gardens/animals/khaki_turtle.png.import b/assets/gardens/victory_assets/animals/khaki_turtle.png.import similarity index 74% rename from assets/gardens/animals/khaki_turtle.png.import rename to assets/gardens/victory_assets/animals/khaki_turtle.png.import index 73273f66..681d5646 100644 --- a/assets/gardens/animals/khaki_turtle.png.import +++ b/assets/gardens/victory_assets/animals/khaki_turtle.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://6bosyi1wv8vu" -path="res://.godot/imported/khaki_turtle.png-365be2d89ffda872bfafc7a90e7d6e36.ctex" +path="res://.godot/imported/khaki_turtle.png-c9b0e5c5db5d16603c89e5aede131fd5.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://assets/gardens/animals/khaki_turtle.png" -dest_files=["res://.godot/imported/khaki_turtle.png-365be2d89ffda872bfafc7a90e7d6e36.ctex"] +source_file="res://assets/gardens/victory_assets/animals/khaki_turtle.png" +dest_files=["res://.godot/imported/khaki_turtle.png-c9b0e5c5db5d16603c89e5aede131fd5.ctex"] [params] diff --git a/assets/gardens/animals/monkey.png b/assets/gardens/victory_assets/animals/monkey.png similarity index 100% rename from assets/gardens/animals/monkey.png rename to assets/gardens/victory_assets/animals/monkey.png diff --git a/assets/gardens/animals/monkey.png.import b/assets/gardens/victory_assets/animals/monkey.png.import similarity index 75% rename from assets/gardens/animals/monkey.png.import rename to assets/gardens/victory_assets/animals/monkey.png.import index 703e3d6b..bfddf5ff 100644 --- a/assets/gardens/animals/monkey.png.import +++ b/assets/gardens/victory_assets/animals/monkey.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://kygm5ieixgne" -path="res://.godot/imported/monkey.png-723d94951cc580ff3e0ae5233294daa2.ctex" +path="res://.godot/imported/monkey.png-984367ba67c6aee1976b0b6e125be90d.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://assets/gardens/animals/monkey.png" -dest_files=["res://.godot/imported/monkey.png-723d94951cc580ff3e0ae5233294daa2.ctex"] +source_file="res://assets/gardens/victory_assets/animals/monkey.png" +dest_files=["res://.godot/imported/monkey.png-984367ba67c6aee1976b0b6e125be90d.ctex"] [params] diff --git a/assets/gardens/animals/penguin.png b/assets/gardens/victory_assets/animals/penguin.png similarity index 100% rename from assets/gardens/animals/penguin.png rename to assets/gardens/victory_assets/animals/penguin.png diff --git a/assets/gardens/animals/penguin.png.import b/assets/gardens/victory_assets/animals/penguin.png.import similarity index 75% rename from assets/gardens/animals/penguin.png.import rename to assets/gardens/victory_assets/animals/penguin.png.import index 2947a8da..c64d62f4 100644 --- a/assets/gardens/animals/penguin.png.import +++ b/assets/gardens/victory_assets/animals/penguin.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://cy1nrnl520goj" -path="res://.godot/imported/penguin.png-7b214b7f40894092c07f326efebcbe8d.ctex" +path="res://.godot/imported/penguin.png-a3d9b15f5a490402f4093a86cd9fc481.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://assets/gardens/animals/penguin.png" -dest_files=["res://.godot/imported/penguin.png-7b214b7f40894092c07f326efebcbe8d.ctex"] +source_file="res://assets/gardens/victory_assets/animals/penguin.png" +dest_files=["res://.godot/imported/penguin.png-a3d9b15f5a490402f4093a86cd9fc481.ctex"] [params] diff --git a/assets/gardens/animals/pink_jellyfish.png b/assets/gardens/victory_assets/animals/pink_jellyfish.png similarity index 100% rename from assets/gardens/animals/pink_jellyfish.png rename to assets/gardens/victory_assets/animals/pink_jellyfish.png diff --git a/assets/gardens/animals/pink_jellyfish.png.import b/assets/gardens/victory_assets/animals/pink_jellyfish.png.import similarity index 73% rename from assets/gardens/animals/pink_jellyfish.png.import rename to assets/gardens/victory_assets/animals/pink_jellyfish.png.import index 1e8c7730..a61f69ae 100644 --- a/assets/gardens/animals/pink_jellyfish.png.import +++ b/assets/gardens/victory_assets/animals/pink_jellyfish.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://dcuobvoav863b" -path="res://.godot/imported/pink_jellyfish.png-47ea6885f7ba9be8ff5f438c055bc4a1.ctex" +path="res://.godot/imported/pink_jellyfish.png-99508b215ac7a943286e22be8a93bcd0.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://assets/gardens/animals/pink_jellyfish.png" -dest_files=["res://.godot/imported/pink_jellyfish.png-47ea6885f7ba9be8ff5f438c055bc4a1.ctex"] +source_file="res://assets/gardens/victory_assets/animals/pink_jellyfish.png" +dest_files=["res://.godot/imported/pink_jellyfish.png-99508b215ac7a943286e22be8a93bcd0.ctex"] [params] diff --git a/assets/gardens/animals/red_parakeet.png b/assets/gardens/victory_assets/animals/red_parakeet.png similarity index 100% rename from assets/gardens/animals/red_parakeet.png rename to assets/gardens/victory_assets/animals/red_parakeet.png diff --git a/assets/gardens/animals/red_parakeet.png.import b/assets/gardens/victory_assets/animals/red_parakeet.png.import similarity index 74% rename from assets/gardens/animals/red_parakeet.png.import rename to assets/gardens/victory_assets/animals/red_parakeet.png.import index c364e158..8d6ccabe 100644 --- a/assets/gardens/animals/red_parakeet.png.import +++ b/assets/gardens/victory_assets/animals/red_parakeet.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://da7ppeamjqjpw" -path="res://.godot/imported/red_parakeet.png-546f9c816968cb8f1bb25596ab769016.ctex" +path="res://.godot/imported/red_parakeet.png-da45ba4c38e1e0997bf4da3dc9da41b8.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://assets/gardens/animals/red_parakeet.png" -dest_files=["res://.godot/imported/red_parakeet.png-546f9c816968cb8f1bb25596ab769016.ctex"] +source_file="res://assets/gardens/victory_assets/animals/red_parakeet.png" +dest_files=["res://.godot/imported/red_parakeet.png-da45ba4c38e1e0997bf4da3dc9da41b8.ctex"] [params] diff --git a/assets/gardens/animals/turtle.png b/assets/gardens/victory_assets/animals/turtle.png similarity index 100% rename from assets/gardens/animals/turtle.png rename to assets/gardens/victory_assets/animals/turtle.png diff --git a/assets/gardens/animals/turtle.png.import b/assets/gardens/victory_assets/animals/turtle.png.import similarity index 75% rename from assets/gardens/animals/turtle.png.import rename to assets/gardens/victory_assets/animals/turtle.png.import index 3336bf5b..a4fabc72 100644 --- a/assets/gardens/animals/turtle.png.import +++ b/assets/gardens/victory_assets/animals/turtle.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://bsw6v8ix7bb2s" -path="res://.godot/imported/turtle.png-b25459e1a6a7c121b59fc65afcb3f82e.ctex" +path="res://.godot/imported/turtle.png-c250d2a66dd72bd5fa41354b999b1000.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://assets/gardens/animals/turtle.png" -dest_files=["res://.godot/imported/turtle.png-b25459e1a6a7c121b59fc65afcb3f82e.ctex"] +source_file="res://assets/gardens/victory_assets/animals/turtle.png" +dest_files=["res://.godot/imported/turtle.png-c250d2a66dd72bd5fa41354b999b1000.ctex"] [params] diff --git a/assets/gardens/animals/yellow_parakeet.png b/assets/gardens/victory_assets/animals/yellow_parakeet.png similarity index 100% rename from assets/gardens/animals/yellow_parakeet.png rename to assets/gardens/victory_assets/animals/yellow_parakeet.png diff --git a/assets/gardens/animals/yellow_parakeet.png.import b/assets/gardens/victory_assets/animals/yellow_parakeet.png.import similarity index 73% rename from assets/gardens/animals/yellow_parakeet.png.import rename to assets/gardens/victory_assets/animals/yellow_parakeet.png.import index bc179af0..834d3466 100644 --- a/assets/gardens/animals/yellow_parakeet.png.import +++ b/assets/gardens/victory_assets/animals/yellow_parakeet.png.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://bd5pxoufamqy" -path="res://.godot/imported/yellow_parakeet.png-ce114f4bc0be41f81a9d2e24bceb2fcf.ctex" +path="res://.godot/imported/yellow_parakeet.png-3b1b7946f714148f55147e3efdf195ad.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://assets/gardens/animals/yellow_parakeet.png" -dest_files=["res://.godot/imported/yellow_parakeet.png-ce114f4bc0be41f81a9d2e24bceb2fcf.ctex"] +source_file="res://assets/gardens/victory_assets/animals/yellow_parakeet.png" +dest_files=["res://.godot/imported/yellow_parakeet.png-3b1b7946f714148f55147e3efdf195ad.ctex"] [params] diff --git a/assets/lesson_screen/bottom.png b/assets/lesson_screen/bottom.png deleted file mode 100644 index 5ff5cd66f5a1ec004dd321fc68404829671551b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11678 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 I_3VWI2gQx3tpET3 diff --git a/assets/lesson_screen/branches.png b/assets/lesson_screen/branches.png deleted file mode 100644 index 7b4d37b776b54685bc27b1825888649fb49151f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40124 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