diff --git a/.editorconfig b/.editorconfig index 9eeae51..f28239b 100644 --- a/.editorconfig +++ b/.editorconfig @@ -2,23 +2,3 @@ root = true [*] charset = utf-8 -end_of_line = lf -insert_final_newline = true -trim_trailing_whitespace = true - -# GDScript требует табов для отступов. -[*.{gd,gdshader}] -indent_style = tab -indent_size = 4 - -# Сцены и ресурсы Godot редактирует сам — не трогаем пробелы. -[*.{tscn,tres,godot,import,uid}] -trim_trailing_whitespace = false -insert_final_newline = false - -[*.{md,yml,yaml,json}] -indent_style = space -indent_size = 2 - -[*.md] -trim_trailing_whitespace = false diff --git a/.gitignore b/.gitignore index 7d3a2d6..042b32b 100644 --- a/.gitignore +++ b/.gitignore @@ -22,6 +22,16 @@ data_*/ *.csproj.user *.sln.DotSettings.user +# --- Сырьё ассетов ---------------------------------------------------------- +# Скачанные наборы целиком: 130 МБ, из них нужны только GLB. Используемое +# переносится в assets/kits/, а это остаётся локальным складом. +kits/ + +# --- Сырьё генерации -------------------------------------------------------- +# Черновики из нейросети: тяжёлые, их много, в сборку не идут. +ai-input/* +!ai-input/README.md + # --- Локальные настройки инструментов --------------------------------------- .claude/settings.local.json .vscode/ diff --git a/CLAUDE.md b/CLAUDE.md deleted file mode 100644 index 15b1b58..0000000 --- a/CLAUDE.md +++ /dev/null @@ -1,151 +0,0 @@ -# CLAUDE.md - -Заметки для агентов, работающих с этим репозиторием. - -## Что это за проект - -Двумерная игра с видом сбоку на Godot 4.7. Референс — Fallout Shelter: разрез убежища, -комнаты в сетке, жители. **Игра полностью 2D.** Новые игровые сцены — на `Node2D`/`Control`; -3D-узлам в проекте места нет. Рендерер при этом Forward+ — так решил владелец проекта, -не переключайте его без явной просьбы. - -## Работа через MCP, а не через файлы - -В проекте включён плагин `addons/godot_ai`, редактор Godot обычно запущен и подключён. -Сцены и ресурсы правьте инструментами MCP (`scene_manage`, `ui_manage`, `node_create`, -`theme_manage`, `resource_manage`), а не редактированием `.tscn` руками — иначе открытый -редактор перезапишет изменения при сохранении. - -Скрипты — через `script_create` / `script_patch`: они возвращают диагностику парсера сразу. - -Проверять результат — `project_run` + `editor_screenshot(source="game")`. Ввод в запущенную -игру шлётся через `game_manage(op="input_key")`; **`input_action` не двигает фокус Control-ов**, -для навигации по UI нужны настоящие события клавиш. - -### Известные особенности - -- `node_set_property` не принимает целочисленный `0` — используйте `batch_execute` - с командой `set_property`. -- Правка скрипта, который зарегистрирован автозагрузкой, даёт в ответе - `GDScript reload failed with error code 43`. Это неудачная горячая перезагрузка в редакторе, - а не ошибка разбора: проверяйте `logs_read(source="editor")`, игра при этом запускается чисто. -- `project_manage(op="settings_set")` отказывается менять `application/run/main_scene`. -- Большие `ui_manage(op="build_layout")` иногда не доезжают целиком — стройте дерево - несколькими вызовами поменьше. -- Запуск из редактора отдаёт встроенное окно: `Embedded window can't be resized` в логе — норма. - -## Конвенции кода - -- Отступы — табы (см. `.editorconfig`), статическая типизация везде, где возможно. -- Комментарии и весь UI-текст — по-русски; имена узлов, файлов, методов, сигналов — по-английски. -- Комментарий объясняет **почему**, а не пересказывает код. -- Приватные члены — с подчёркиванием: `_card`, `_focus_first_button()`. -- Документирующие комментарии `##` — на классах, сигналах и неочевидных методах. - -## Архитектура UI - -- Единая тема `themes/main_menu.theme.tres` на корне каждого экрана. Цвета в узлах не хардкодим. -- Экран = сцена со своим скриптом, наружу торчат `open()` / `close()` и сигнал `closed`. -- Оверлеи центрируются `CenterContainer`, а **не** пресетом `center`: пресет ставит левый - верхний угол карточки в центр экрана. Та же ловушка у `bottom_wide` — он прижимает к нижнему - краю *верх* панели, и она уезжает за экран; для нижней панели используйте `MarginContainer` - во весь экран + `HBoxContainer` с `size_flags_vertical = SIZE_SHRINK_END` у содержимого. -- Контейнеры не раскладывают скрытые узлы — после `visible = true` нужен - `await get_tree().process_frame`, прежде чем читать `size` (например, для `pivot_offset`). -- Наведение мышью делается фокусом (`mouse_entered` → `grab_focus`), чтобы у мыши и клавиатуры - была одна подсветка. - -## Игровой слой - -Файлы в `scripts/game/` разделены по принципу «данные и правила отдельно, отрисовка отдельно». - -Модель и правила — без узлов и без `_draw()`: - -- `vault_grid.gd` — сетка и комнаты. Сюда идут типы комнат, размещение, ресурсы. - Вертикальное смещение бункера под землю — константа `DEPTH`, её учитывают и - `cell_rect()`, и `cell_at()`, поэтому картинка и попадание мышью не разъезжаются. -- `game_clock.gd` — игровые дата и время, скорость, своя пауза. Такт наружу — сигнал - `minute_passed`; темп задаётся `MINUTES_PER_SECOND`. -- `weather_system.gd` — тип погоды, матрица переходов и плавная смена параметров. - Такт берёт у часов, поэтому стоит вместе с паузой. Форма осадков решается - температурой, а не месяцем: у нуля дождь становится снегом. -- `climate.gd` — сезонная норма температуры и ветра (средняя полоса Европы). - Перечисление погоды сюда не тянем — вышла бы циклическая ссылка. -- `sky_cycle.gd` — палитра неба по часу суток, положение солнца и луны. Чистые вычисления. - -Отрисовка — только `_draw()`, читают модель и ничего не решают: - -- `sky_view.gd` — градиент неба, звёзды, светила. -- `surface_view.gd` — поверхность: горы, холмы, деревья, облака, осадки. -- `vault_view.gd` — разрез: порода, корпус, шахта, комнаты, будка входа. - -`vault_scene.gd` связывает всё это с камерой и HUD и держит контракт сохранения. - -Новый тип комнаты добавляется одной записью в `VaultGrid.KINDS`: кнопка в панели строительства -и подсчёт ресурсов подхватятся сами. Новый тип погоды — записью в `WeatherSystem.KINDS` -плюс строкой в `TRANSITIONS`. - -### Текстуры фона - -**Ловушка с плиткой.** `draw_texture_rect(tex, rect, tile = true)` повторяет -текстуру в её натуральную величину и **по обеим осям**. Если растянуть -прямоугольник ради масштаба, текстура просто уложится в него несколько раз, и -на стыке копий пойдёт горизонтальная полоса через весь экран. Плюс при -`texture_repeat = ENABLED` фильтрация на краю подмешивает противоположный край -текстуры — ещё одна тонкая линия. - -Поэтому полосы пейзажа кладутся плитками вручную. При этом важен ещё один -момент: крайние столбцы пикселей у этих текстур полупрозрачные от сглаживания, -и встык они складываются дважды, давая **вертикальную** линию. Отсюда -`EDGE_INSET` — плитки рисуются через `draw_texture_rect_region()` с отступом -в пиксель с каждой стороны, плюс пиксель нахлёста. Повтор на узле выключен. - -`background/` — набор Kenney Background Elements. Два стиля, и они не взаимозаменяемы: -`PNG/Flat/*` — бледные, почти белые силуэты, их место на дальних планах, где цвет всё равно -задаётся тонировкой; `PNG/*` — цветные спрайты для ближнего плана. Перепутать легко: деревья -из Flat на переднем плане выглядят выцветшими. - -## Консоль разработчика - -Открывается тильдой или F1 в любой сцене, работает и на паузе. Сама об игре -ничего не знает: команды регистрируют сцены через `DevConsole.register(...)`, -и они умирают вместе со сценой — консоль выбрасывает команду, когда её -`Callable` протухает. - -Команды игровой сцены живут в `vault_scene.gd`, в разделе «Команды консоли»: -`stats`, `time`, `date`, `speed`, `weather`, `temp`, `wind`, `build`, `wipe`. -У погоды есть латинские ключи (`snow`, `rain`, …) — набирать русские названия -с латинской раскладки посреди отладки неудобно. - -### Файловый мост — как выполнять команды из MCP - -Набрать команду через `game_manage(op="input_key")` нельзя: внедрённые события -доносят до `LineEdit` код клавиши, но не символ. Enter при этом проходит — то -есть дело не в фокусе. Поэтому в консоли есть мост через файлы в `user://` -(только `OS.is_debug_build()`, в релиз не попадает): - -```bash -DIR="$APPDATA/Godot/app_userdata/GWorld" -printf 'weather storm\ntemp -3\nstats\n' > "$DIR/console_in.txt" -cat "$DIR/console_log.txt" -``` - -Консоль опрашивает `console_in.txt` четыре раза в секунду, выполняет строки и -удаляет файл. Весь вывод дублируется в `console_log.txt`, который -перезаписывается на каждый запуск игры. Работает и с закрытой консолью, и на -паузе. - -## Автозагрузки - -`GameSettings` (`GameSettingsService`), `SaveManager` (`SaveManagerService`) -и `DevConsole` (сцена `scenes/ui/dev_console.tscn`). -У обеих есть `class_name`: константы, перечисления и типы берём через него, экземпляр — -через `get_node("/root/...")`. Имя автозагрузки редактор не резолвит без перезапуска проекта. - -Контракт сохранения игровой сцены описан в [README.md](README.md). - -## Проверка - -Изменения в UI считаются сделанными только после запуска и скриншота. Логи смотреть в обоих -источниках: `logs_read(source="game")` и `logs_read(source="editor")` — ошибки загрузки скриптов -попадают только во второй. diff --git a/README.md b/README.md deleted file mode 100644 index 5ecf38c..0000000 --- a/README.md +++ /dev/null @@ -1,125 +0,0 @@ -# G-WORLD - -Двумерная игра с видом сбоку на Godot 4.7. Референс по подаче и структуре — **Fallout Shelter**: -разрез убежища, комнаты в сетке, жители, которых расселяют по этажам, и мир, реагирующий на -решения игрока. - -> Статус: ранняя альфа. Готов каркас меню и первый игровой слой — сетка комнат в разрезе. - ---- - -## Что уже работает - -| Часть | Файл | Что умеет | -|---|---|---| -| Убежище | `scenes/game/vault.tscn` | разрез на 6 этажей, лифтовая шахта, строительство и снос комнат, сводка ресурсов | -| Главное меню | `scenes/ui/main_menu.tscn` | анимированный фон на шейдере, появление по стаггеру, единая подсветка для мыши и клавиатуры | -| Настройки | `scenes/ui/settings_menu.tscn` | видео, звук, переназначение клавиш; сохраняется в `user://settings.cfg` | -| Пауза | `scenes/ui/pause_menu.tscn` | останавливает дерево, переиспользует экраны настроек и сохранений | -| Сохранения | `scenes/ui/save_menu.tscn` | 6 слотов с миниатюрами, датой и наигранным временем, запись/чтение/удаление | - -Экраны настроек и сохранений — отдельные сцены, вложенные инстансами и в главное меню, и в паузу. -Дублирования нет: правка в одном месте видна везде. - -## Игровой слой - -Убежище разделено на три части, чтобы графику можно было заменить, не трогая логику: - -- **`vault_grid.gd`** (`VaultGrid`) — модель: сетка 9×6, список комнат, правила размещения, - баланс ресурсов, сериализация. Ни одного узла, ни одной отрисовки. -- **`vault_view.gd`** (`VaultView`) — весь `_draw()`: небо, порода, шахта, комнаты, призрак - строительства. Пока рисуется процедурно — ассетов нет. Появится графика — меняется только - этот файл. -- **`vault_scene.gd`** — связывает модель, вид, камеру и HUD, реализует контракт сохранения. - -Управление: **ЛКМ** — построить или снести, **ПКМ/СКМ** — тащить вид, **колесо** — зум, -**WASD / стрелки** — прокрутка, **Esc** — пауза. - -Типы комнат и их баланс ресурсов заданы одним словарём `VaultGrid.KINDS` — новый тип добавляется -одной записью, кнопка в панели строительства и подсчёт ресурсов подхватываются сами. - -## Требования - -- **Godot 4.7** (Forward+, .NET-сборка не обязательна — код на GDScript) -- Windows / Linux / macOS - -## Запуск - -Откройте папку проекта в Godot и нажмите F5 — главная сцена уже прописана -(`res://scenes/ui/main_menu.tscn`). - -## Структура - -``` -scenes/ - ui/ main_menu, settings_menu, pause_menu, save_menu - game/ vault.tscn — убежище -scripts/ - autoload/ game_settings.gd, save_manager.gd - ui/ по скрипту на экран - game/ vault_grid.gd, vault_view.gd, vault_camera.gd, vault_scene.gd -shaders/ menu_background.gdshader + материал -themes/ main_menu.theme.tres — единая тема всех экранов -default_bus_layout.tres — шины микшера: Master → Music, SFX -``` - -## Соглашения - -**Тема.** Все экраны наследуют `themes/main_menu.theme.tres`. Цвета не прописываются в узлах: -акцент `#2ee6c5`, второй акцент `#7b6bf5`, текст `#dbe7f0`, приглушённый `#8fa5ba`. -Локальные `theme_override_*` — только там, где элемент должен отличаться намеренно. - -**Язык.** Интерфейс и комментарии — русские, имена узлов, файлов и методов — английские. - -**Автозагрузки.** - -- `GameSettings` (`GameSettingsService`) — настройки: чтение, применение к движку, `user://settings.cfg` -- `SaveManager` (`SaveManagerService`) — слоты сохранений в `user://saves/` - -У обеих есть `class_name`: константы и типы берутся через него, экземпляр — через -`get_node("/root/GameSettings")`. Так редактор резолвит имена без перезапуска проекта. - -**Контракт игровой сцены.** Чтобы сцена умела сохраняться: - -```gdscript -func _ready() -> void: - add_to_group(SaveManagerService.PERSIST_GROUP) - SaveManager.begin_session(scene_file_path) - -func save_data() -> Dictionary: - return {"...": ...} - -func load_data(data: Dictionary) -> void: - ... -``` - -`SaveManager` обходит группу `persistent`, собирает словари по путям узлов и пишет JSON. -Миниатюра слота — кадр, снятый в момент вызова паузы, до показа оверлея. - -**Действия ввода** (`project.godot` → Input Map): `move_left`, `move_right`, `move_up`, -`move_down` (прокрутка камеры), `interact`, `pause`. Переназначаются в настройках; список -в UI строится из `GameSettingsService.ACTION_LABELS`, так что новое действие нужно добавить -и туда. - -**Рендерер** — Forward+ (по умолчанию). Для чистой 2D он избыточен, но оставляет запас на -3D-вставки и продвинутый пост-процессинг. Если понадобится максимальная лёгкость и веб-экспорт, -осмысленный переход — не Mobile, а Compatibility (OpenGL); смена требует перезапуска редактора. - -**Слияния.** `.tscn` и `.tres` — текстовые, но построчный авто-мердж по ним даёт мусор. -Конфликтующие сцены лучше разрешать, открывая обе версии в редакторе, а не в diff-вьювере. - -## Что дальше - -- [x] Игровой слой на 2D: сетка комнат в разрезе, вид сбоку -- [ ] Жители: найм, характеристики, расселение по комнатам -- [ ] Время и производство: ресурсы должны копиться, а не только считаться в сводке -- [ ] Слияние одинаковых соседних комнат, как в референсе -- [ ] Стоимость строительства и ограничение по ресурсам -- [ ] Графика вместо процедурной отрисовки в `vault_view.gd` -- [ ] Звук: подключить шины Music и SFX -- [ ] Лицензия не выбрана - -## Лицензия - -Не определена. Плагин `addons/godot_ai` поставляется со своей лицензией — см. -`addons/godot_ai/LICENSE`. diff --git a/background/PNG/Flat/castle.png b/background/PNG/Flat/castle.png deleted file mode 100644 index 696e919..0000000 Binary files a/background/PNG/Flat/castle.png and /dev/null differ diff --git a/background/PNG/Flat/castle.png.import b/background/PNG/Flat/castle.png.import deleted file mode 100644 index 18aa013..0000000 --- a/background/PNG/Flat/castle.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://mscqw1hbwjs" -path="res://.godot/imported/castle.png-678a6a26bd20d931fc49c854400a7be6.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/Flat/castle.png" -dest_files=["res://.godot/imported/castle.png-678a6a26bd20d931fc49c854400a7be6.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/background/PNG/Flat/castle_wall.png b/background/PNG/Flat/castle_wall.png deleted file mode 100644 index 9e0d167..0000000 Binary files a/background/PNG/Flat/castle_wall.png and /dev/null differ diff --git a/background/PNG/Flat/castle_wall.png.import b/background/PNG/Flat/castle_wall.png.import deleted file mode 100644 index 229ad72..0000000 --- a/background/PNG/Flat/castle_wall.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://xxxpuoynpmu3" -path="res://.godot/imported/castle_wall.png-5126657ca7f62d0ae18be322dcd377e7.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/Flat/castle_wall.png" -dest_files=["res://.godot/imported/castle_wall.png-5126657ca7f62d0ae18be322dcd377e7.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/background/PNG/Flat/cloud1.png b/background/PNG/Flat/cloud1.png deleted file mode 100644 index 9fc248f..0000000 Binary files a/background/PNG/Flat/cloud1.png and /dev/null differ diff --git a/background/PNG/Flat/cloud1.png.import b/background/PNG/Flat/cloud1.png.import deleted file mode 100644 index e2e8fd3..0000000 --- a/background/PNG/Flat/cloud1.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://bcg35d418c5jh" -path="res://.godot/imported/cloud1.png-5311b9fca17a1e4f3eae44bd967d8199.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/Flat/cloud1.png" -dest_files=["res://.godot/imported/cloud1.png-5311b9fca17a1e4f3eae44bd967d8199.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/background/PNG/Flat/cloud2.png b/background/PNG/Flat/cloud2.png deleted file mode 100644 index e240062..0000000 Binary files a/background/PNG/Flat/cloud2.png and /dev/null differ diff --git a/background/PNG/Flat/cloud2.png.import b/background/PNG/Flat/cloud2.png.import deleted file mode 100644 index 8bfae28..0000000 --- a/background/PNG/Flat/cloud2.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://chh2lmiudlngc" -path="res://.godot/imported/cloud2.png-fd1dd135d91b308a4dc314027363f908.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/Flat/cloud2.png" -dest_files=["res://.godot/imported/cloud2.png-fd1dd135d91b308a4dc314027363f908.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/background/PNG/Flat/cloud3.png b/background/PNG/Flat/cloud3.png deleted file mode 100644 index d9e179c..0000000 Binary files a/background/PNG/Flat/cloud3.png and /dev/null differ diff --git a/background/PNG/Flat/cloud3.png.import b/background/PNG/Flat/cloud3.png.import deleted file mode 100644 index e68c1a3..0000000 --- a/background/PNG/Flat/cloud3.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://c20n75nym56ax" -path="res://.godot/imported/cloud3.png-228a528a6b8b74c8a58e371803e9a64c.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/Flat/cloud3.png" -dest_files=["res://.godot/imported/cloud3.png-228a528a6b8b74c8a58e371803e9a64c.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/background/PNG/Flat/cloud4.png b/background/PNG/Flat/cloud4.png deleted file mode 100644 index 71cd5a3..0000000 Binary files a/background/PNG/Flat/cloud4.png and /dev/null differ diff --git a/background/PNG/Flat/cloud4.png.import b/background/PNG/Flat/cloud4.png.import deleted file mode 100644 index bb481d5..0000000 --- a/background/PNG/Flat/cloud4.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://10rf7xpgfwfv" -path="res://.godot/imported/cloud4.png-428730c8fc4e585bb127bccdf4a715a6.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/Flat/cloud4.png" -dest_files=["res://.godot/imported/cloud4.png-428730c8fc4e585bb127bccdf4a715a6.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/background/PNG/Flat/cloud5.png b/background/PNG/Flat/cloud5.png deleted file mode 100644 index 552af12..0000000 Binary files a/background/PNG/Flat/cloud5.png and /dev/null differ diff --git a/background/PNG/Flat/cloud5.png.import b/background/PNG/Flat/cloud5.png.import deleted file mode 100644 index 954bdf2..0000000 --- a/background/PNG/Flat/cloud5.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://t75wnvswc200" -path="res://.godot/imported/cloud5.png-5c7a16aaebbfedb8ffab4242400bedec.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/Flat/cloud5.png" -dest_files=["res://.godot/imported/cloud5.png-5c7a16aaebbfedb8ffab4242400bedec.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/background/PNG/Flat/cloud6.png b/background/PNG/Flat/cloud6.png deleted file mode 100644 index 5b10e93..0000000 Binary files a/background/PNG/Flat/cloud6.png and /dev/null differ diff --git a/background/PNG/Flat/cloud6.png.import b/background/PNG/Flat/cloud6.png.import deleted file mode 100644 index 91e3463..0000000 --- a/background/PNG/Flat/cloud6.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://drjd66fll3dv8" -path="res://.godot/imported/cloud6.png-886dd3cacd10f87ef76d36dbaa0afe5e.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/Flat/cloud6.png" -dest_files=["res://.godot/imported/cloud6.png-886dd3cacd10f87ef76d36dbaa0afe5e.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/background/PNG/Flat/cloud7.png b/background/PNG/Flat/cloud7.png deleted file mode 100644 index 3cd3a33..0000000 Binary files a/background/PNG/Flat/cloud7.png and /dev/null differ diff --git a/background/PNG/Flat/cloud7.png.import b/background/PNG/Flat/cloud7.png.import deleted file mode 100644 index 4570469..0000000 --- a/background/PNG/Flat/cloud7.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://bqcha5gi5x4pp" -path="res://.godot/imported/cloud7.png-18bc01ba26d850a54df5415814caaa35.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/Flat/cloud7.png" -dest_files=["res://.godot/imported/cloud7.png-18bc01ba26d850a54df5415814caaa35.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/background/PNG/Flat/cloud8.png b/background/PNG/Flat/cloud8.png deleted file mode 100644 index a8bc100..0000000 Binary files a/background/PNG/Flat/cloud8.png and /dev/null differ diff --git a/background/PNG/Flat/cloud8.png.import b/background/PNG/Flat/cloud8.png.import deleted file mode 100644 index 2c235ef..0000000 --- a/background/PNG/Flat/cloud8.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://dwuf1b7c1vog2" -path="res://.godot/imported/cloud8.png-d5ea1fd0efb1ccdb3fa62148babca56c.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/Flat/cloud8.png" -dest_files=["res://.godot/imported/cloud8.png-d5ea1fd0efb1ccdb3fa62148babca56c.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/background/PNG/Flat/cloud9.png b/background/PNG/Flat/cloud9.png deleted file mode 100644 index 83d7431..0000000 Binary files a/background/PNG/Flat/cloud9.png and /dev/null differ diff --git a/background/PNG/Flat/cloud9.png.import b/background/PNG/Flat/cloud9.png.import deleted file mode 100644 index b667c1e..0000000 --- a/background/PNG/Flat/cloud9.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://d6k86j06k4j1" -path="res://.godot/imported/cloud9.png-1d4f84ce348cd8550a45b7585518354f.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/Flat/cloud9.png" -dest_files=["res://.godot/imported/cloud9.png-1d4f84ce348cd8550a45b7585518354f.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/background/PNG/Flat/clouds1.png b/background/PNG/Flat/clouds1.png deleted file mode 100644 index 84886be..0000000 Binary files a/background/PNG/Flat/clouds1.png and /dev/null differ diff --git a/background/PNG/Flat/clouds1.png.import b/background/PNG/Flat/clouds1.png.import deleted file mode 100644 index 1a4aec6..0000000 --- a/background/PNG/Flat/clouds1.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://cx2y55thtupkc" -path="res://.godot/imported/clouds1.png-55b937dcc43843e2cccbce7c2fbab329.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/Flat/clouds1.png" -dest_files=["res://.godot/imported/clouds1.png-55b937dcc43843e2cccbce7c2fbab329.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/background/PNG/Flat/clouds2.png b/background/PNG/Flat/clouds2.png deleted file mode 100644 index 7b5bf85..0000000 Binary files a/background/PNG/Flat/clouds2.png and /dev/null differ diff --git a/background/PNG/Flat/clouds2.png.import b/background/PNG/Flat/clouds2.png.import deleted file mode 100644 index c37399e..0000000 --- a/background/PNG/Flat/clouds2.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://6hnnpnkn5gop" -path="res://.godot/imported/clouds2.png-f6e156b79b57bfe2081c6e8fb3a6d3c4.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/Flat/clouds2.png" -dest_files=["res://.godot/imported/clouds2.png-f6e156b79b57bfe2081c6e8fb3a6d3c4.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/background/PNG/Flat/fence.png b/background/PNG/Flat/fence.png deleted file mode 100644 index b5ebba6..0000000 Binary files a/background/PNG/Flat/fence.png and /dev/null differ diff --git a/background/PNG/Flat/fence.png.import b/background/PNG/Flat/fence.png.import deleted file mode 100644 index 8b8fc0c..0000000 --- a/background/PNG/Flat/fence.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://dgqag72gh328n" -path="res://.godot/imported/fence.png-13cb175293ef88283a922b5c1b2f2d50.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/Flat/fence.png" -dest_files=["res://.godot/imported/fence.png-13cb175293ef88283a922b5c1b2f2d50.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/background/PNG/Flat/fence_piece.png b/background/PNG/Flat/fence_piece.png deleted file mode 100644 index 02d4cc0..0000000 Binary files a/background/PNG/Flat/fence_piece.png and /dev/null differ diff --git a/background/PNG/Flat/fence_piece.png.import b/background/PNG/Flat/fence_piece.png.import deleted file mode 100644 index 7eaf82a..0000000 --- a/background/PNG/Flat/fence_piece.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://k4hkq88eiqvr" -path="res://.godot/imported/fence_piece.png-9393591e3fdc15a93ecdd0de480159ec.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/Flat/fence_piece.png" -dest_files=["res://.godot/imported/fence_piece.png-9393591e3fdc15a93ecdd0de480159ec.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/background/PNG/Flat/grass1.png b/background/PNG/Flat/grass1.png deleted file mode 100644 index 5d78bda..0000000 Binary files a/background/PNG/Flat/grass1.png and /dev/null differ diff --git a/background/PNG/Flat/grass1.png.import b/background/PNG/Flat/grass1.png.import deleted file mode 100644 index 526e65e..0000000 --- a/background/PNG/Flat/grass1.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://ci0itjn8j0d21" -path="res://.godot/imported/grass1.png-4b6d7b03e5e2a4a189dcc1889393dbf2.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/Flat/grass1.png" -dest_files=["res://.godot/imported/grass1.png-4b6d7b03e5e2a4a189dcc1889393dbf2.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/background/PNG/Flat/grass2.png b/background/PNG/Flat/grass2.png deleted file mode 100644 index d47a9f0..0000000 Binary files a/background/PNG/Flat/grass2.png and /dev/null differ diff --git a/background/PNG/Flat/grass2.png.import b/background/PNG/Flat/grass2.png.import deleted file mode 100644 index c0c2490..0000000 --- a/background/PNG/Flat/grass2.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://cobi4muoqmv4s" -path="res://.godot/imported/grass2.png-c40212f35c169ec4ec82f5a5c7733f9f.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/Flat/grass2.png" -dest_files=["res://.godot/imported/grass2.png-c40212f35c169ec4ec82f5a5c7733f9f.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/background/PNG/Flat/hills1.png b/background/PNG/Flat/hills1.png deleted file mode 100644 index 9ba08d4..0000000 Binary files a/background/PNG/Flat/hills1.png and /dev/null differ diff --git a/background/PNG/Flat/hills1.png.import b/background/PNG/Flat/hills1.png.import deleted file mode 100644 index c27cc8c..0000000 --- a/background/PNG/Flat/hills1.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://ryfutxbudleo" -path="res://.godot/imported/hills1.png-4e39a42e6b7e9dd461468ef57670e945.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/Flat/hills1.png" -dest_files=["res://.godot/imported/hills1.png-4e39a42e6b7e9dd461468ef57670e945.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/background/PNG/Flat/hills2.png b/background/PNG/Flat/hills2.png deleted file mode 100644 index 6235304..0000000 Binary files a/background/PNG/Flat/hills2.png and /dev/null differ diff --git a/background/PNG/Flat/hills2.png.import b/background/PNG/Flat/hills2.png.import deleted file mode 100644 index c38ac7d..0000000 --- a/background/PNG/Flat/hills2.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://bnjgplg4w8ttx" -path="res://.godot/imported/hills2.png-55b73f981872b12370b2725f339e40f9.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/Flat/hills2.png" -dest_files=["res://.godot/imported/hills2.png-55b73f981872b12370b2725f339e40f9.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/background/PNG/Flat/house_front_short.png b/background/PNG/Flat/house_front_short.png deleted file mode 100644 index 024f336..0000000 Binary files a/background/PNG/Flat/house_front_short.png and /dev/null differ diff --git a/background/PNG/Flat/house_front_short.png.import b/background/PNG/Flat/house_front_short.png.import deleted file mode 100644 index 64c2617..0000000 --- a/background/PNG/Flat/house_front_short.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://b0e8u6j2853y2" -path="res://.godot/imported/house_front_short.png-800deb930a4249803191b9e94f6907ee.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/Flat/house_front_short.png" -dest_files=["res://.godot/imported/house_front_short.png-800deb930a4249803191b9e94f6907ee.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/background/PNG/Flat/house_front_tall.png b/background/PNG/Flat/house_front_tall.png deleted file mode 100644 index 44c0d9d..0000000 Binary files a/background/PNG/Flat/house_front_tall.png and /dev/null differ diff --git a/background/PNG/Flat/house_front_tall.png.import b/background/PNG/Flat/house_front_tall.png.import deleted file mode 100644 index 8296d07..0000000 --- a/background/PNG/Flat/house_front_tall.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://b71vdv6ckvdbo" -path="res://.godot/imported/house_front_tall.png-eb22afaad34f37770b18ca6e3ecf145c.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/Flat/house_front_tall.png" -dest_files=["res://.godot/imported/house_front_tall.png-eb22afaad34f37770b18ca6e3ecf145c.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/background/PNG/Flat/house_side_short.png b/background/PNG/Flat/house_side_short.png deleted file mode 100644 index c4ab4ec..0000000 Binary files a/background/PNG/Flat/house_side_short.png and /dev/null differ diff --git a/background/PNG/Flat/house_side_short.png.import b/background/PNG/Flat/house_side_short.png.import deleted file mode 100644 index 49e0244..0000000 --- a/background/PNG/Flat/house_side_short.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://ch14p5q3q7k0j" -path="res://.godot/imported/house_side_short.png-bdc2de53613a9903db4dbaeb81af2dd9.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/Flat/house_side_short.png" -dest_files=["res://.godot/imported/house_side_short.png-bdc2de53613a9903db4dbaeb81af2dd9.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/background/PNG/Flat/house_side_tall.png b/background/PNG/Flat/house_side_tall.png deleted file mode 100644 index c8b587e..0000000 Binary files a/background/PNG/Flat/house_side_tall.png and /dev/null differ diff --git a/background/PNG/Flat/house_side_tall.png.import b/background/PNG/Flat/house_side_tall.png.import deleted file mode 100644 index b8e3a13..0000000 --- a/background/PNG/Flat/house_side_tall.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://ckkgehd6d8t1d" -path="res://.godot/imported/house_side_tall.png-d399cf9243fa358bcd23351aebb00cbc.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/Flat/house_side_tall.png" -dest_files=["res://.godot/imported/house_side_tall.png-d399cf9243fa358bcd23351aebb00cbc.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/background/PNG/Flat/mountain1.png b/background/PNG/Flat/mountain1.png deleted file mode 100644 index 5be1f6b..0000000 Binary files a/background/PNG/Flat/mountain1.png and /dev/null differ diff --git a/background/PNG/Flat/mountain1.png.import b/background/PNG/Flat/mountain1.png.import deleted file mode 100644 index b9e467c..0000000 --- a/background/PNG/Flat/mountain1.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://dorjnn2hoql3" -path="res://.godot/imported/mountain1.png-350eb87d503706cbc9e53ea6eab1da68.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/Flat/mountain1.png" -dest_files=["res://.godot/imported/mountain1.png-350eb87d503706cbc9e53ea6eab1da68.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/background/PNG/Flat/mountain2.png b/background/PNG/Flat/mountain2.png deleted file mode 100644 index 75ef736..0000000 Binary files a/background/PNG/Flat/mountain2.png and /dev/null differ diff --git a/background/PNG/Flat/mountain2.png.import b/background/PNG/Flat/mountain2.png.import deleted file mode 100644 index 7ed80d5..0000000 --- a/background/PNG/Flat/mountain2.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://cfym1h1c2d4it" -path="res://.godot/imported/mountain2.png-52e8b669b1b41b5c10ceeeacabef80e7.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/Flat/mountain2.png" -dest_files=["res://.godot/imported/mountain2.png-52e8b669b1b41b5c10ceeeacabef80e7.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/background/PNG/Flat/mountain3.png b/background/PNG/Flat/mountain3.png deleted file mode 100644 index b51f36f..0000000 Binary files a/background/PNG/Flat/mountain3.png and /dev/null differ diff --git a/background/PNG/Flat/mountain3.png.import b/background/PNG/Flat/mountain3.png.import deleted file mode 100644 index d309176..0000000 --- a/background/PNG/Flat/mountain3.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://4ma6x77xpq23" -path="res://.godot/imported/mountain3.png-8bc7432f3fbf8eefb2030e681477fe9b.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/Flat/mountain3.png" -dest_files=["res://.godot/imported/mountain3.png-8bc7432f3fbf8eefb2030e681477fe9b.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/background/PNG/Flat/piramid.png b/background/PNG/Flat/piramid.png deleted file mode 100644 index 316febf..0000000 Binary files a/background/PNG/Flat/piramid.png and /dev/null differ diff --git a/background/PNG/Flat/piramid.png.import b/background/PNG/Flat/piramid.png.import deleted file mode 100644 index d6ffd77..0000000 --- a/background/PNG/Flat/piramid.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://bplaebj0at8bx" -path="res://.godot/imported/piramid.png-3798954272314b6a335d3fb254f260cf.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/Flat/piramid.png" -dest_files=["res://.godot/imported/piramid.png-3798954272314b6a335d3fb254f260cf.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/background/PNG/Flat/pointy_mountains.png b/background/PNG/Flat/pointy_mountains.png deleted file mode 100644 index 5d8be0c..0000000 Binary files a/background/PNG/Flat/pointy_mountains.png and /dev/null differ diff --git a/background/PNG/Flat/pointy_mountains.png.import b/background/PNG/Flat/pointy_mountains.png.import deleted file mode 100644 index 8440ca9..0000000 --- a/background/PNG/Flat/pointy_mountains.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://cksxoi6tgbus3" -path="res://.godot/imported/pointy_mountains.png-70064c9643c700ef842ea1e9c044b4d4.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/Flat/pointy_mountains.png" -dest_files=["res://.godot/imported/pointy_mountains.png-70064c9643c700ef842ea1e9c044b4d4.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/background/PNG/Flat/sky.png b/background/PNG/Flat/sky.png deleted file mode 100644 index 69d67d6..0000000 Binary files a/background/PNG/Flat/sky.png and /dev/null differ diff --git a/background/PNG/Flat/sky.png.import b/background/PNG/Flat/sky.png.import deleted file mode 100644 index eab7501..0000000 --- a/background/PNG/Flat/sky.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://caxsuh5cc88jk" -path="res://.godot/imported/sky.png-a0f2893f18903862446d872f819b9bfa.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/Flat/sky.png" -dest_files=["res://.godot/imported/sky.png-a0f2893f18903862446d872f819b9bfa.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/background/PNG/Flat/temple.png b/background/PNG/Flat/temple.png deleted file mode 100644 index 331fd39..0000000 Binary files a/background/PNG/Flat/temple.png and /dev/null differ diff --git a/background/PNG/Flat/temple.png.import b/background/PNG/Flat/temple.png.import deleted file mode 100644 index f05f356..0000000 --- a/background/PNG/Flat/temple.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://rn5psoacd23t" -path="res://.godot/imported/temple.png-82f853279eb3a0f73669bffc3dd3beb1.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/Flat/temple.png" -dest_files=["res://.godot/imported/temple.png-82f853279eb3a0f73669bffc3dd3beb1.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/background/PNG/Flat/tower.png b/background/PNG/Flat/tower.png deleted file mode 100644 index 47e7703..0000000 Binary files a/background/PNG/Flat/tower.png and /dev/null differ diff --git a/background/PNG/Flat/tower.png.import b/background/PNG/Flat/tower.png.import deleted file mode 100644 index d347cb9..0000000 --- a/background/PNG/Flat/tower.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://jbw820jb2lq2" -path="res://.godot/imported/tower.png-9f6b23697dab55fdb648390721af1bcd.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/Flat/tower.png" -dest_files=["res://.godot/imported/tower.png-9f6b23697dab55fdb648390721af1bcd.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/background/PNG/Flat/tree01.png b/background/PNG/Flat/tree01.png deleted file mode 100644 index c1d36bc..0000000 Binary files a/background/PNG/Flat/tree01.png and /dev/null differ diff --git a/background/PNG/Flat/tree01.png.import b/background/PNG/Flat/tree01.png.import deleted file mode 100644 index 9f62a2f..0000000 --- a/background/PNG/Flat/tree01.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://btaykngydndm1" -path="res://.godot/imported/tree01.png-84d6b4e17fc453aa3a8d672eba443ab0.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/Flat/tree01.png" -dest_files=["res://.godot/imported/tree01.png-84d6b4e17fc453aa3a8d672eba443ab0.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/background/PNG/Flat/tree02.png b/background/PNG/Flat/tree02.png deleted file mode 100644 index 7bc01d1..0000000 Binary files a/background/PNG/Flat/tree02.png and /dev/null differ diff --git a/background/PNG/Flat/tree02.png.import b/background/PNG/Flat/tree02.png.import deleted file mode 100644 index 2629a46..0000000 --- a/background/PNG/Flat/tree02.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://4i7ffa0bibdc" -path="res://.godot/imported/tree02.png-373acfcc18461a16e0ccb3af5927d284.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/Flat/tree02.png" -dest_files=["res://.godot/imported/tree02.png-373acfcc18461a16e0ccb3af5927d284.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/background/PNG/Flat/tree03.png b/background/PNG/Flat/tree03.png deleted file mode 100644 index 04da47b..0000000 Binary files a/background/PNG/Flat/tree03.png and /dev/null differ diff --git a/background/PNG/Flat/tree03.png.import b/background/PNG/Flat/tree03.png.import deleted file mode 100644 index e6e4aa7..0000000 --- a/background/PNG/Flat/tree03.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://dx0idbgnmp1db" -path="res://.godot/imported/tree03.png-3c2121550a7a830d289c8f3e05e893d5.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/Flat/tree03.png" -dest_files=["res://.godot/imported/tree03.png-3c2121550a7a830d289c8f3e05e893d5.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/background/PNG/Flat/tree04.png b/background/PNG/Flat/tree04.png deleted file mode 100644 index 705c043..0000000 Binary files a/background/PNG/Flat/tree04.png and /dev/null differ diff --git a/background/PNG/Flat/tree04.png.import b/background/PNG/Flat/tree04.png.import deleted file mode 100644 index 0dd9c48..0000000 --- a/background/PNG/Flat/tree04.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://e55le2ftanho" -path="res://.godot/imported/tree04.png-0f7e68ea78d66c5a68940e4532f15abb.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/Flat/tree04.png" -dest_files=["res://.godot/imported/tree04.png-0f7e68ea78d66c5a68940e4532f15abb.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/background/PNG/Flat/tree05.png b/background/PNG/Flat/tree05.png deleted file mode 100644 index 936fbd6..0000000 Binary files a/background/PNG/Flat/tree05.png and /dev/null differ diff --git a/background/PNG/Flat/tree05.png.import b/background/PNG/Flat/tree05.png.import deleted file mode 100644 index 62c7824..0000000 --- a/background/PNG/Flat/tree05.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://ddtypm4imxwcx" -path="res://.godot/imported/tree05.png-1400fd182f60cef84026602865049150.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/Flat/tree05.png" -dest_files=["res://.godot/imported/tree05.png-1400fd182f60cef84026602865049150.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/background/PNG/Flat/tree06.png b/background/PNG/Flat/tree06.png deleted file mode 100644 index 405b1d0..0000000 Binary files a/background/PNG/Flat/tree06.png and /dev/null differ diff --git a/background/PNG/Flat/tree06.png.import b/background/PNG/Flat/tree06.png.import deleted file mode 100644 index 71bad53..0000000 --- a/background/PNG/Flat/tree06.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://cekbcyy1lrwhb" -path="res://.godot/imported/tree06.png-54556e0e0931c7afb096028214756e5d.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/Flat/tree06.png" -dest_files=["res://.godot/imported/tree06.png-54556e0e0931c7afb096028214756e5d.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/background/PNG/Flat/tree07.png b/background/PNG/Flat/tree07.png deleted file mode 100644 index 37d3fa5..0000000 Binary files a/background/PNG/Flat/tree07.png and /dev/null differ diff --git a/background/PNG/Flat/tree07.png.import b/background/PNG/Flat/tree07.png.import deleted file mode 100644 index 6cd6266..0000000 --- a/background/PNG/Flat/tree07.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://ckkbsuy71l7rj" -path="res://.godot/imported/tree07.png-263ad82c88f4e99903c73bfcb1f6cbc5.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/Flat/tree07.png" -dest_files=["res://.godot/imported/tree07.png-263ad82c88f4e99903c73bfcb1f6cbc5.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/background/PNG/Flat/tree08.png b/background/PNG/Flat/tree08.png deleted file mode 100644 index cc16490..0000000 Binary files a/background/PNG/Flat/tree08.png and /dev/null differ diff --git a/background/PNG/Flat/tree08.png.import b/background/PNG/Flat/tree08.png.import deleted file mode 100644 index 0cfbd2f..0000000 --- a/background/PNG/Flat/tree08.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://i2xvmxsyok7x" -path="res://.godot/imported/tree08.png-04e5e5b109ccca8e96668e1c09829f49.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/Flat/tree08.png" -dest_files=["res://.godot/imported/tree08.png-04e5e5b109ccca8e96668e1c09829f49.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/background/PNG/Flat/tree09.png b/background/PNG/Flat/tree09.png deleted file mode 100644 index a6dc62b..0000000 Binary files a/background/PNG/Flat/tree09.png and /dev/null differ diff --git a/background/PNG/Flat/tree09.png.import b/background/PNG/Flat/tree09.png.import deleted file mode 100644 index 85c4aeb..0000000 --- a/background/PNG/Flat/tree09.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://kbfhdxgovgd3" -path="res://.godot/imported/tree09.png-3fa5fe6b6a8ebdd6e7091e183b519f9f.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/Flat/tree09.png" -dest_files=["res://.godot/imported/tree09.png-3fa5fe6b6a8ebdd6e7091e183b519f9f.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/background/PNG/Flat/tree10.png b/background/PNG/Flat/tree10.png deleted file mode 100644 index 3b13c1c..0000000 Binary files a/background/PNG/Flat/tree10.png and /dev/null differ diff --git a/background/PNG/Flat/tree10.png.import b/background/PNG/Flat/tree10.png.import deleted file mode 100644 index e699484..0000000 --- a/background/PNG/Flat/tree10.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://dsoqgr6357x2i" -path="res://.godot/imported/tree10.png-242f6f4b8c45e49cb6e05db75c12ae57.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/Flat/tree10.png" -dest_files=["res://.godot/imported/tree10.png-242f6f4b8c45e49cb6e05db75c12ae57.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/background/PNG/Flat/tree11.png b/background/PNG/Flat/tree11.png deleted file mode 100644 index 67d39e6..0000000 Binary files a/background/PNG/Flat/tree11.png and /dev/null differ diff --git a/background/PNG/Flat/tree11.png.import b/background/PNG/Flat/tree11.png.import deleted file mode 100644 index 16a39a2..0000000 --- a/background/PNG/Flat/tree11.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://c1f6b4mdyne41" -path="res://.godot/imported/tree11.png-8c92bfaed8319d122224232782e26182.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/Flat/tree11.png" -dest_files=["res://.godot/imported/tree11.png-8c92bfaed8319d122224232782e26182.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/background/PNG/Flat/tree12.png b/background/PNG/Flat/tree12.png deleted file mode 100644 index 0cbf17d..0000000 Binary files a/background/PNG/Flat/tree12.png and /dev/null differ diff --git a/background/PNG/Flat/tree12.png.import b/background/PNG/Flat/tree12.png.import deleted file mode 100644 index 15eae17..0000000 --- a/background/PNG/Flat/tree12.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://ckk3bflclhxg5" -path="res://.godot/imported/tree12.png-275cf602759ccbd84b5de593b6412bae.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/Flat/tree12.png" -dest_files=["res://.godot/imported/tree12.png-275cf602759ccbd84b5de593b6412bae.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/background/PNG/Flat/tree13.png b/background/PNG/Flat/tree13.png deleted file mode 100644 index d05dd30..0000000 Binary files a/background/PNG/Flat/tree13.png and /dev/null differ diff --git a/background/PNG/Flat/tree13.png.import b/background/PNG/Flat/tree13.png.import deleted file mode 100644 index b6e24d2..0000000 --- a/background/PNG/Flat/tree13.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://7avjovxtvyil" -path="res://.godot/imported/tree13.png-3723212c1be90438491f8c14c91c765b.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/Flat/tree13.png" -dest_files=["res://.godot/imported/tree13.png-3723212c1be90438491f8c14c91c765b.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/background/PNG/castle_beige.png b/background/PNG/castle_beige.png deleted file mode 100644 index 9345f54..0000000 Binary files a/background/PNG/castle_beige.png and /dev/null differ diff --git a/background/PNG/castle_beige.png.import b/background/PNG/castle_beige.png.import deleted file mode 100644 index 8bfa7b3..0000000 --- a/background/PNG/castle_beige.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://caw6a3nky25ji" -path="res://.godot/imported/castle_beige.png-0df04216df6dabd501d3874d02edd4c3.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/castle_beige.png" -dest_files=["res://.godot/imported/castle_beige.png-0df04216df6dabd501d3874d02edd4c3.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/background/PNG/castle_grey.png b/background/PNG/castle_grey.png deleted file mode 100644 index 5e81cbd..0000000 Binary files a/background/PNG/castle_grey.png and /dev/null differ diff --git a/background/PNG/castle_grey.png.import b/background/PNG/castle_grey.png.import deleted file mode 100644 index 199ddfb..0000000 --- a/background/PNG/castle_grey.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://flk1qdp50i8a" -path="res://.godot/imported/castle_grey.png-707cf2a25f1c2691aa4580cef2603bd9.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/castle_grey.png" -dest_files=["res://.godot/imported/castle_grey.png-707cf2a25f1c2691aa4580cef2603bd9.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/background/PNG/castle_wall.png b/background/PNG/castle_wall.png deleted file mode 100644 index 1af6300..0000000 Binary files a/background/PNG/castle_wall.png and /dev/null differ diff --git a/background/PNG/castle_wall.png.import b/background/PNG/castle_wall.png.import deleted file mode 100644 index ce24f8c..0000000 --- a/background/PNG/castle_wall.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://bf0v4wcedk6uu" -path="res://.godot/imported/castle_wall.png-4191aeadd014f6dffb268a9df45ab972.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/castle_wall.png" -dest_files=["res://.godot/imported/castle_wall.png-4191aeadd014f6dffb268a9df45ab972.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/background/PNG/cloud1.png b/background/PNG/cloud1.png deleted file mode 100644 index 84759f7..0000000 Binary files a/background/PNG/cloud1.png and /dev/null differ diff --git a/background/PNG/cloud1.png.import b/background/PNG/cloud1.png.import deleted file mode 100644 index 934725f..0000000 --- a/background/PNG/cloud1.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://cpur3yhvkgt2g" -path="res://.godot/imported/cloud1.png-ab49496ce48cc75731bc12f76b55374a.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/cloud1.png" -dest_files=["res://.godot/imported/cloud1.png-ab49496ce48cc75731bc12f76b55374a.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/background/PNG/cloud2.png b/background/PNG/cloud2.png deleted file mode 100644 index fa2e763..0000000 Binary files a/background/PNG/cloud2.png and /dev/null differ diff --git a/background/PNG/cloud2.png.import b/background/PNG/cloud2.png.import deleted file mode 100644 index 859f6e4..0000000 --- a/background/PNG/cloud2.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://2hxq7p720lxx" -path="res://.godot/imported/cloud2.png-28beb03652b4314d96ec751f1a394c51.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/cloud2.png" -dest_files=["res://.godot/imported/cloud2.png-28beb03652b4314d96ec751f1a394c51.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/background/PNG/cloud3.png b/background/PNG/cloud3.png deleted file mode 100644 index 0285b12..0000000 Binary files a/background/PNG/cloud3.png and /dev/null differ diff --git a/background/PNG/cloud3.png.import b/background/PNG/cloud3.png.import deleted file mode 100644 index 5241af8..0000000 --- a/background/PNG/cloud3.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://bni5q0e61d35v" -path="res://.godot/imported/cloud3.png-1833bf9a52e3c6b93237d4b4cc59f453.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/cloud3.png" -dest_files=["res://.godot/imported/cloud3.png-1833bf9a52e3c6b93237d4b4cc59f453.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/background/PNG/cloud4.png b/background/PNG/cloud4.png deleted file mode 100644 index c002a87..0000000 Binary files a/background/PNG/cloud4.png and /dev/null differ diff --git a/background/PNG/cloud4.png.import b/background/PNG/cloud4.png.import deleted file mode 100644 index b59f019..0000000 --- a/background/PNG/cloud4.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://b4cqxp7xver1c" -path="res://.godot/imported/cloud4.png-08e2bcc386824d41669e9b779e33fc3a.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/cloud4.png" -dest_files=["res://.godot/imported/cloud4.png-08e2bcc386824d41669e9b779e33fc3a.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/background/PNG/cloud5.png b/background/PNG/cloud5.png deleted file mode 100644 index ac96e35..0000000 Binary files a/background/PNG/cloud5.png and /dev/null differ diff --git a/background/PNG/cloud5.png.import b/background/PNG/cloud5.png.import deleted file mode 100644 index 98a4e23..0000000 --- a/background/PNG/cloud5.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://uwaxmh4ilqah" -path="res://.godot/imported/cloud5.png-f60a5643e60d955743472189caa3f07a.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/cloud5.png" -dest_files=["res://.godot/imported/cloud5.png-f60a5643e60d955743472189caa3f07a.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/background/PNG/cloud6.png b/background/PNG/cloud6.png deleted file mode 100644 index f5c230a..0000000 Binary files a/background/PNG/cloud6.png and /dev/null differ diff --git a/background/PNG/cloud6.png.import b/background/PNG/cloud6.png.import deleted file mode 100644 index 1e4c5c0..0000000 --- a/background/PNG/cloud6.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://cg2s04b0xa65x" -path="res://.godot/imported/cloud6.png-6cd75b9e15cd581d66d8659bf66019fe.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/cloud6.png" -dest_files=["res://.godot/imported/cloud6.png-6cd75b9e15cd581d66d8659bf66019fe.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/background/PNG/cloud7.png b/background/PNG/cloud7.png deleted file mode 100644 index 5c5e46e..0000000 Binary files a/background/PNG/cloud7.png and /dev/null differ diff --git a/background/PNG/cloud7.png.import b/background/PNG/cloud7.png.import deleted file mode 100644 index d2451a4..0000000 --- a/background/PNG/cloud7.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://bydti3i0gef8j" -path="res://.godot/imported/cloud7.png-17d99b398c3328ee581d2f320e3f094f.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/cloud7.png" -dest_files=["res://.godot/imported/cloud7.png-17d99b398c3328ee581d2f320e3f094f.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/background/PNG/cloud8.png b/background/PNG/cloud8.png deleted file mode 100644 index bd1e6fd..0000000 Binary files a/background/PNG/cloud8.png and /dev/null differ diff --git a/background/PNG/cloud8.png.import b/background/PNG/cloud8.png.import deleted file mode 100644 index cfddb86..0000000 --- a/background/PNG/cloud8.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://dlk13umgfn8qd" -path="res://.godot/imported/cloud8.png-88f795ffdba1dbdb057cdcbd309170b7.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/cloud8.png" -dest_files=["res://.godot/imported/cloud8.png-88f795ffdba1dbdb057cdcbd309170b7.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/background/PNG/cloud9.png b/background/PNG/cloud9.png deleted file mode 100644 index 4170497..0000000 Binary files a/background/PNG/cloud9.png and /dev/null differ diff --git a/background/PNG/cloud9.png.import b/background/PNG/cloud9.png.import deleted file mode 100644 index 72446fc..0000000 --- a/background/PNG/cloud9.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://c5u8q5kgrsm48" -path="res://.godot/imported/cloud9.png-74f2208c883811f0c5718f64cd3371e6.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/cloud9.png" -dest_files=["res://.godot/imported/cloud9.png-74f2208c883811f0c5718f64cd3371e6.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/background/PNG/fence.png b/background/PNG/fence.png deleted file mode 100644 index 0862484..0000000 Binary files a/background/PNG/fence.png and /dev/null differ diff --git a/background/PNG/fence.png.import b/background/PNG/fence.png.import deleted file mode 100644 index 78ac1ba..0000000 --- a/background/PNG/fence.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://b0citfl8oil1g" -path="res://.godot/imported/fence.png-0242bffb5392fe1300784295b9a79fa7.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/fence.png" -dest_files=["res://.godot/imported/fence.png-0242bffb5392fe1300784295b9a79fa7.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/background/PNG/fence_piece.png b/background/PNG/fence_piece.png deleted file mode 100644 index 1c8988a..0000000 Binary files a/background/PNG/fence_piece.png and /dev/null differ diff --git a/background/PNG/fence_piece.png.import b/background/PNG/fence_piece.png.import deleted file mode 100644 index 9f56315..0000000 --- a/background/PNG/fence_piece.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://d2j2eydybr16u" -path="res://.godot/imported/fence_piece.png-b63ebd273b8087ed228a6169609b0faf.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/fence_piece.png" -dest_files=["res://.godot/imported/fence_piece.png-b63ebd273b8087ed228a6169609b0faf.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/background/PNG/grass1.png b/background/PNG/grass1.png deleted file mode 100644 index b6bf25f..0000000 Binary files a/background/PNG/grass1.png and /dev/null differ diff --git a/background/PNG/grass1.png.import b/background/PNG/grass1.png.import deleted file mode 100644 index ba99254..0000000 --- a/background/PNG/grass1.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://dq6tkvjp648ps" -path="res://.godot/imported/grass1.png-1557131765684a26c3703bb21a09676e.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/grass1.png" -dest_files=["res://.godot/imported/grass1.png-1557131765684a26c3703bb21a09676e.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/background/PNG/grass2.png b/background/PNG/grass2.png deleted file mode 100644 index de146ad..0000000 Binary files a/background/PNG/grass2.png and /dev/null differ diff --git a/background/PNG/grass2.png.import b/background/PNG/grass2.png.import deleted file mode 100644 index 69c8961..0000000 --- a/background/PNG/grass2.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://3884gg0tu47c" -path="res://.godot/imported/grass2.png-a5242725ab8ead18afa7755fb9b2c993.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/grass2.png" -dest_files=["res://.godot/imported/grass2.png-a5242725ab8ead18afa7755fb9b2c993.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/background/PNG/grass3.png b/background/PNG/grass3.png deleted file mode 100644 index d724e95..0000000 Binary files a/background/PNG/grass3.png and /dev/null differ diff --git a/background/PNG/grass3.png.import b/background/PNG/grass3.png.import deleted file mode 100644 index 4e07870..0000000 --- a/background/PNG/grass3.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://1583amvl4sfb" -path="res://.godot/imported/grass3.png-1504b4407744dbbfee34a44289c51aa0.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/grass3.png" -dest_files=["res://.godot/imported/grass3.png-1504b4407744dbbfee34a44289c51aa0.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/background/PNG/grass4.png b/background/PNG/grass4.png deleted file mode 100644 index 381bbbe..0000000 Binary files a/background/PNG/grass4.png and /dev/null differ diff --git a/background/PNG/grass4.png.import b/background/PNG/grass4.png.import deleted file mode 100644 index cb9c19a..0000000 --- a/background/PNG/grass4.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://caqcffeuxshe3" -path="res://.godot/imported/grass4.png-779de81db69e1365f0e1311c92ae0030.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/grass4.png" -dest_files=["res://.godot/imported/grass4.png-779de81db69e1365f0e1311c92ae0030.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/background/PNG/grass5.png b/background/PNG/grass5.png deleted file mode 100644 index 12b692a..0000000 Binary files a/background/PNG/grass5.png and /dev/null differ diff --git a/background/PNG/grass5.png.import b/background/PNG/grass5.png.import deleted file mode 100644 index 3a1f60f..0000000 --- a/background/PNG/grass5.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://cxiech70lrlc" -path="res://.godot/imported/grass5.png-d0d0b308648063a427cdf4335e9fdb9f.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/grass5.png" -dest_files=["res://.godot/imported/grass5.png-d0d0b308648063a427cdf4335e9fdb9f.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/background/PNG/grass6.png b/background/PNG/grass6.png deleted file mode 100644 index 026ed4e..0000000 Binary files a/background/PNG/grass6.png and /dev/null differ diff --git a/background/PNG/grass6.png.import b/background/PNG/grass6.png.import deleted file mode 100644 index e55d8a1..0000000 --- a/background/PNG/grass6.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://2y6clyfvy2mu" -path="res://.godot/imported/grass6.png-56c6eda2e03dd1be30e9624bb04da280.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/grass6.png" -dest_files=["res://.godot/imported/grass6.png-56c6eda2e03dd1be30e9624bb04da280.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/background/PNG/house_beige_front.png b/background/PNG/house_beige_front.png deleted file mode 100644 index fdb89e7..0000000 Binary files a/background/PNG/house_beige_front.png and /dev/null differ diff --git a/background/PNG/house_beige_front.png.import b/background/PNG/house_beige_front.png.import deleted file mode 100644 index 89a651e..0000000 --- a/background/PNG/house_beige_front.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://xjc1iwo0sles" -path="res://.godot/imported/house_beige_front.png-9c032eefd20f162faf52bdca40c16172.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/house_beige_front.png" -dest_files=["res://.godot/imported/house_beige_front.png-9c032eefd20f162faf52bdca40c16172.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/background/PNG/house_beige_side.png b/background/PNG/house_beige_side.png deleted file mode 100644 index e6f81f3..0000000 Binary files a/background/PNG/house_beige_side.png and /dev/null differ diff --git a/background/PNG/house_beige_side.png.import b/background/PNG/house_beige_side.png.import deleted file mode 100644 index 524299e..0000000 --- a/background/PNG/house_beige_side.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://b1djfvvsts3bp" -path="res://.godot/imported/house_beige_side.png-c6fdd0f280a44c33f1a4211d41b706ef.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/house_beige_side.png" -dest_files=["res://.godot/imported/house_beige_side.png-c6fdd0f280a44c33f1a4211d41b706ef.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/background/PNG/house_grey_front.png b/background/PNG/house_grey_front.png deleted file mode 100644 index a2dd253..0000000 Binary files a/background/PNG/house_grey_front.png and /dev/null differ diff --git a/background/PNG/house_grey_front.png.import b/background/PNG/house_grey_front.png.import deleted file mode 100644 index f274c1d..0000000 --- a/background/PNG/house_grey_front.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://cmy8kthyctlf1" -path="res://.godot/imported/house_grey_front.png-dd223a7fad81c634220d53ab6bdd7ebe.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/house_grey_front.png" -dest_files=["res://.godot/imported/house_grey_front.png-dd223a7fad81c634220d53ab6bdd7ebe.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/background/PNG/house_grey_side.png b/background/PNG/house_grey_side.png deleted file mode 100644 index 98b814e..0000000 Binary files a/background/PNG/house_grey_side.png and /dev/null differ diff --git a/background/PNG/house_grey_side.png.import b/background/PNG/house_grey_side.png.import deleted file mode 100644 index ce02fd6..0000000 --- a/background/PNG/house_grey_side.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://brd1vd0vsrlpr" -path="res://.godot/imported/house_grey_side.png-f82f2f45d73bfd78cf76175c18929758.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/house_grey_side.png" -dest_files=["res://.godot/imported/house_grey_side.png-f82f2f45d73bfd78cf76175c18929758.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/background/PNG/moon_full.png b/background/PNG/moon_full.png deleted file mode 100644 index 906fde5..0000000 Binary files a/background/PNG/moon_full.png and /dev/null differ diff --git a/background/PNG/moon_full.png.import b/background/PNG/moon_full.png.import deleted file mode 100644 index 52616bf..0000000 --- a/background/PNG/moon_full.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://cjvefqy1v1rkb" -path="res://.godot/imported/moon_full.png-1901fe375751717f7e12da10e2bd522c.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/moon_full.png" -dest_files=["res://.godot/imported/moon_full.png-1901fe375751717f7e12da10e2bd522c.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/background/PNG/moon_half.png b/background/PNG/moon_half.png deleted file mode 100644 index c1ae4a8..0000000 Binary files a/background/PNG/moon_half.png and /dev/null differ diff --git a/background/PNG/moon_half.png.import b/background/PNG/moon_half.png.import deleted file mode 100644 index 30f9751..0000000 --- a/background/PNG/moon_half.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://cnabyosjet0jp" -path="res://.godot/imported/moon_half.png-2b6e23075e54f639aec9d498aa4e8517.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/moon_half.png" -dest_files=["res://.godot/imported/moon_half.png-2b6e23075e54f639aec9d498aa4e8517.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/background/PNG/piramid.png b/background/PNG/piramid.png deleted file mode 100644 index 54d215f..0000000 Binary files a/background/PNG/piramid.png and /dev/null differ diff --git a/background/PNG/piramid.png.import b/background/PNG/piramid.png.import deleted file mode 100644 index 492d4e2..0000000 --- a/background/PNG/piramid.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://cx0io5bykjymb" -path="res://.godot/imported/piramid.png-928803250037f5eb64d4f6837d5cd999.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/piramid.png" -dest_files=["res://.godot/imported/piramid.png-928803250037f5eb64d4f6837d5cd999.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/background/PNG/sun.png b/background/PNG/sun.png deleted file mode 100644 index 14c472e..0000000 Binary files a/background/PNG/sun.png and /dev/null differ diff --git a/background/PNG/sun.png.import b/background/PNG/sun.png.import deleted file mode 100644 index 6fe7c66..0000000 --- a/background/PNG/sun.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://545xuxnt7ul8" -path="res://.godot/imported/sun.png-eca78b858d5c5f626c7f4c08fafd90e2.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/sun.png" -dest_files=["res://.godot/imported/sun.png-eca78b858d5c5f626c7f4c08fafd90e2.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/background/PNG/temple.png b/background/PNG/temple.png deleted file mode 100644 index bd06410..0000000 Binary files a/background/PNG/temple.png and /dev/null differ diff --git a/background/PNG/temple.png.import b/background/PNG/temple.png.import deleted file mode 100644 index b9ac5da..0000000 --- a/background/PNG/temple.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://cffvwkwjwd5pi" -path="res://.godot/imported/temple.png-e2293667595491cf23ae83fadfb518d3.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/temple.png" -dest_files=["res://.godot/imported/temple.png-e2293667595491cf23ae83fadfb518d3.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/background/PNG/tower_beige.png b/background/PNG/tower_beige.png deleted file mode 100644 index 000535f..0000000 Binary files a/background/PNG/tower_beige.png and /dev/null differ diff --git a/background/PNG/tower_beige.png.import b/background/PNG/tower_beige.png.import deleted file mode 100644 index 9dae9aa..0000000 --- a/background/PNG/tower_beige.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://dlyw32oeh5urx" -path="res://.godot/imported/tower_beige.png-f42672a8e7afb0b3af600902d9ae992b.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/tower_beige.png" -dest_files=["res://.godot/imported/tower_beige.png-f42672a8e7afb0b3af600902d9ae992b.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/background/PNG/tower_grey.png b/background/PNG/tower_grey.png deleted file mode 100644 index 82177e2..0000000 Binary files a/background/PNG/tower_grey.png and /dev/null differ diff --git a/background/PNG/tower_grey.png.import b/background/PNG/tower_grey.png.import deleted file mode 100644 index c859f31..0000000 --- a/background/PNG/tower_grey.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://dwiqmn40uucaa" -path="res://.godot/imported/tower_grey.png-52a1565a74c76d63d2a4ada8862d066e.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/tower_grey.png" -dest_files=["res://.godot/imported/tower_grey.png-52a1565a74c76d63d2a4ada8862d066e.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/background/PNG/tree01.png b/background/PNG/tree01.png deleted file mode 100644 index c84f726..0000000 Binary files a/background/PNG/tree01.png and /dev/null differ diff --git a/background/PNG/tree01.png.import b/background/PNG/tree01.png.import deleted file mode 100644 index c322a79..0000000 --- a/background/PNG/tree01.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://dsfjm3lduljda" -path="res://.godot/imported/tree01.png-8021edf474ab2cbaf9ec10b32de35282.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/tree01.png" -dest_files=["res://.godot/imported/tree01.png-8021edf474ab2cbaf9ec10b32de35282.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/background/PNG/tree02.png b/background/PNG/tree02.png deleted file mode 100644 index 404feac..0000000 Binary files a/background/PNG/tree02.png and /dev/null differ diff --git a/background/PNG/tree02.png.import b/background/PNG/tree02.png.import deleted file mode 100644 index cb897ef..0000000 --- a/background/PNG/tree02.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://cbsvnmeq5pl1e" -path="res://.godot/imported/tree02.png-10475eb16be23737fb3c082ce9beb65b.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/tree02.png" -dest_files=["res://.godot/imported/tree02.png-10475eb16be23737fb3c082ce9beb65b.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/background/PNG/tree03.png b/background/PNG/tree03.png deleted file mode 100644 index 21b25d8..0000000 Binary files a/background/PNG/tree03.png and /dev/null differ diff --git a/background/PNG/tree03.png.import b/background/PNG/tree03.png.import deleted file mode 100644 index 99f4252..0000000 --- a/background/PNG/tree03.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://cu4hx8cdabwv" -path="res://.godot/imported/tree03.png-20bd61c7e9a4872b26b36182c37a8c29.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/tree03.png" -dest_files=["res://.godot/imported/tree03.png-20bd61c7e9a4872b26b36182c37a8c29.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/background/PNG/tree04.png b/background/PNG/tree04.png deleted file mode 100644 index 000e28c..0000000 Binary files a/background/PNG/tree04.png and /dev/null differ diff --git a/background/PNG/tree04.png.import b/background/PNG/tree04.png.import deleted file mode 100644 index 7376a08..0000000 --- a/background/PNG/tree04.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://c8q2mgbfyhkec" -path="res://.godot/imported/tree04.png-4d791a1cfb5b71ee3085c686eeb0d971.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/tree04.png" -dest_files=["res://.godot/imported/tree04.png-4d791a1cfb5b71ee3085c686eeb0d971.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/background/PNG/tree05.png b/background/PNG/tree05.png deleted file mode 100644 index 0184507..0000000 Binary files a/background/PNG/tree05.png and /dev/null differ diff --git a/background/PNG/tree05.png.import b/background/PNG/tree05.png.import deleted file mode 100644 index 9a4ec32..0000000 --- a/background/PNG/tree05.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://bntdbbbis6wbo" -path="res://.godot/imported/tree05.png-19fc733a8fa6c0eb9ea25cbfea3c3497.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/tree05.png" -dest_files=["res://.godot/imported/tree05.png-19fc733a8fa6c0eb9ea25cbfea3c3497.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/background/PNG/tree06.png b/background/PNG/tree06.png deleted file mode 100644 index 1e0a254..0000000 Binary files a/background/PNG/tree06.png and /dev/null differ diff --git a/background/PNG/tree06.png.import b/background/PNG/tree06.png.import deleted file mode 100644 index 0c7744f..0000000 --- a/background/PNG/tree06.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://3f67357cwjqj" -path="res://.godot/imported/tree06.png-8c5082580e045e550b4a985d0d823238.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/tree06.png" -dest_files=["res://.godot/imported/tree06.png-8c5082580e045e550b4a985d0d823238.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/background/PNG/tree07.png b/background/PNG/tree07.png deleted file mode 100644 index 89a9e77..0000000 Binary files a/background/PNG/tree07.png and /dev/null differ diff --git a/background/PNG/tree07.png.import b/background/PNG/tree07.png.import deleted file mode 100644 index 4f9f76b..0000000 --- a/background/PNG/tree07.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://cjqshusr1afjc" -path="res://.godot/imported/tree07.png-515926eac3b2138a24b5021eb4452160.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/tree07.png" -dest_files=["res://.godot/imported/tree07.png-515926eac3b2138a24b5021eb4452160.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/background/PNG/tree08.png b/background/PNG/tree08.png deleted file mode 100644 index 77e69fc..0000000 Binary files a/background/PNG/tree08.png and /dev/null differ diff --git a/background/PNG/tree08.png.import b/background/PNG/tree08.png.import deleted file mode 100644 index c6e53a1..0000000 --- a/background/PNG/tree08.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://bh7n7sjedll8e" -path="res://.godot/imported/tree08.png-e6fe047e46f307d543fab4ad8531610c.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/tree08.png" -dest_files=["res://.godot/imported/tree08.png-e6fe047e46f307d543fab4ad8531610c.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/background/PNG/tree09.png b/background/PNG/tree09.png deleted file mode 100644 index 790c5e5..0000000 Binary files a/background/PNG/tree09.png and /dev/null differ diff --git a/background/PNG/tree09.png.import b/background/PNG/tree09.png.import deleted file mode 100644 index 0d8f09e..0000000 --- a/background/PNG/tree09.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://c5riujdnjsdr3" -path="res://.godot/imported/tree09.png-e5279dcb6a8e64795fa99fc4531850db.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/tree09.png" -dest_files=["res://.godot/imported/tree09.png-e5279dcb6a8e64795fa99fc4531850db.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/background/PNG/tree10.png b/background/PNG/tree10.png deleted file mode 100644 index 213530c..0000000 Binary files a/background/PNG/tree10.png and /dev/null differ diff --git a/background/PNG/tree10.png.import b/background/PNG/tree10.png.import deleted file mode 100644 index e344814..0000000 --- a/background/PNG/tree10.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://c1wy2e1f7cf07" -path="res://.godot/imported/tree10.png-493bf3540d2828437c74c340411e2189.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/tree10.png" -dest_files=["res://.godot/imported/tree10.png-493bf3540d2828437c74c340411e2189.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/background/PNG/tree11.png b/background/PNG/tree11.png deleted file mode 100644 index efe026f..0000000 Binary files a/background/PNG/tree11.png and /dev/null differ diff --git a/background/PNG/tree11.png.import b/background/PNG/tree11.png.import deleted file mode 100644 index 5b335ee..0000000 --- a/background/PNG/tree11.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://5104exbijfdd" -path="res://.godot/imported/tree11.png-5210463605cfb3d9892f48930b81b0d0.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/tree11.png" -dest_files=["res://.godot/imported/tree11.png-5210463605cfb3d9892f48930b81b0d0.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/background/PNG/tree12.png b/background/PNG/tree12.png deleted file mode 100644 index 502df29..0000000 Binary files a/background/PNG/tree12.png and /dev/null differ diff --git a/background/PNG/tree12.png.import b/background/PNG/tree12.png.import deleted file mode 100644 index 20916cc..0000000 --- a/background/PNG/tree12.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://146odcn1kfvn" -path="res://.godot/imported/tree12.png-3e69c3d62985b14dc66052b67dbf70ce.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/tree12.png" -dest_files=["res://.godot/imported/tree12.png-3e69c3d62985b14dc66052b67dbf70ce.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/background/PNG/tree13.png b/background/PNG/tree13.png deleted file mode 100644 index 6f7be9a..0000000 Binary files a/background/PNG/tree13.png and /dev/null differ diff --git a/background/PNG/tree13.png.import b/background/PNG/tree13.png.import deleted file mode 100644 index 048dffa..0000000 --- a/background/PNG/tree13.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://bgvhvjvsgp05w" -path="res://.godot/imported/tree13.png-67d9eab113fec5b713967a0dfe2ebabc.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/tree13.png" -dest_files=["res://.godot/imported/tree13.png-67d9eab113fec5b713967a0dfe2ebabc.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/background/PNG/tree14.png b/background/PNG/tree14.png deleted file mode 100644 index d0ff797..0000000 Binary files a/background/PNG/tree14.png and /dev/null differ diff --git a/background/PNG/tree14.png.import b/background/PNG/tree14.png.import deleted file mode 100644 index 3d9a4c5..0000000 --- a/background/PNG/tree14.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://xni7qmmcbvbb" -path="res://.godot/imported/tree14.png-1ec9141cf29b4bf57a7ca5915b68d45d.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/tree14.png" -dest_files=["res://.godot/imported/tree14.png-1ec9141cf29b4bf57a7ca5915b68d45d.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/background/PNG/tree15.png b/background/PNG/tree15.png deleted file mode 100644 index 43bb756..0000000 Binary files a/background/PNG/tree15.png and /dev/null differ diff --git a/background/PNG/tree15.png.import b/background/PNG/tree15.png.import deleted file mode 100644 index 89f54fc..0000000 --- a/background/PNG/tree15.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://b71epop1jf4o5" -path="res://.godot/imported/tree15.png-3fa0c128a871248bcca38b7e169c8ab1.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/tree15.png" -dest_files=["res://.godot/imported/tree15.png-3fa0c128a871248bcca38b7e169c8ab1.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/background/PNG/tree16.png b/background/PNG/tree16.png deleted file mode 100644 index b3179cd..0000000 Binary files a/background/PNG/tree16.png and /dev/null differ diff --git a/background/PNG/tree16.png.import b/background/PNG/tree16.png.import deleted file mode 100644 index ea1106c..0000000 --- a/background/PNG/tree16.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://c7oms4x2jfumh" -path="res://.godot/imported/tree16.png-f3e06ce891561e25c7f3fef56a14693f.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/tree16.png" -dest_files=["res://.godot/imported/tree16.png-f3e06ce891561e25c7f3fef56a14693f.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/background/PNG/tree17.png b/background/PNG/tree17.png deleted file mode 100644 index 2f87290..0000000 Binary files a/background/PNG/tree17.png and /dev/null differ diff --git a/background/PNG/tree17.png.import b/background/PNG/tree17.png.import deleted file mode 100644 index d0afbcf..0000000 --- a/background/PNG/tree17.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://blf7hvx7c7bmi" -path="res://.godot/imported/tree17.png-f5c76f629dee3016e484c48eb9b65efb.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/tree17.png" -dest_files=["res://.godot/imported/tree17.png-f5c76f629dee3016e484c48eb9b65efb.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/background/PNG/tree18.png b/background/PNG/tree18.png deleted file mode 100644 index 952998a..0000000 Binary files a/background/PNG/tree18.png and /dev/null differ diff --git a/background/PNG/tree18.png.import b/background/PNG/tree18.png.import deleted file mode 100644 index f098501..0000000 --- a/background/PNG/tree18.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://m17ejecskiwe" -path="res://.godot/imported/tree18.png-fc3342e3044c911345fa62e7c3d36e0f.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/tree18.png" -dest_files=["res://.godot/imported/tree18.png-fc3342e3044c911345fa62e7c3d36e0f.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/background/PNG/tree19.png b/background/PNG/tree19.png deleted file mode 100644 index 284af21..0000000 Binary files a/background/PNG/tree19.png and /dev/null differ diff --git a/background/PNG/tree19.png.import b/background/PNG/tree19.png.import deleted file mode 100644 index 0f00d9b..0000000 --- a/background/PNG/tree19.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://c2nwg0iqyl2fu" -path="res://.godot/imported/tree19.png-a346c9aaad43234fc5959df5c04d7d35.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/tree19.png" -dest_files=["res://.godot/imported/tree19.png-a346c9aaad43234fc5959df5c04d7d35.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/background/PNG/tree20.png b/background/PNG/tree20.png deleted file mode 100644 index abc2997..0000000 Binary files a/background/PNG/tree20.png and /dev/null differ diff --git a/background/PNG/tree20.png.import b/background/PNG/tree20.png.import deleted file mode 100644 index c1d3cbd..0000000 --- a/background/PNG/tree20.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://bbnu7sat4uky8" -path="res://.godot/imported/tree20.png-6cbe75a2c104b6d4bf599c70b79b0201.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/tree20.png" -dest_files=["res://.godot/imported/tree20.png-6cbe75a2c104b6d4bf599c70b79b0201.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/background/PNG/tree21.png b/background/PNG/tree21.png deleted file mode 100644 index 9c29f49..0000000 Binary files a/background/PNG/tree21.png and /dev/null differ diff --git a/background/PNG/tree21.png.import b/background/PNG/tree21.png.import deleted file mode 100644 index 1bd22fa..0000000 --- a/background/PNG/tree21.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://d36bwyjbwpog1" -path="res://.godot/imported/tree21.png-b458d7ed303a106a9157f91a444687e1.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/tree21.png" -dest_files=["res://.godot/imported/tree21.png-b458d7ed303a106a9157f91a444687e1.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/background/PNG/tree22.png b/background/PNG/tree22.png deleted file mode 100644 index 45f19dd..0000000 Binary files a/background/PNG/tree22.png and /dev/null differ diff --git a/background/PNG/tree22.png.import b/background/PNG/tree22.png.import deleted file mode 100644 index 25fbed4..0000000 --- a/background/PNG/tree22.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://bcrs7gqx6uwl1" -path="res://.godot/imported/tree22.png-2631d35bb688dcb9b2645f41cb2c53bb.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/tree22.png" -dest_files=["res://.godot/imported/tree22.png-2631d35bb688dcb9b2645f41cb2c53bb.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/background/PNG/tree23.png b/background/PNG/tree23.png deleted file mode 100644 index 1c2f23e..0000000 Binary files a/background/PNG/tree23.png and /dev/null differ diff --git a/background/PNG/tree23.png.import b/background/PNG/tree23.png.import deleted file mode 100644 index 37a9b6b..0000000 --- a/background/PNG/tree23.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://dvaflci4yw5wc" -path="res://.godot/imported/tree23.png-2d116180427a457805d67b55725223bf.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/tree23.png" -dest_files=["res://.godot/imported/tree23.png-2d116180427a457805d67b55725223bf.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/background/PNG/tree24.png b/background/PNG/tree24.png deleted file mode 100644 index 6f79314..0000000 Binary files a/background/PNG/tree24.png and /dev/null differ diff --git a/background/PNG/tree24.png.import b/background/PNG/tree24.png.import deleted file mode 100644 index 4932977..0000000 --- a/background/PNG/tree24.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://cxdp7q8jdq237" -path="res://.godot/imported/tree24.png-e14bd64461629594527968ac54bf913a.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/tree24.png" -dest_files=["res://.godot/imported/tree24.png-e14bd64461629594527968ac54bf913a.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/background/PNG/tree25.png b/background/PNG/tree25.png deleted file mode 100644 index fa9ff5e..0000000 Binary files a/background/PNG/tree25.png and /dev/null differ diff --git a/background/PNG/tree25.png.import b/background/PNG/tree25.png.import deleted file mode 100644 index 606cf46..0000000 --- a/background/PNG/tree25.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://cwpk1hqgr2877" -path="res://.godot/imported/tree25.png-a6bafe0564c90d9cdba658bfa22c29cd.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/tree25.png" -dest_files=["res://.godot/imported/tree25.png-a6bafe0564c90d9cdba658bfa22c29cd.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/background/PNG/tree26.png b/background/PNG/tree26.png deleted file mode 100644 index b3aae61..0000000 Binary files a/background/PNG/tree26.png and /dev/null differ diff --git a/background/PNG/tree26.png.import b/background/PNG/tree26.png.import deleted file mode 100644 index 3ed107b..0000000 --- a/background/PNG/tree26.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://t6a7i8dvxw1q" -path="res://.godot/imported/tree26.png-c710753b2dc98f2f64cacd89e2306220.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/tree26.png" -dest_files=["res://.godot/imported/tree26.png-c710753b2dc98f2f64cacd89e2306220.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/background/PNG/tree27.png b/background/PNG/tree27.png deleted file mode 100644 index 92b37c9..0000000 Binary files a/background/PNG/tree27.png and /dev/null differ diff --git a/background/PNG/tree27.png.import b/background/PNG/tree27.png.import deleted file mode 100644 index 1946d82..0000000 --- a/background/PNG/tree27.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://striblg2nyya" -path="res://.godot/imported/tree27.png-4c2eac2975108c398fb170f8f793f744.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/tree27.png" -dest_files=["res://.godot/imported/tree27.png-4c2eac2975108c398fb170f8f793f744.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/background/PNG/tree28.png b/background/PNG/tree28.png deleted file mode 100644 index 9d5f9e0..0000000 Binary files a/background/PNG/tree28.png and /dev/null differ diff --git a/background/PNG/tree28.png.import b/background/PNG/tree28.png.import deleted file mode 100644 index d4875fa..0000000 --- a/background/PNG/tree28.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://dc40ot70a3c0u" -path="res://.godot/imported/tree28.png-b1d25342e264ca4a589fb39c8bffc5fd.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/tree28.png" -dest_files=["res://.godot/imported/tree28.png-b1d25342e264ca4a589fb39c8bffc5fd.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/background/PNG/tree29.png b/background/PNG/tree29.png deleted file mode 100644 index ee1a360..0000000 Binary files a/background/PNG/tree29.png and /dev/null differ diff --git a/background/PNG/tree29.png.import b/background/PNG/tree29.png.import deleted file mode 100644 index ec97e47..0000000 --- a/background/PNG/tree29.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://cgpcfqccf6e4x" -path="res://.godot/imported/tree29.png-28a42507502939bb98810b8a99e1e69a.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/tree29.png" -dest_files=["res://.godot/imported/tree29.png-28a42507502939bb98810b8a99e1e69a.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/background/PNG/tree30.png b/background/PNG/tree30.png deleted file mode 100644 index a727b3e..0000000 Binary files a/background/PNG/tree30.png and /dev/null differ diff --git a/background/PNG/tree30.png.import b/background/PNG/tree30.png.import deleted file mode 100644 index e401e86..0000000 --- a/background/PNG/tree30.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://cq056j45qbvpc" -path="res://.godot/imported/tree30.png-9180816be95e57f79ece913504cc64d0.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/tree30.png" -dest_files=["res://.godot/imported/tree30.png-9180816be95e57f79ece913504cc64d0.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/background/PNG/tree31.png b/background/PNG/tree31.png deleted file mode 100644 index 5dd4799..0000000 Binary files a/background/PNG/tree31.png and /dev/null differ diff --git a/background/PNG/tree31.png.import b/background/PNG/tree31.png.import deleted file mode 100644 index 8785b66..0000000 --- a/background/PNG/tree31.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://oex6btepruwm" -path="res://.godot/imported/tree31.png-dc437c798c4bcd5d6259ffb1c21fa393.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/tree31.png" -dest_files=["res://.godot/imported/tree31.png-dc437c798c4bcd5d6259ffb1c21fa393.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/background/PNG/tree32.png b/background/PNG/tree32.png deleted file mode 100644 index a992735..0000000 Binary files a/background/PNG/tree32.png and /dev/null differ diff --git a/background/PNG/tree32.png.import b/background/PNG/tree32.png.import deleted file mode 100644 index 85f6cd1..0000000 --- a/background/PNG/tree32.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://cy56v6imu07qn" -path="res://.godot/imported/tree32.png-527bb2d29d3ade1498e5ac10f39feddb.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/tree32.png" -dest_files=["res://.godot/imported/tree32.png-527bb2d29d3ade1498e5ac10f39feddb.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/background/PNG/tree33.png b/background/PNG/tree33.png deleted file mode 100644 index a78c588..0000000 Binary files a/background/PNG/tree33.png and /dev/null differ diff --git a/background/PNG/tree33.png.import b/background/PNG/tree33.png.import deleted file mode 100644 index 4d5aac1..0000000 --- a/background/PNG/tree33.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://b4gs6lqa1hfxo" -path="res://.godot/imported/tree33.png-975724f379229eefedffbec6a14463df.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/tree33.png" -dest_files=["res://.godot/imported/tree33.png-975724f379229eefedffbec6a14463df.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/background/PNG/tree34.png b/background/PNG/tree34.png deleted file mode 100644 index 8b16803..0000000 Binary files a/background/PNG/tree34.png and /dev/null differ diff --git a/background/PNG/tree34.png.import b/background/PNG/tree34.png.import deleted file mode 100644 index 5ade864..0000000 --- a/background/PNG/tree34.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://cdcyhbhor7b53" -path="res://.godot/imported/tree34.png-a5ec6fd3bf19e664db110210a09d2480.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/tree34.png" -dest_files=["res://.godot/imported/tree34.png-a5ec6fd3bf19e664db110210a09d2480.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/background/PNG/tree35.png b/background/PNG/tree35.png deleted file mode 100644 index 5cab7d5..0000000 Binary files a/background/PNG/tree35.png and /dev/null differ diff --git a/background/PNG/tree35.png.import b/background/PNG/tree35.png.import deleted file mode 100644 index f2e40c3..0000000 --- a/background/PNG/tree35.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://bl6cf5uemyb2h" -path="res://.godot/imported/tree35.png-2993cdf7b891cf72447b56ed7fa64790.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://background/PNG/tree35.png" -dest_files=["res://.godot/imported/tree35.png-2993cdf7b891cf72447b56ed7fa64790.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/default_bus_layout.tres b/default_bus_layout.tres deleted file mode 100644 index 665b0e9..0000000 --- a/default_bus_layout.tres +++ /dev/null @@ -1,21 +0,0 @@ -[gd_resource type="AudioBusLayout" format=3] - -[resource] -bus/0/name = &"Master" -bus/0/solo = false -bus/0/mute = false -bus/0/bypass_fx = false -bus/0/volume_db = 0.0 -bus/0/send = &"" -bus/1/name = &"Music" -bus/1/solo = false -bus/1/mute = false -bus/1/bypass_fx = false -bus/1/volume_db = 0.0 -bus/1/send = &"Master" -bus/2/name = &"SFX" -bus/2/solo = false -bus/2/mute = false -bus/2/bypass_fx = false -bus/2/volume_db = 0.0 -bus/2/send = &"Master" diff --git a/icon.svg.import b/icon.svg.import index 67b2086..629ecb6 100644 --- a/icon.svg.import +++ b/icon.svg.import @@ -2,7 +2,7 @@ importer="texture" type="CompressedTexture2D" -uid="uid://5s1n2ct4lktv" +uid="uid://cxbqlxo1m50v3" path="res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex" metadata={ "vram_texture": false diff --git a/project.godot b/project.godot index 8b3a1c5..a3458ca 100644 --- a/project.godot +++ b/project.godot @@ -10,65 +10,18 @@ config_version=5 [application] -config/name="GWorld" -run/main_scene="uid://b6mhe7465wwge" +config/name="g-world" config/features=PackedStringArray("4.7", "Forward Plus") config/icon="res://icon.svg" -[autoload] - -_mcp_game_helper="*res://addons/godot_ai/runtime/game_helper.gd" -GameSettings="*res://scripts/autoload/game_settings.gd" -SaveManager="*res://scripts/autoload/save_manager.gd" -DevConsole="*res://scenes/ui/dev_console.tscn" - [display] -window/size/viewport_width=1920 -window/size/viewport_height=1080 window/stretch/mode="canvas_items" window/stretch/aspect="expand" [dotnet] -project/assembly_name="GWorld" - -[editor_plugins] - -enabled=PackedStringArray("res://addons/godot_ai/plugin.cfg") - -[input] - -move_left={ -"deadzone": 0.5, -"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":65,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) -] -} -move_right={ -"deadzone": 0.5, -"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":68,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) -] -} -interact={ -"deadzone": 0.5, -"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":69,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) -] -} -pause={ -"deadzone": 0.5, -"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":4194305,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) -] -} -move_up={ -"deadzone": 0.5, -"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":87,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) -] -} -move_down={ -"deadzone": 0.5, -"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":83,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) -] -} +project/assembly_name="g-world" [physics] diff --git a/scenes/game/game.tscn b/scenes/game/game.tscn deleted file mode 100644 index bdb8b8e..0000000 --- a/scenes/game/game.tscn +++ /dev/null @@ -1,88 +0,0 @@ -[gd_scene format=3 uid="uid://psbbnpm6g0nc"] - -[ext_resource type="Script" path="res://scripts/game/game_stub.gd" id="1_0sr1o"] -[ext_resource type="PackedScene" uid="uid://cvx4ot7ugyprk" path="res://scenes/ui/pause_menu.tscn" id="1_7h61r"] -[ext_resource type="Theme" uid="uid://c6kkopjj3snag" path="res://themes/main_menu.theme.tres" id="2_0sr1o"] - -[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_kelw5"] -sky_top_color = Color(0.039215688, 0.078431375, 0.15686275, 1) -sky_horizon_color = Color(0.07058824, 0.1882353, 0.2509804, 1) -ground_bottom_color = Color(0.019607844, 0.039215688, 0.07058824, 1) -ground_horizon_color = Color(0.07058824, 0.1882353, 0.2509804, 1) - -[sub_resource type="Sky" id="Sky_lfrn8"] -sky_material = SubResource("ProceduralSkyMaterial_kelw5") - -[sub_resource type="Environment" id="Environment_5i0tg"] -background_mode = 2 -sky = SubResource("Sky_lfrn8") -ambient_light_source = 2 -ambient_light_color = Color(0.2, 0.22, 0.35, 1) -ambient_light_energy = 0.4 - -[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_bdhmt"] -albedo_color = Color(0.07450981, 0.16470589, 0.2, 1) -roughness = 0.95 - -[sub_resource type="PlaneMesh" id="PlaneMesh_87uf6"] -size = Vector2(60, 60) - -[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_2a8rs"] -albedo_color = Color(0.18039216, 0.9019608, 0.77254903, 1) -metallic = 0.1 -roughness = 0.4 - -[sub_resource type="BoxMesh" id="BoxMesh_4j704"] -size = Vector3(2, 2, 2) - -[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_kp23o"] -albedo_color = Color(0.48235294, 0.41960785, 0.9607843, 1) -metallic = 0.1 -roughness = 0.5 - -[sub_resource type="BoxMesh" id="BoxMesh_5jirj"] -size = Vector3(1.2, 3.4, 1.2) - -[node name="Game" type="Node3D" unique_id=1106458558] -script = ExtResource("1_0sr1o") - -[node name="WorldEnvironment" type="WorldEnvironment" parent="." unique_id=1519444008] -environment = SubResource("Environment_5i0tg") - -[node name="Sun" type="DirectionalLight3D" parent="." unique_id=1139733157] -transform = Transform3D(-0.6946583, 0.53457373, -0.48133233, 0, 0.66913056, 0.74314487, 0.7193399, 0.5162317, -0.46481708, 0, 0, 0) -light_color = Color(0.7490196, 0.9019608, 1, 1) -light_energy = 0.9 -shadow_enabled = true - -[node name="Camera3D" type="Camera3D" parent="." unique_id=2037025428] -transform = Transform3D(0.809017, -0.18163563, 0.559017, 0, 0.95105654, 0.309017, -0.58778524, -0.25, 0.7694209, 6.5, 4.2, 8.5) -current = true - -[node name="Ground" type="MeshInstance3D" parent="." unique_id=1318815356] -material_override = SubResource("StandardMaterial3D_bdhmt") -mesh = SubResource("PlaneMesh_87uf6") - -[node name="BoxA" type="MeshInstance3D" parent="." unique_id=1331389928] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0) -material_override = SubResource("StandardMaterial3D_2a8rs") -mesh = SubResource("BoxMesh_4j704") - -[node name="BoxB" type="MeshInstance3D" parent="." unique_id=535287837] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -3.2, 1.7, -2.4) -material_override = SubResource("StandardMaterial3D_kp23o") -mesh = SubResource("BoxMesh_5jirj") - -[node name="PauseMenu" parent="." unique_id=1649378803 instance=ExtResource("1_7h61r")] - -[node name="Hud" type="CanvasLayer" parent="." unique_id=824330719] - -[node name="Hint" type="Label" parent="Hud" unique_id=47403933] -offset_left = 40.0 -offset_top = 40.0 -offset_right = 279.0 -offset_bottom = 63.0 -theme = ExtResource("2_0sr1o") -theme_override_colors/font_color = Color(0.56078434, 0.64705884, 0.7294118, 1) -theme_override_font_sizes/font_size = 18 -text = "Сцена-заглушка. Esc — пауза." diff --git a/scenes/game/vault.tscn b/scenes/game/vault.tscn deleted file mode 100644 index fb617b2..0000000 --- a/scenes/game/vault.tscn +++ /dev/null @@ -1,219 +0,0 @@ -[gd_scene format=3 uid="uid://dprxap0ioe3ps"] - -[ext_resource type="Script" uid="uid://lsclvc1dgviq" path="res://scripts/game/vault_scene.gd" id="1_o8yry"] -[ext_resource type="Script" uid="uid://ddaqvur2yl61c" path="res://scripts/game/sky_view.gd" id="2_lffpp"] -[ext_resource type="Script" uid="uid://bvimo3kgmefgf" path="res://scripts/game/vault_view.gd" id="2_mkhle"] -[ext_resource type="Script" uid="uid://c4c36o4o35gqw" path="res://scripts/game/surface_view.gd" id="3_lvdr8"] -[ext_resource type="Script" uid="uid://dg751mcd0v178" path="res://scripts/game/vault_camera.gd" id="3_x7j0k"] -[ext_resource type="Theme" uid="uid://c6kkopjj3snag" path="res://themes/main_menu.theme.tres" id="4_sch52"] -[ext_resource type="PackedScene" uid="uid://cvx4ot7ugyprk" path="res://scenes/ui/pause_menu.tscn" id="5_lffpp"] -[ext_resource type="Script" uid="uid://7wstqw8ve2he" path="res://scripts/game/game_clock.gd" id="6_mkhle"] -[ext_resource type="Script" uid="uid://dpifh4u0gmgxw" path="res://scripts/ui/weather_icon.gd" id="7_lvdr8"] -[ext_resource type="Script" uid="uid://by1cwvs3fc3pa" path="res://scripts/game/weather_system.gd" id="9_m0p8k"] - -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_lvdr8"] -content_margin_left = 22.0 -content_margin_top = 12.0 -content_margin_right = 22.0 -content_margin_bottom = 12.0 -bg_color = Color(0.043137256, 0.07450981, 0.13333334, 0.8784314) -border_width_left = 1 -border_width_top = 1 -border_width_right = 1 -border_width_bottom = 1 -border_color = Color(0.18039216, 0.9019608, 0.77254903, 0.2) -corner_radius_top_left = 12 -corner_radius_top_right = 12 -corner_radius_bottom_right = 12 -corner_radius_bottom_left = 12 - -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_m0p8k"] -content_margin_left = 20.0 -content_margin_top = 14.0 -content_margin_right = 20.0 -content_margin_bottom = 12.0 -bg_color = Color(0.043137256, 0.07450981, 0.13333334, 0.9019608) -border_width_left = 1 -border_width_top = 1 -border_width_right = 1 -border_width_bottom = 1 -border_color = Color(0.18039216, 0.9019608, 0.77254903, 0.2) -corner_radius_top_left = 14 -corner_radius_top_right = 14 -corner_radius_bottom_right = 14 -corner_radius_bottom_left = 14 - -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_mkhle"] -content_margin_left = 14.0 -content_margin_top = 8.0 -content_margin_right = 14.0 -content_margin_bottom = 8.0 -bg_color = Color(0.043137256, 0.07450981, 0.13333334, 0.8784314) -border_width_left = 1 -border_width_top = 1 -border_width_right = 1 -border_width_bottom = 1 -border_color = Color(0.18039216, 0.9019608, 0.77254903, 0.2) -corner_radius_top_left = 10 -corner_radius_top_right = 10 -corner_radius_bottom_right = 10 -corner_radius_bottom_left = 10 - -[node name="Vault" type="Node2D" unique_id=1382797618] -script = ExtResource("1_o8yry") - -[node name="Sky" type="Node2D" parent="." unique_id=1428657021] -script = ExtResource("2_lffpp") - -[node name="Surface" type="Node2D" parent="." unique_id=320825958] -script = ExtResource("3_lvdr8") - -[node name="View" type="Node2D" parent="." unique_id=1238774489] -script = ExtResource("2_mkhle") - -[node name="Camera" type="Camera2D" parent="." unique_id=702468079] -script = ExtResource("3_x7j0k") - -[node name="Hud" type="CanvasLayer" parent="." unique_id=1492666604] - -[node name="Root" type="Control" parent="Hud" unique_id=344458851] -layout_mode = 3 -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -mouse_filter = 2 -theme = ExtResource("4_sch52") - -[node name="TopBar" type="PanelContainer" parent="Hud/Root" unique_id=54306824] -layout_mode = 0 -offset_left = 36.0 -offset_top = 36.0 -offset_right = 36.0 -offset_bottom = 36.0 -theme_override_styles/panel = SubResource("StyleBoxFlat_lvdr8") - -[node name="Stats" type="HBoxContainer" parent="Hud/Root/TopBar" unique_id=1335064924] -layout_mode = 2 -theme_override_constants/separation = 34 - -[node name="BottomAnchor" type="MarginContainer" parent="Hud/Root" unique_id=1579352404] -layout_mode = 0 -anchor_right = 1.0 -anchor_bottom = 1.0 -mouse_filter = 2 -theme_override_constants/margin_left = 36 -theme_override_constants/margin_top = 36 -theme_override_constants/margin_right = 36 -theme_override_constants/margin_bottom = 36 - -[node name="Row" type="HBoxContainer" parent="Hud/Root/BottomAnchor" unique_id=1936091014] -layout_mode = 2 -mouse_filter = 2 -alignment = 1 - -[node name="BuildBar" type="PanelContainer" parent="Hud/Root/BottomAnchor/Row" unique_id=2023620303] -layout_mode = 2 -size_flags_vertical = 8 -theme_override_styles/panel = SubResource("StyleBoxFlat_m0p8k") - -[node name="Panel" type="VBoxContainer" parent="Hud/Root/BottomAnchor/Row/BuildBar" unique_id=1051865182] -layout_mode = 2 -theme_override_constants/separation = 10 - -[node name="Tools" type="HBoxContainer" parent="Hud/Root/BottomAnchor/Row/BuildBar/Panel" unique_id=375147046] -layout_mode = 2 -theme_override_constants/separation = 8 -alignment = 1 - -[node name="Status" type="Label" parent="Hud/Root/BottomAnchor/Row/BuildBar/Panel" unique_id=1253597500] -layout_mode = 2 -theme_override_colors/font_color = Color(0.3647059, 0.44705883, 0.53333336, 1) -theme_override_font_sizes/font_size = 15 -horizontal_alignment = 1 - -[node name="TopRight" type="MarginContainer" parent="Hud/Root" unique_id=417759891] -layout_mode = 0 -anchor_right = 1.0 -anchor_bottom = 1.0 -mouse_filter = 2 -theme_override_constants/margin_left = 36 -theme_override_constants/margin_top = 36 -theme_override_constants/margin_right = 36 -theme_override_constants/margin_bottom = 36 - -[node name="Row" type="HBoxContainer" parent="Hud/Root/TopRight" unique_id=705018436] -layout_mode = 2 -size_flags_vertical = 0 -mouse_filter = 2 -alignment = 2 - -[node name="ClockBar" type="PanelContainer" parent="Hud/Root/TopRight/Row" unique_id=2028708536] -layout_mode = 2 -theme_override_styles/panel = SubResource("StyleBoxFlat_mkhle") - -[node name="Body" type="VBoxContainer" parent="Hud/Root/TopRight/Row/ClockBar" unique_id=220234733] -layout_mode = 2 -theme_override_constants/separation = 6 - -[node name="Climate" type="HBoxContainer" parent="Hud/Root/TopRight/Row/ClockBar/Body" unique_id=1529257714] -layout_mode = 2 -theme_override_constants/separation = 8 -alignment = 2 - -[node name="Icon" type="Control" parent="Hud/Root/TopRight/Row/ClockBar/Body/Climate" unique_id=788552715] -custom_minimum_size = Vector2(22, 22) -layout_mode = 2 -size_flags_vertical = 4 -script = ExtResource("7_lvdr8") - -[node name="WeatherLabel" type="Label" parent="Hud/Root/TopRight/Row/ClockBar/Body/Climate" unique_id=214206235] -layout_mode = 2 -theme_override_colors/font_color = Color(0.7764706, 0.83137256, 0.8784314, 1) -theme_override_font_sizes/font_size = 14 -text = "Ясно" -vertical_alignment = 1 - -[node name="TempLabel" type="Label" parent="Hud/Root/TopRight/Row/ClockBar/Body/Climate" unique_id=663157161] -layout_mode = 2 -theme_override_colors/font_color = Color(0.9490196, 0.69411767, 0.20392157, 1) -theme_override_font_sizes/font_size = 14 -text = "8°C" -vertical_alignment = 1 - -[node name="WindLabel" type="Label" parent="Hud/Root/TopRight/Row/ClockBar/Body/Climate" unique_id=298035379] -layout_mode = 2 -theme_override_colors/font_color = Color(0.48235294, 0.56078434, 0.6392157, 1) -theme_override_font_sizes/font_size = 14 -text = "2 м/с" -vertical_alignment = 1 - -[node name="Moment" type="HBoxContainer" parent="Hud/Root/TopRight/Row/ClockBar/Body" unique_id=195744038] -layout_mode = 2 -theme_override_constants/separation = 10 -alignment = 2 - -[node name="DateLabel" type="Label" parent="Hud/Root/TopRight/Row/ClockBar/Body/Moment" unique_id=1045252723] -layout_mode = 2 -theme_override_colors/font_color = Color(0.56078434, 0.64705884, 0.7294118, 1) -theme_override_font_sizes/font_size = 14 -text = "1 апреля 2012" -vertical_alignment = 1 - -[node name="TimeLabel" type="Label" parent="Hud/Root/TopRight/Row/ClockBar/Body/Moment" unique_id=686404941] -layout_mode = 2 -theme_override_colors/font_color = Color(0.18039216, 0.9019608, 0.77254903, 1) -theme_override_font_sizes/font_size = 20 -text = "06:00" - -[node name="Controls" type="HBoxContainer" parent="Hud/Root/TopRight/Row/ClockBar/Body" unique_id=278368540] -layout_mode = 2 -theme_override_constants/separation = 4 -alignment = 2 - -[node name="PauseMenu" parent="." unique_id=1649378803 instance=ExtResource("5_lffpp")] - -[node name="Clock" type="Node" parent="." unique_id=1353564659] -script = ExtResource("6_mkhle") - -[node name="Weather" type="Node" parent="." unique_id=1790958949] -script = ExtResource("9_m0p8k") diff --git a/scenes/ui/dev_console.tscn b/scenes/ui/dev_console.tscn deleted file mode 100644 index a84453f..0000000 --- a/scenes/ui/dev_console.tscn +++ /dev/null @@ -1,60 +0,0 @@ -[gd_scene format=3 uid="uid://wddada4uxq4s"] - -[ext_resource type="Script" uid="uid://bp5qxf7p5q3ty" path="res://scripts/ui/dev_console.gd" id="1_0be3j"] -[ext_resource type="Theme" uid="uid://c6kkopjj3snag" path="res://themes/main_menu.theme.tres" id="2_4dryq"] - -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_fk3y3"] -content_margin_left = 20.0 -content_margin_top = 16.0 -content_margin_right = 20.0 -content_margin_bottom = 16.0 -bg_color = Color(0.019607844, 0.039215688, 0.078431375, 0.9490196) -border_width_bottom = 2 -border_color = Color(0.18039216, 0.9019608, 0.77254903, 0.6) - -[node name="DevConsole" type="CanvasLayer" unique_id=1036744236] -process_mode = 3 -layer = 200 -script = ExtResource("1_0be3j") - -[node name="Root" type="Control" parent="." unique_id=1883814073] -visible = false -layout_mode = 3 -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -mouse_filter = 2 -theme = ExtResource("2_4dryq") - -[node name="Panel" type="PanelContainer" parent="Root" unique_id=323575355] -layout_mode = 0 -anchor_right = 1.0 -anchor_bottom = 0.46 -theme_override_styles/panel = SubResource("StyleBoxFlat_fk3y3") - -[node name="Body" type="VBoxContainer" parent="Root/Panel" unique_id=1904841198] -layout_mode = 2 -theme_override_constants/separation = 8 - -[node name="Output" type="RichTextLabel" parent="Root/Panel/Body" unique_id=1032431750] -layout_mode = 2 -size_flags_vertical = 3 -theme_override_font_sizes/normal_font_size = 15 -bbcode_enabled = true -scroll_following = true - -[node name="InputRow" type="HBoxContainer" parent="Root/Panel/Body" unique_id=1053997656] -layout_mode = 2 -theme_override_constants/separation = 8 - -[node name="Prompt" type="Label" parent="Root/Panel/Body/InputRow" unique_id=1647652394] -layout_mode = 2 -theme_override_colors/font_color = Color(0.18039216, 0.9019608, 0.77254903, 1) -theme_override_font_sizes/font_size = 16 -text = ">" - -[node name="Input" type="LineEdit" parent="Root/Panel/Body/InputRow" unique_id=653784574] -layout_mode = 2 -size_flags_horizontal = 3 -theme_override_font_sizes/font_size = 16 -placeholder_text = "команда" diff --git a/scenes/ui/main_menu.tscn b/scenes/ui/main_menu.tscn deleted file mode 100644 index 6eef566..0000000 --- a/scenes/ui/main_menu.tscn +++ /dev/null @@ -1,245 +0,0 @@ -[gd_scene format=3 uid="uid://b6mhe7465wwge"] - -[ext_resource type="Theme" uid="uid://c6kkopjj3snag" path="res://themes/main_menu.theme.tres" id="1_1g8jr"] -[ext_resource type="Script" uid="uid://3plo51qjjlpl" path="res://scripts/ui/main_menu.gd" id="2_m1kxf"] -[ext_resource type="PackedScene" uid="uid://dprxap0ioe3ps" path="res://scenes/game/vault.tscn" id="3_uhagc"] -[ext_resource type="Material" uid="uid://6nshffib001t" path="res://shaders/menu_background_material.tres" id="3_x2yvf"] -[ext_resource type="PackedScene" uid="uid://o1xvvu6dik4j" path="res://scenes/ui/settings_menu.tscn" id="4_m1kxf"] -[ext_resource type="PackedScene" uid="uid://c5o5t7wvc84wx" path="res://scenes/ui/save_menu.tscn" id="6_uhagc"] - -[sub_resource type="Gradient" id="Gradient_uhagc"] -offsets = PackedFloat32Array(0, 0.55, 1) -colors = PackedColorArray(0.019607844, 0.03529412, 0.07058824, 0.93333334, 0.019607844, 0.03529412, 0.07058824, 0.6, 0.019607844, 0.03529412, 0.07058824, 0) - -[sub_resource type="GradientTexture2D" id="GradientTexture2D_btxxm"] -gradient = SubResource("Gradient_uhagc") -width = 512 -height = 8 - -[node name="MainMenu" type="Control" unique_id=217071775] -layout_mode = 3 -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -grow_horizontal = 2 -grow_vertical = 2 -theme = ExtResource("1_1g8jr") -script = ExtResource("2_m1kxf") -game_scene = ExtResource("3_uhagc") - -[node name="Background" type="ColorRect" parent="." unique_id=443859816] -material = ExtResource("3_x2yvf") -layout_mode = 0 -anchor_right = 1.0 -anchor_bottom = 1.0 -mouse_filter = 2 -color = Color(0.039215688, 0.0627451, 0.1254902, 1) - -[node name="LeftScrim" type="TextureRect" parent="." unique_id=2086614072] -custom_minimum_size = Vector2(1100, 0) -layout_mode = 0 -anchor_bottom = 1.0 -mouse_filter = 2 -texture = SubResource("GradientTexture2D_btxxm") - -[node name="Content" type="MarginContainer" parent="." unique_id=1092556099] -layout_mode = 0 -anchor_right = 1.0 -anchor_bottom = 1.0 -mouse_filter = 2 -theme_override_constants/margin_left = 150 -theme_override_constants/margin_top = 110 -theme_override_constants/margin_right = 150 -theme_override_constants/margin_bottom = 90 - -[node name="Column" type="VBoxContainer" parent="Content" unique_id=1477224023] -layout_mode = 2 -mouse_filter = 2 -theme_override_constants/separation = 0 -alignment = 1 - -[node name="Header" type="VBoxContainer" parent="Content/Column" unique_id=313853754] -layout_mode = 2 -size_flags_horizontal = 0 -mouse_filter = 2 -theme_override_constants/separation = 10 - -[node name="Eyebrow" type="Label" parent="Content/Column/Header" unique_id=2144609206] -layout_mode = 2 -theme_override_colors/font_color = Color(0.18039216, 0.9019608, 0.77254903, 1) -theme_override_font_sizes/font_size = 17 -text = "О Т К Р Ы Т Ы Й М И Р · A L P H A" - -[node name="Title" type="Label" parent="Content/Column/Header" unique_id=2127668771] -layout_mode = 2 -theme_override_colors/font_color = Color(0.9490196, 0.96862745, 0.9843137, 1) -theme_override_colors/font_shadow_color = Color(0, 0, 0, 0.627451) -theme_override_constants/shadow_offset_x = 0 -theme_override_constants/shadow_offset_y = 6 -theme_override_font_sizes/font_size = 104 -text = "G–WORLD" - -[node name="Tagline" type="Label" parent="Content/Column/Header" unique_id=1086917135] -layout_mode = 2 -theme_override_colors/font_color = Color(0.56078434, 0.64705884, 0.7294118, 1) -theme_override_font_sizes/font_size = 22 -text = "Мир, который помнит каждый твой шаг." - -[node name="HeaderSpacer" type="Control" parent="Content/Column" unique_id=190376422] -custom_minimum_size = Vector2(0, 64) -layout_mode = 2 -mouse_filter = 2 - -[node name="Menu" type="VBoxContainer" parent="Content/Column" unique_id=1293462100] -layout_mode = 2 -size_flags_horizontal = 0 -theme_override_constants/separation = 4 - -[node name="ContinueButton" type="Button" parent="Content/Column/Menu" unique_id=731426710] -custom_minimum_size = Vector2(380, 0) -layout_mode = 2 -size_flags_horizontal = 0 -text = "Продолжить" -alignment = 0 - -[node name="NewGameButton" type="Button" parent="Content/Column/Menu" unique_id=1054244506] -custom_minimum_size = Vector2(380, 0) -layout_mode = 2 -size_flags_horizontal = 0 -text = "Новая игра" -alignment = 0 - -[node name="LoadButton" type="Button" parent="Content/Column/Menu" unique_id=309907470] -custom_minimum_size = Vector2(380, 0) -layout_mode = 2 -size_flags_horizontal = 0 -text = "Загрузить" -alignment = 0 - -[node name="SettingsButton" type="Button" parent="Content/Column/Menu" unique_id=1954927801] -custom_minimum_size = Vector2(380, 0) -layout_mode = 2 -size_flags_horizontal = 0 -text = "Настройки" -alignment = 0 - -[node name="AboutButton" type="Button" parent="Content/Column/Menu" unique_id=1219298484] -custom_minimum_size = Vector2(380, 0) -layout_mode = 2 -size_flags_horizontal = 0 -text = "Об игре" -alignment = 0 - -[node name="QuitButton" type="Button" parent="Content/Column/Menu" unique_id=681092216] -custom_minimum_size = Vector2(380, 0) -layout_mode = 2 -size_flags_horizontal = 0 -text = "Выйти" -alignment = 0 - -[node name="Footer" type="HBoxContainer" parent="." unique_id=2118014385] -layout_mode = 0 -anchor_top = 1.0 -anchor_right = 1.0 -anchor_bottom = 1.0 -offset_left = 60.0 -offset_top = -60.0 -offset_right = -60.0 -offset_bottom = -60.0 -mouse_filter = 2 -theme_override_constants/separation = 24 - -[node name="Hint" type="Label" parent="Footer" unique_id=1938012268] -layout_mode = 2 -theme_override_colors/font_color = Color(0.3647059, 0.44705883, 0.53333336, 1) -theme_override_font_sizes/font_size = 16 -text = "↑ ↓ — выбор Enter — подтвердить Esc — назад" - -[node name="Spacer" type="Control" parent="Footer" unique_id=1732658354] -layout_mode = 2 -size_flags_horizontal = 3 -mouse_filter = 2 - -[node name="Version" type="Label" parent="Footer" unique_id=373006578] -layout_mode = 2 -theme_override_colors/font_color = Color(0.3647059, 0.44705883, 0.53333336, 1) -theme_override_font_sizes/font_size = 16 -text = "v0.1.0 · build alpha" - -[node name="AboutOverlay" type="Control" parent="." unique_id=1447245354] -visible = false -anchors_preset = 0 -anchor_right = 1.0 -anchor_bottom = 1.0 -mouse_filter = 1 - -[node name="Dim" type="ColorRect" parent="AboutOverlay" unique_id=232093839] -layout_mode = 0 -anchor_right = 1.0 -anchor_bottom = 1.0 -color = Color(0.015686275, 0.02745098, 0.05490196, 0.8) - -[node name="Center" type="CenterContainer" parent="AboutOverlay" unique_id=145975878] -layout_mode = 0 -anchor_right = 1.0 -anchor_bottom = 1.0 -mouse_filter = 2 - -[node name="Card" type="PanelContainer" parent="AboutOverlay/Center" unique_id=1256580392] -custom_minimum_size = Vector2(760, 0) -layout_mode = 2 - -[node name="Body" type="VBoxContainer" parent="AboutOverlay/Center/Card" unique_id=302031906] -layout_mode = 2 -theme_override_constants/separation = 22 - -[node name="Heading" type="Label" parent="AboutOverlay/Center/Card/Body" unique_id=202973722] -layout_mode = 2 -theme_override_colors/font_color = Color(0.9490196, 0.96862745, 0.9843137, 1) -theme_override_font_sizes/font_size = 32 -text = "ОБ ИГРЕ" - -[node name="Rule" type="ColorRect" parent="AboutOverlay/Center/Card/Body" unique_id=214574186] -custom_minimum_size = Vector2(0, 1) -layout_mode = 2 -color = Color(1, 1, 1, 0.101960786) - -[node name="Text" type="RichTextLabel" parent="AboutOverlay/Center/Card/Body" unique_id=195881129] -custom_minimum_size = Vector2(640, 240) -layout_mode = 2 -theme_override_colors/default_color = Color(0.7254902, 0.7882353, 0.84705883, 1) -theme_override_font_sizes/normal_font_size = 20 -bbcode_enabled = true -text = "[b][color=#2ee6c5]G–WORLD[/color][/b] — песочница с открытым миром, где мир реагирует на действия игрока и запоминает их. - -[color=#8fa5ba]Движок:[/color] Godot 4.7 -[color=#8fa5ba]Статус:[/color] ранняя альфа -[color=#8fa5ba]Управление:[/color] клавиатура, мышь, геймпад - -[i]Это заглушка — замените текст на реальное описание проекта.[/i]" -scroll_active = false - -[node name="Rule2" type="ColorRect" parent="AboutOverlay/Center/Card/Body" unique_id=1659886745] -custom_minimum_size = Vector2(0, 1) -layout_mode = 2 -color = Color(1, 1, 1, 0.101960786) - -[node name="Actions" type="HBoxContainer" parent="AboutOverlay/Center/Card/Body" unique_id=1190263035] -layout_mode = 2 -alignment = 2 - -[node name="AboutBackButton" type="Button" parent="AboutOverlay/Center/Card/Body/Actions" unique_id=660198001] -custom_minimum_size = Vector2(200, 0) -layout_mode = 2 -text = "Назад" - -[node name="SettingsScreen" parent="." unique_id=1927393822 instance=ExtResource("4_m1kxf")] -visible = false -layout_mode = 1 -grow_horizontal = 2 -grow_vertical = 2 - -[node name="SaveScreen" parent="." unique_id=9036454 instance=ExtResource("6_uhagc")] -layout_mode = 1 -grow_horizontal = 2 -grow_vertical = 2 diff --git a/scenes/ui/pause_menu.tscn b/scenes/ui/pause_menu.tscn deleted file mode 100644 index a32fb9f..0000000 --- a/scenes/ui/pause_menu.tscn +++ /dev/null @@ -1,90 +0,0 @@ -[gd_scene format=3 uid="uid://cvx4ot7ugyprk"] - -[ext_resource type="Script" uid="uid://bajc7dq7tn5ik" path="res://scripts/ui/pause_menu.gd" id="1_f6eus"] -[ext_resource type="Theme" uid="uid://c6kkopjj3snag" path="res://themes/main_menu.theme.tres" id="2_8uki6"] -[ext_resource type="PackedScene" uid="uid://o1xvvu6dik4j" path="res://scenes/ui/settings_menu.tscn" id="3_0bnpd"] -[ext_resource type="PackedScene" uid="uid://c5o5t7wvc84wx" path="res://scenes/ui/save_menu.tscn" id="4_8uki6"] - -[node name="PauseMenu" type="CanvasLayer" unique_id=1649378803] -process_mode = 3 -layer = 100 -script = ExtResource("1_f6eus") - -[node name="Root" type="Control" parent="." unique_id=43845941] -visible = false -layout_mode = 3 -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -theme = ExtResource("2_8uki6") - -[node name="Dim" type="ColorRect" parent="Root" unique_id=323746296] -layout_mode = 0 -anchor_right = 1.0 -anchor_bottom = 1.0 -color = Color(0.015686275, 0.02745098, 0.05490196, 0.72156864) - -[node name="Center" type="CenterContainer" parent="Root" unique_id=1362666031] -layout_mode = 0 -anchor_right = 1.0 -anchor_bottom = 1.0 -mouse_filter = 2 - -[node name="Card" type="PanelContainer" parent="Root/Center" unique_id=866077063] -custom_minimum_size = Vector2(560, 0) -layout_mode = 2 - -[node name="Body" type="VBoxContainer" parent="Root/Center/Card" unique_id=1905446803] -layout_mode = 2 -theme_override_constants/separation = 16 - -[node name="Heading" type="Label" parent="Root/Center/Card/Body" unique_id=1834344209] -layout_mode = 2 -theme_override_colors/font_color = Color(0.9490196, 0.96862745, 0.9843137, 1) -theme_override_font_sizes/font_size = 34 -text = "ПАУЗА" -horizontal_alignment = 1 - -[node name="Rule" type="ColorRect" parent="Root/Center/Card/Body" unique_id=831667691] -custom_minimum_size = Vector2(0, 1) -layout_mode = 2 -color = Color(1, 1, 1, 0.101960786) - -[node name="Menu" type="VBoxContainer" parent="Root/Center/Card/Body" unique_id=1777657070] -layout_mode = 2 -theme_override_constants/separation = 4 - -[node name="ResumeButton" type="Button" parent="Root/Center/Card/Body/Menu" unique_id=1905018000] -layout_mode = 2 -text = "Продолжить" - -[node name="SaveButton" type="Button" parent="Root/Center/Card/Body/Menu" unique_id=1361920180] -layout_mode = 2 -text = "Сохранить" - -[node name="LoadButton" type="Button" parent="Root/Center/Card/Body/Menu" unique_id=1867566868] -layout_mode = 2 -text = "Загрузить" - -[node name="SettingsButton" type="Button" parent="Root/Center/Card/Body/Menu" unique_id=902083290] -layout_mode = 2 -text = "Настройки" - -[node name="MainMenuButton" type="Button" parent="Root/Center/Card/Body/Menu" unique_id=2049760939] -layout_mode = 2 -text = "В главное меню" - -[node name="QuitButton" type="Button" parent="Root/Center/Card/Body/Menu" unique_id=1925579036] -layout_mode = 2 -text = "Выйти из игры" - -[node name="SettingsScreen" parent="Root" unique_id=1927393822 instance=ExtResource("3_0bnpd")] -visible = false -layout_mode = 1 -grow_horizontal = 2 -grow_vertical = 2 - -[node name="SaveScreen" parent="Root" unique_id=9036454 instance=ExtResource("4_8uki6")] -layout_mode = 1 -grow_horizontal = 2 -grow_vertical = 2 diff --git a/scenes/ui/save_menu.tscn b/scenes/ui/save_menu.tscn deleted file mode 100644 index 1a17031..0000000 --- a/scenes/ui/save_menu.tscn +++ /dev/null @@ -1,74 +0,0 @@ -[gd_scene format=3 uid="uid://c5o5t7wvc84wx"] - -[ext_resource type="Theme" uid="uid://c6kkopjj3snag" path="res://themes/main_menu.theme.tres" id="1_ne8v6"] -[ext_resource type="Script" uid="uid://dtjbpbm5rqb72" path="res://scripts/ui/save_menu.gd" id="2_nemxf"] - -[node name="SaveMenu" type="Control" unique_id=9036454] -visible = false -layout_mode = 3 -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -theme = ExtResource("1_ne8v6") -script = ExtResource("2_nemxf") - -[node name="Dim" type="ColorRect" parent="." unique_id=1034925462] -layout_mode = 0 -anchor_right = 1.0 -anchor_bottom = 1.0 -color = Color(0.015686275, 0.02745098, 0.05490196, 0.8509804) - -[node name="Center" type="CenterContainer" parent="." unique_id=379596925] -layout_mode = 0 -anchor_right = 1.0 -anchor_bottom = 1.0 -mouse_filter = 2 - -[node name="Card" type="PanelContainer" parent="Center" unique_id=1985092479] -custom_minimum_size = Vector2(980, 720) -layout_mode = 2 - -[node name="Body" type="VBoxContainer" parent="Center/Card" unique_id=1336393202] -layout_mode = 2 -theme_override_constants/separation = 18 - -[node name="Heading" type="Label" parent="Center/Card/Body" unique_id=1418385183] -layout_mode = 2 -theme_override_colors/font_color = Color(0.9490196, 0.96862745, 0.9843137, 1) -theme_override_font_sizes/font_size = 34 -text = "СОХРАНЕНИЯ" - -[node name="Rule" type="ColorRect" parent="Center/Card/Body" unique_id=746798963] -custom_minimum_size = Vector2(0, 1) -layout_mode = 2 -color = Color(1, 1, 1, 0.101960786) - -[node name="Scroll" type="ScrollContainer" parent="Center/Card/Body" unique_id=330714434] -layout_mode = 2 -size_flags_vertical = 3 -horizontal_scroll_mode = 0 - -[node name="Slots" type="VBoxContainer" parent="Center/Card/Body/Scroll" unique_id=773697773] -layout_mode = 2 -size_flags_horizontal = 3 -theme_override_constants/separation = 10 - -[node name="Rule2" type="ColorRect" parent="Center/Card/Body" unique_id=877993095] -custom_minimum_size = Vector2(0, 1) -layout_mode = 2 -color = Color(1, 1, 1, 0.101960786) - -[node name="Actions" type="HBoxContainer" parent="Center/Card/Body" unique_id=1027603836] -layout_mode = 2 -theme_override_constants/separation = 12 - -[node name="Status" type="Label" parent="Center/Card/Body/Actions" unique_id=1997283300] -layout_mode = 2 -size_flags_horizontal = 3 -theme_override_colors/font_color = Color(0.3647059, 0.44705883, 0.53333336, 1) -theme_override_font_sizes/font_size = 16 - -[node name="BackButton" type="Button" parent="Center/Card/Body/Actions" unique_id=723453195] -custom_minimum_size = Vector2(220, 0) -layout_mode = 2 -text = "Назад" diff --git a/scenes/ui/settings_menu.tscn b/scenes/ui/settings_menu.tscn deleted file mode 100644 index 186379b..0000000 --- a/scenes/ui/settings_menu.tscn +++ /dev/null @@ -1,212 +0,0 @@ -[gd_scene format=3 uid="uid://o1xvvu6dik4j"] - -[ext_resource type="Theme" uid="uid://c6kkopjj3snag" path="res://themes/main_menu.theme.tres" id="1_mhswj"] -[ext_resource type="Script" uid="uid://jkhpwi3ngait" path="res://scripts/ui/settings_menu.gd" id="2_x3vyp"] - -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_mhswj"] -content_margin_left = 26.0 -content_margin_top = 16.0 -content_margin_right = 26.0 -content_margin_bottom = 16.0 -bg_color = Color(1, 1, 1, 0.05882353) -border_width_left = 1 -border_width_top = 1 -border_width_right = 1 -border_width_bottom = 1 -border_color = Color(1, 1, 1, 0.14901961) -corner_radius_top_left = 6 -corner_radius_top_right = 6 -corner_radius_bottom_right = 6 -corner_radius_bottom_left = 6 - -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_x3vyp"] -content_margin_left = 26.0 -content_margin_top = 16.0 -content_margin_right = 26.0 -content_margin_bottom = 16.0 -bg_color = Color(0.18039216, 0.9019608, 0.77254903, 0.14901961) -border_width_left = 1 -border_width_top = 1 -border_width_right = 1 -border_width_bottom = 1 -border_color = Color(0.18039216, 0.9019608, 0.77254903, 0.54901963) -corner_radius_top_left = 6 -corner_radius_top_right = 6 -corner_radius_bottom_right = 6 -corner_radius_bottom_left = 6 - -[node name="SettingsMenu" type="Control" unique_id=1927393822] -layout_mode = 3 -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -theme = ExtResource("1_mhswj") -script = ExtResource("2_x3vyp") - -[node name="Dim" type="ColorRect" parent="." unique_id=1358217210] -layout_mode = 0 -anchor_right = 1.0 -anchor_bottom = 1.0 -color = Color(0.015686275, 0.02745098, 0.05490196, 0.8509804) - -[node name="Center" type="CenterContainer" parent="." unique_id=1673833279] -layout_mode = 0 -anchor_right = 1.0 -anchor_bottom = 1.0 -mouse_filter = 2 - -[node name="Card" type="PanelContainer" parent="Center" unique_id=1902065458] -custom_minimum_size = Vector2(1000, 700) -layout_mode = 2 - -[node name="Body" type="VBoxContainer" parent="Center/Card" unique_id=1117582341] -layout_mode = 2 -theme_override_constants/separation = 18 - -[node name="Heading" type="Label" parent="Center/Card/Body" unique_id=661708833] -layout_mode = 2 -theme_override_colors/font_color = Color(0.9490196, 0.96862745, 0.9843137, 1) -theme_override_font_sizes/font_size = 34 -text = "НАСТРОЙКИ" - -[node name="Rule" type="ColorRect" parent="Center/Card/Body" unique_id=1046238764] -custom_minimum_size = Vector2(0, 1) -layout_mode = 2 -color = Color(1, 1, 1, 0.101960786) - -[node name="Tabs" type="TabContainer" parent="Center/Card/Body" unique_id=1317139586] -layout_mode = 2 -size_flags_vertical = 3 -current_tab = 0 - -[node name="VideoTab" type="MarginContainer" parent="Center/Card/Body/Tabs" unique_id=967887173] -layout_mode = 2 -theme_override_constants/margin_top = 6 -metadata/_tab_index = 0 - -[node name="Rows" type="VBoxContainer" parent="Center/Card/Body/Tabs/VideoTab" unique_id=1964139496] -layout_mode = 2 -theme_override_constants/separation = 14 - -[node name="WindowModeRow" type="HBoxContainer" parent="Center/Card/Body/Tabs/VideoTab/Rows" unique_id=965687739] -layout_mode = 2 - -[node name="Caption" type="Label" parent="Center/Card/Body/Tabs/VideoTab/Rows/WindowModeRow" unique_id=2117469931] -layout_mode = 2 -size_flags_horizontal = 3 -text = "Режим окна" - -[node name="WindowModeOption" type="OptionButton" parent="Center/Card/Body/Tabs/VideoTab/Rows/WindowModeRow" unique_id=775949120] -custom_minimum_size = Vector2(320, 0) -layout_mode = 2 -size_flags_horizontal = 8 - -[node name="ResolutionRow" type="HBoxContainer" parent="Center/Card/Body/Tabs/VideoTab/Rows" unique_id=843455360] -layout_mode = 2 - -[node name="Caption" type="Label" parent="Center/Card/Body/Tabs/VideoTab/Rows/ResolutionRow" unique_id=1913756792] -layout_mode = 2 -size_flags_horizontal = 3 -text = "Разрешение окна" - -[node name="ResolutionOption" type="OptionButton" parent="Center/Card/Body/Tabs/VideoTab/Rows/ResolutionRow" unique_id=1126807051] -custom_minimum_size = Vector2(320, 0) -layout_mode = 2 -size_flags_horizontal = 8 - -[node name="VsyncRow" type="HBoxContainer" parent="Center/Card/Body/Tabs/VideoTab/Rows" unique_id=967859150] -layout_mode = 2 - -[node name="Caption" type="Label" parent="Center/Card/Body/Tabs/VideoTab/Rows/VsyncRow" unique_id=1807973676] -layout_mode = 2 -size_flags_horizontal = 3 -text = "Вертикальная синхронизация" - -[node name="VsyncToggle" type="Button" parent="Center/Card/Body/Tabs/VideoTab/Rows/VsyncRow" unique_id=495664079] -custom_minimum_size = Vector2(320, 0) -layout_mode = 2 -size_flags_horizontal = 8 -theme_override_font_sizes/font_size = 20 -toggle_mode = true -text = "Вкл" - -[node name="FpsRow" type="HBoxContainer" parent="Center/Card/Body/Tabs/VideoTab/Rows" unique_id=808439030] -layout_mode = 2 - -[node name="Caption" type="Label" parent="Center/Card/Body/Tabs/VideoTab/Rows/FpsRow" unique_id=261904982] -layout_mode = 2 -size_flags_horizontal = 3 -text = "Ограничение кадров" - -[node name="FpsOption" type="OptionButton" parent="Center/Card/Body/Tabs/VideoTab/Rows/FpsRow" unique_id=2080423748] -custom_minimum_size = Vector2(320, 0) -layout_mode = 2 -size_flags_horizontal = 8 - -[node name="Hint" type="Label" parent="Center/Card/Body/Tabs/VideoTab/Rows" unique_id=954192669] -layout_mode = 2 -theme_override_colors/font_color = Color(0.3647059, 0.44705883, 0.53333336, 1) -theme_override_font_sizes/font_size = 16 -text = "Разрешение применяется только в оконном режиме." - -[node name="AudioTab" type="MarginContainer" parent="Center/Card/Body/Tabs" unique_id=1009219885] -visible = false -layout_mode = 2 -theme_override_constants/margin_top = 6 -metadata/_tab_index = 1 - -[node name="Rows" type="VBoxContainer" parent="Center/Card/Body/Tabs/AudioTab" unique_id=1543186127] -layout_mode = 2 -theme_override_constants/separation = 18 - -[node name="ControlsTab" type="MarginContainer" parent="Center/Card/Body/Tabs" unique_id=641448439] -visible = false -layout_mode = 2 -theme_override_constants/margin_top = 6 -metadata/_tab_index = 2 - -[node name="Wrap" type="VBoxContainer" parent="Center/Card/Body/Tabs/ControlsTab" unique_id=728196337] -layout_mode = 2 -theme_override_constants/separation = 10 - -[node name="Scroll" type="ScrollContainer" parent="Center/Card/Body/Tabs/ControlsTab/Wrap" unique_id=1879224442] -layout_mode = 2 -size_flags_vertical = 3 -horizontal_scroll_mode = 0 - -[node name="Bindings" type="VBoxContainer" parent="Center/Card/Body/Tabs/ControlsTab/Wrap/Scroll" unique_id=1976953054] -layout_mode = 2 -size_flags_horizontal = 3 -theme_override_constants/separation = 6 - -[node name="Hint" type="Label" parent="Center/Card/Body/Tabs/ControlsTab/Wrap" unique_id=71595213] -layout_mode = 2 -theme_override_colors/font_color = Color(0.3647059, 0.44705883, 0.53333336, 1) -theme_override_font_sizes/font_size = 16 -text = "Нажмите на клавишу справа и введите новую. Esc — отмена." - -[node name="Rule2" type="ColorRect" parent="Center/Card/Body" unique_id=634678966] -custom_minimum_size = Vector2(0, 1) -layout_mode = 2 -color = Color(1, 1, 1, 0.101960786) - -[node name="Actions" type="HBoxContainer" parent="Center/Card/Body" unique_id=2133549410] -layout_mode = 2 -theme_override_constants/separation = 12 - -[node name="ResetButton" type="Button" parent="Center/Card/Body/Actions" unique_id=1287304788] -layout_mode = 2 -theme_override_font_sizes/font_size = 20 -theme_override_styles/normal = SubResource("StyleBoxFlat_mhswj") -text = "Сбросить всё" - -[node name="Spacer" type="Control" parent="Center/Card/Body/Actions" unique_id=692961999] -layout_mode = 2 -size_flags_horizontal = 3 -mouse_filter = 2 - -[node name="DoneButton" type="Button" parent="Center/Card/Body/Actions" unique_id=1510089731] -custom_minimum_size = Vector2(220, 0) -layout_mode = 2 -theme_override_styles/normal = SubResource("StyleBoxFlat_x3vyp") -text = "Готово" diff --git a/scripts/autoload/game_settings.gd b/scripts/autoload/game_settings.gd deleted file mode 100644 index 10e0e3d..0000000 --- a/scripts/autoload/game_settings.gd +++ /dev/null @@ -1,283 +0,0 @@ -class_name GameSettingsService -extends Node -## Глобальные настройки игры: хранятся в user://settings.cfg и применяются к движку. -## -## Зарегистрирован автозагрузкой, поэтому доступен отовсюду как GameSettings. -## UI (scenes/ui/settings_menu.tscn) только читает и вызывает сеттеры — -## вся работа с DisplayServer, AudioServer и InputMap живёт здесь. - -const CONFIG_PATH := "user://settings.cfg" - -enum WindowMode { WINDOWED, BORDERLESS, FULLSCREEN } - -## Режимы окна в порядке, в котором они показываются в выпадающем списке. -const WINDOW_MODE_LABELS: Array[String] = ["Оконный", "Без рамки", "Полноэкранный"] - -## Действия, доступные для переназначения, и их подписи в UI. -const ACTION_LABELS := { - "move_left": "Камера влево", - "move_right": "Камера вправо", - "move_up": "Камера вверх", - "move_down": "Камера вниз", - "interact": "Взаимодействие", - "pause": "Пауза", -} - -## Шины микшера, громкость которых регулируется в настройках. -const AUDIO_BUSES := { - "Master": "Общая", - "Music": "Музыка", - "SFX": "Эффекты", -} - -const RESOLUTIONS: Array[Vector2i] = [ - Vector2i(1280, 720), - Vector2i(1600, 900), - Vector2i(1920, 1080), - Vector2i(2560, 1440), - Vector2i(3840, 2160), -] - -## 0 — без ограничения. -const FPS_LIMITS: Array[int] = [0, 30, 60, 90, 120, 144, 240] - -## Любое изменение настроек — чтобы открытые экраны могли обновить себя. -signal changed - -var window_mode: int = WindowMode.WINDOWED -var resolution := Vector2i(1920, 1080) -var vsync := true -var fps_limit := 0 -var volumes := {"Master": 1.0, "Music": 0.8, "SFX": 0.8} -## action: String -> keycode: int -var bindings := {} - -var _default_bindings := {} - - -func _ready() -> void: - _capture_default_bindings() - _read_current_state() - if load_settings(): - apply_all() - else: - # Первый запуск: ничего не навязываем окну, просто фиксируем как есть. - save_settings() - - -# --- Чтение / запись -------------------------------------------------------- - -func load_settings() -> bool: - var config := ConfigFile.new() - if config.load(CONFIG_PATH) != OK: - return false - - window_mode = config.get_value("video", "window_mode", window_mode) - resolution = config.get_value("video", "resolution", resolution) - vsync = config.get_value("video", "vsync", vsync) - fps_limit = config.get_value("video", "fps_limit", fps_limit) - - for bus_name: String in AUDIO_BUSES: - var value: float = config.get_value("audio", bus_name, volumes[bus_name]) - volumes[bus_name] = clampf(value, 0.0, 1.0) - - for action: String in ACTION_LABELS: - bindings[action] = config.get_value("input", action, _default_bindings.get(action, KEY_NONE)) - - return true - - -func save_settings() -> void: - var config := ConfigFile.new() - config.set_value("video", "window_mode", window_mode) - config.set_value("video", "resolution", resolution) - config.set_value("video", "vsync", vsync) - config.set_value("video", "fps_limit", fps_limit) - for bus_name: String in AUDIO_BUSES: - config.set_value("audio", bus_name, volumes[bus_name]) - for action: String in bindings: - config.set_value("input", action, bindings[action]) - config.save(CONFIG_PATH) - - -func reset_to_defaults() -> void: - window_mode = WindowMode.WINDOWED - resolution = Vector2i( - ProjectSettings.get_setting("display/window/size/viewport_width", 1920), - ProjectSettings.get_setting("display/window/size/viewport_height", 1080), - ) - vsync = true - fps_limit = 0 - volumes = {"Master": 1.0, "Music": 0.8, "SFX": 0.8} - bindings = _default_bindings.duplicate() - apply_all() - save_settings() - changed.emit() - - -# --- Применение к движку ---------------------------------------------------- - -func apply_all() -> void: - apply_video() - apply_audio() - apply_input() - - -func apply_video() -> void: - match window_mode: - WindowMode.WINDOWED: - DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_WINDOWED) - DisplayServer.window_set_flag(DisplayServer.WINDOW_FLAG_BORDERLESS, false) - DisplayServer.window_set_size(resolution) - _center_window() - WindowMode.BORDERLESS: - DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_WINDOWED) - DisplayServer.window_set_flag(DisplayServer.WINDOW_FLAG_BORDERLESS, true) - var screen := DisplayServer.window_get_current_screen() - DisplayServer.window_set_size(DisplayServer.screen_get_size(screen)) - DisplayServer.window_set_position(DisplayServer.screen_get_position(screen)) - WindowMode.FULLSCREEN: - DisplayServer.window_set_flag(DisplayServer.WINDOW_FLAG_BORDERLESS, false) - DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_FULLSCREEN) - - DisplayServer.window_set_vsync_mode( - DisplayServer.VSYNC_ENABLED if vsync else DisplayServer.VSYNC_DISABLED - ) - Engine.max_fps = fps_limit - - -func apply_audio() -> void: - for bus_name: String in volumes: - var index := AudioServer.get_bus_index(bus_name) - if index < 0: - continue - var value: float = volumes[bus_name] - AudioServer.set_bus_mute(index, is_zero_approx(value)) - AudioServer.set_bus_volume_db(index, linear_to_db(maxf(value, 0.0001))) - - -func apply_input() -> void: - for action: String in bindings: - _apply_action(action) - - -# --- Сеттеры (UI дёргает только их) ----------------------------------------- - -func set_window_mode(mode: int) -> void: - window_mode = mode - apply_video() - _commit() - - -func set_resolution(value: Vector2i) -> void: - resolution = value - apply_video() - _commit() - - -func set_vsync(enabled: bool) -> void: - vsync = enabled - DisplayServer.window_set_vsync_mode( - DisplayServer.VSYNC_ENABLED if enabled else DisplayServer.VSYNC_DISABLED - ) - _commit() - - -func set_fps_limit(value: int) -> void: - fps_limit = value - Engine.max_fps = value - _commit() - - -func set_volume(bus_name: String, value: float) -> void: - volumes[bus_name] = clampf(value, 0.0, 1.0) - apply_audio() - _commit() - - -## Вешает клавишу на действие. Если клавиша уже занята, снимает её с прежнего -## действия и возвращает его имя — вызывающий может показать предупреждение. -func set_binding(action: String, keycode: int) -> String: - var conflict := "" - for other: String in bindings: - if other != action and int(bindings[other]) == keycode: - conflict = other - bindings[other] = KEY_NONE - _apply_action(other) - bindings[action] = keycode - _apply_action(action) - _commit() - return conflict - - -## Подпись клавиши для UI. -static func key_name(keycode: int) -> String: - if keycode == KEY_NONE: - return "—" - return OS.get_keycode_string(keycode) - - -# --- Внутреннее ------------------------------------------------------------- - -func _commit() -> void: - save_settings() - changed.emit() - - -func _apply_action(action: String) -> void: - if not InputMap.has_action(action): - return - for event: InputEvent in InputMap.action_get_events(action): - if event is InputEventKey: - InputMap.action_erase_event(action, event) - var keycode := int(bindings.get(action, KEY_NONE)) - if keycode == KEY_NONE: - return - var event := InputEventKey.new() - event.keycode = keycode as Key - InputMap.action_add_event(action, event) - - -func _capture_default_bindings() -> void: - for action: String in ACTION_LABELS: - var keycode := KEY_NONE - if InputMap.has_action(action): - for event: InputEvent in InputMap.action_get_events(action): - if event is InputEventKey: - var key_event := event as InputEventKey - keycode = key_event.keycode if key_event.keycode != KEY_NONE else key_event.physical_keycode - break - _default_bindings[action] = keycode - bindings[action] = keycode - - -func _read_current_state() -> void: - resolution = DisplayServer.window_get_size() - vsync = DisplayServer.window_get_vsync_mode() != DisplayServer.VSYNC_DISABLED - fps_limit = Engine.max_fps - - # Безрамочность намеренно не считываем: запуск из редактора отдаёт окно без - # рамки (встроенное окно игры), и это попало бы в конфиг как выбор игрока. - if DisplayServer.window_get_mode() in [ - DisplayServer.WINDOW_MODE_FULLSCREEN, - DisplayServer.WINDOW_MODE_EXCLUSIVE_FULLSCREEN, - ]: - window_mode = WindowMode.FULLSCREEN - else: - window_mode = WindowMode.WINDOWED - - for bus_name: String in AUDIO_BUSES: - var index := AudioServer.get_bus_index(bus_name) - if index >= 0: - volumes[bus_name] = db_to_linear(AudioServer.get_bus_volume_db(index)) - - -func _center_window() -> void: - var screen := DisplayServer.window_get_current_screen() - var screen_rect := Rect2i( - DisplayServer.screen_get_position(screen), DisplayServer.screen_get_size(screen) - ) - var window_size := DisplayServer.window_get_size() - @warning_ignore("integer_division") - var offset := (screen_rect.size - window_size) / 2 - DisplayServer.window_set_position(screen_rect.position + offset) diff --git a/scripts/autoload/game_settings.gd.uid b/scripts/autoload/game_settings.gd.uid deleted file mode 100644 index c6c721e..0000000 --- a/scripts/autoload/game_settings.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://dt0wp3ov76ad8 diff --git a/scripts/autoload/save_manager.gd b/scripts/autoload/save_manager.gd deleted file mode 100644 index 1402e99..0000000 --- a/scripts/autoload/save_manager.gd +++ /dev/null @@ -1,243 +0,0 @@ -class_name SaveManagerService -extends Node -## Слоты сохранений: запись, чтение, удаление и метаданные для UI. -## -## Зарегистрирован автозагрузкой, доступен как SaveManager. -## -## Контракт для игровых сцен: -## 1. в _ready() вызвать begin_session(scene_file_path); -## 2. узлы, которые нужно сохранять, положить в группу "persistent" -## и дать им методы save_data() -> Dictionary и load_data(Dictionary). - -const SAVE_DIR := "user://saves" -const SLOT_COUNT := 6 -const PERSIST_GROUP := "persistent" -const FORMAT_VERSION := 1 - -## Слот записан или удалён — экранам пора обновить список. -signal slots_changed - -## Наигранное время текущей сессии, секунды. -var playtime := 0.0 -## Считать ли время: включается игровой сценой, в меню стоит. -var tracking := false -## Сцена, которая будет записана в слот и открыта при загрузке. -var current_scene_path := "" - -## Кадр игры, снятый до открытия меню паузы, — миниатюра для слота. -var _thumbnail: Image = null -var _pending_payload := {} - - -func _ready() -> void: - DirAccess.make_dir_recursive_absolute(SAVE_DIR) - - -func _process(delta: float) -> void: - if tracking: - playtime += delta - - -## Вызывается игровой сценой при старте (и новой игры, и загрузки). -func begin_session(scene_path: String) -> void: - current_scene_path = scene_path - tracking = true - - -func end_session() -> void: - tracking = false - - -# --- Слоты ------------------------------------------------------------------ - -## Метаданные всех слотов по порядку — ровно то, что рисует UI. -func list_slots() -> Array[Dictionary]: - var slots: Array[Dictionary] = [] - for index in SLOT_COUNT: - slots.append(slot_info(index)) - return slots - - -func slot_info(index: int) -> Dictionary: - var info := { - "index": index, - "exists": false, - "saved_at": 0, - "playtime": 0.0, - "scene_path": "", - "thumbnail": null, - } - - var data := _read_slot(index) - if data.is_empty(): - return info - - info["exists"] = true - info["saved_at"] = int(data.get("saved_at", 0)) - info["playtime"] = float(data.get("playtime", 0.0)) - info["scene_path"] = String(data.get("scene_path", "")) - info["thumbnail"] = _load_thumbnail(index) - return info - - -func has_any_save() -> bool: - for index in SLOT_COUNT: - if FileAccess.file_exists(_slot_path(index)): - return true - return false - - -## Индекс самого свежего слота или -1, если сохранений нет. -func latest_slot() -> int: - var best := -1 - var best_time := -1 - for index in SLOT_COUNT: - var data := _read_slot(index) - if data.is_empty(): - continue - var saved_at := int(data.get("saved_at", 0)) - if saved_at > best_time: - best_time = saved_at - best = index - return best - - -func save_to_slot(index: int) -> bool: - if current_scene_path.is_empty(): - push_warning("SaveManager: нечего сохранять — сессия не начата.") - return false - - var nodes := {} - for node: Node in get_tree().get_nodes_in_group(PERSIST_GROUP): - if node.has_method("save_data"): - nodes[String(node.get_path())] = node.save_data() - - var data := { - "version": FORMAT_VERSION, - "saved_at": int(Time.get_unix_time_from_system()), - "playtime": playtime, - "scene_path": current_scene_path, - "nodes": nodes, - } - - var file := FileAccess.open(_slot_path(index), FileAccess.WRITE) - if file == null: - push_error("SaveManager: не удалось открыть слот %d на запись." % index) - return false - file.store_string(JSON.stringify(data, "\t")) - file.close() - - _write_thumbnail(index) - slots_changed.emit() - return true - - -func load_slot(index: int) -> bool: - var data := _read_slot(index) - if data.is_empty(): - return false - - var scene_path := String(data.get("scene_path", "")) - if not ResourceLoader.exists(scene_path): - push_error("SaveManager: сцена из слота %d не найдена: %s" % [index, scene_path]) - return false - - _pending_payload = data.get("nodes", {}) - playtime = float(data.get("playtime", 0.0)) - - get_tree().paused = false - get_tree().change_scene_to_file(scene_path) - - # Смена сцены отложенная: ждём, пока новое дерево встанет на место. - await get_tree().process_frame - await get_tree().process_frame - _apply_pending_payload() - return true - - -func delete_slot(index: int) -> void: - for path: String in [_slot_path(index), _thumbnail_path(index)]: - if FileAccess.file_exists(path): - DirAccess.remove_absolute(ProjectSettings.globalize_path(path)) - slots_changed.emit() - - -## Снимок последнего отрисованного кадра. Вызывать до показа меню, иначе -## в миниатюру попадёт само меню. -func capture_thumbnail() -> void: - var texture := get_viewport().get_texture() - if texture == null: - return - var image := texture.get_image() - if image == null: - return - image.resize(384, 216, Image.INTERPOLATE_LANCZOS) - _thumbnail = image - - -# --- Форматирование для UI -------------------------------------------------- - -static func format_timestamp(unix_time: int) -> String: - var zone := Time.get_time_zone_from_system() - var local := unix_time + int(zone.get("bias", 0)) * 60 - var stamp := Time.get_datetime_dict_from_unix_time(local) - return "%02d.%02d.%d %02d:%02d" % [ - stamp["day"], stamp["month"], stamp["year"], stamp["hour"], stamp["minute"], - ] - - -static func format_playtime(seconds: float) -> String: - var total := int(seconds) - @warning_ignore("integer_division") - var hours := total / 3600 - @warning_ignore("integer_division") - var minutes := (total % 3600) / 60 - if hours > 0: - return "%d ч %02d мин" % [hours, minutes] - return "%d мин" % minutes - - -# --- Внутреннее ------------------------------------------------------------- - -func _slot_path(index: int) -> String: - return "%s/slot_%d.json" % [SAVE_DIR, index] - - -func _thumbnail_path(index: int) -> String: - return "%s/slot_%d.png" % [SAVE_DIR, index] - - -func _read_slot(index: int) -> Dictionary: - var path := _slot_path(index) - if not FileAccess.file_exists(path): - return {} - var text := FileAccess.get_file_as_string(path) - var parsed: Variant = JSON.parse_string(text) - if parsed is Dictionary: - return parsed - push_warning("SaveManager: слот %d повреждён." % index) - return {} - - -func _write_thumbnail(index: int) -> void: - if _thumbnail == null: - return - _thumbnail.save_png(_thumbnail_path(index)) - - -func _load_thumbnail(index: int) -> Texture2D: - var path := _thumbnail_path(index) - if not FileAccess.file_exists(path): - return null - var image := Image.load_from_file(path) - if image == null: - return null - return ImageTexture.create_from_image(image) - - -func _apply_pending_payload() -> void: - for node: Node in get_tree().get_nodes_in_group(PERSIST_GROUP): - var key := String(node.get_path()) - if _pending_payload.has(key) and node.has_method("load_data"): - node.load_data(_pending_payload[key]) - _pending_payload = {} diff --git a/scripts/autoload/save_manager.gd.uid b/scripts/autoload/save_manager.gd.uid deleted file mode 100644 index ccb8068..0000000 --- a/scripts/autoload/save_manager.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://c10fe0cdsjjc0 diff --git a/scripts/game/climate.gd b/scripts/game/climate.gd deleted file mode 100644 index 0c912aa..0000000 --- a/scripts/game/climate.gd +++ /dev/null @@ -1,65 +0,0 @@ -class_name Climate -extends RefCounted -## Климатическая норма: какой температуры и ветра ждать в это время года. -## -## Средняя полоса Европы — ориентир, а не точная модель. Только вычисления: -## погода (weather_system.gd) берёт отсюда цель и плавно к ней идёт. - -## Среднемесячная температура, °C, с января по декабрь. -const MONTHLY_MEAN: Array[float] = [ - 0.5, 1.5, 5.0, 9.5, 14.0, 17.0, 19.0, 18.5, 14.5, 9.5, 4.5, 1.5, -] - -## Суточный размах по месяцам: зимой день и ночь ближе друг к другу, чем летом. -const MONTHLY_SWING: Array[float] = [ - 4.0, 5.0, 7.0, 9.0, 10.0, 11.0, 11.0, 10.5, 9.0, 7.0, 4.5, 3.5, -] - -## Самый тёплый час суток; самый холодный — через двенадцать часов от него. -const WARMEST_HOUR := 15.0 - -## Поправка к температуре по типу погоды, °C. Индекс — WeatherSystem.Kind; -## перечисление сюда не тянем, иначе получится циклическая ссылка между -## классами: погода уже зависит от климата. -const WEATHER_OFFSET: Array[float] = [1.5, 0.0, -1.0, -2.0, -3.0, -1.5, -3.0] - -## Характерная скорость ветра по тем же типам, м/с. -const WEATHER_WIND: Array[float] = [2.5, 4.0, 5.5, 7.5, 15.0, 1.0, 5.0] - -## Выше этого осадки идут дождём, ниже — снегом. -const SNOW_THRESHOLD := 0.5 - -## Ветер сильнее этого считаем предельным для визуализации. -const WIND_REFERENCE := 18.0 - - -## Норма для месяца (1..12) и часа суток, без учёта погоды. -static func base_temperature(month: int, hour: float) -> float: - var index := clampi(month - 1, 0, 11) - var mean := MONTHLY_MEAN[index] - var swing := MONTHLY_SWING[index] - # Суточный ход — косинус с максимумом в WARMEST_HOUR. - var phase := (hour - WARMEST_HOUR) / 24.0 * TAU - return mean + swing * 0.5 * cos(phase) - - -static func weather_offset(kind: int) -> float: - if kind < 0 or kind >= WEATHER_OFFSET.size(): - return 0.0 - return WEATHER_OFFSET[kind] - - -static func base_wind(kind: int) -> float: - if kind < 0 or kind >= WEATHER_WIND.size(): - return 3.0 - return WEATHER_WIND[kind] - - -## «12°C» — для HUD. -static func temperature_text(celsius: float) -> String: - return "%d°C" % roundi(celsius) - - -## «4 м/с» — для HUD. -static func wind_text(speed: float) -> String: - return "%d м/с" % roundi(speed) diff --git a/scripts/game/climate.gd.uid b/scripts/game/climate.gd.uid deleted file mode 100644 index 82223ca..0000000 --- a/scripts/game/climate.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://lfpudig0j8s7 diff --git a/scripts/game/game_clock.gd b/scripts/game/game_clock.gd deleted file mode 100644 index f5ddc1d..0000000 --- a/scripts/game/game_clock.gd +++ /dev/null @@ -1,160 +0,0 @@ -class_name GameClock -extends Node -## Игровые дата и время. -## -## Отдельная сущность, а не поле сцены: ход времени понадобится производству, -## жителям и событиям, и сохранение обязано его восстанавливать. -## -## Пауза здесь своя, не движковая. `get_tree().paused` останавливает вообще всё -## и занята меню паузы; здесь же нужно останавливать только ход партии, оставляя -## интерфейс живым. При этом узел обычный, PAUSABLE, поэтому меню паузы -## замораживает время само собой. - -## Старт партии: 1 апреля 2012 года, шесть утра. -const START := {"year": 2012, "month": 4, "day": 1, "hour": 6, "minute": 0, "second": 0} - -## Сколько игровых минут проходит за секунду реального времени на скорости x1. -## Сутки при этом занимают 8 минут реального времени. Множители x2…x4 -## умножают именно это значение, так что менять темп достаточно здесь. -const MINUTES_PER_SECOND := 3.0 - -## Доступные множители скорости. -const SPEEDS: Array[int] = [1, 2, 3, 4] - -const MINUTES_PER_DAY := 24 * 60 - -const MONTHS: Array[String] = [ - "января", "февраля", "марта", "апреля", "мая", "июня", - "июля", "августа", "сентября", "октября", "ноября", "декабря", -] - -## Прошла игровая минута — сюда подключаются HUD, производство, события. -signal minute_passed(total_minutes: int) -## Сменились сутки. -signal day_passed(day_index: int) -## Изменились скорость или состояние паузы. -signal flow_changed -## Часы перевели вручную: время не шло, а прыгнуло. Подписчикам вроде погоды -## это повод не догонять новое состояние плавно, а взять его сразу. -signal jumped - -var running := true -var speed := 1 - -var _start_unix := int(Time.get_unix_time_from_datetime_dict(START)) -var _elapsed_minutes := 0.0 -var _last_whole_minute := 0 -var _last_day := 0 - - -func _process(delta: float) -> void: - if not running: - return - _advance(delta * MINUTES_PER_SECOND * float(speed)) - - -# --- Текущий момент --------------------------------------------------------- - -## Момент как словарь Time: year, month, day, hour, minute, second. -func now() -> Dictionary: - return Time.get_datetime_dict_from_unix_time(unix_time()) - - -func unix_time() -> int: - return _start_unix + int(_elapsed_minutes) * 60 - - -## «1 апреля 2012» -func date_text() -> String: - var moment := now() - return "%d %s %d" % [ - int(moment["day"]), MONTHS[int(moment["month"]) - 1], int(moment["year"]), - ] - - -## «06:00» -func time_text() -> String: - var moment := now() - return "%02d:%02d" % [int(moment["hour"]), int(moment["minute"])] - - -# --- Управление ходом ------------------------------------------------------- - -func set_speed(value: int) -> void: - speed = clampi(value, SPEEDS[0], SPEEDS[SPEEDS.size() - 1]) - running = true - flow_changed.emit() - - -func play() -> void: - if running: - return - running = true - flow_changed.emit() - - -func pause() -> void: - if not running: - return - running = false - flow_changed.emit() - - -func toggle() -> void: - running = not running - flow_changed.emit() - - -## Перевести часы на указанный момент (словарь как у Time). Возвращает false, -## если момент раньше начала партии — назад отматывать нечего. -func set_moment(moment: Dictionary) -> bool: - var target := int(Time.get_unix_time_from_datetime_dict(moment)) - if target < _start_unix: - return false - - _elapsed_minutes = float(target - _start_unix) / 60.0 - _last_whole_minute = int(_elapsed_minutes) - _last_day = _day_index() - jumped.emit() - minute_passed.emit(_last_whole_minute) - return true - - -# --- Сохранение ------------------------------------------------------------- - -func save_data() -> Dictionary: - return {"minutes": _elapsed_minutes, "speed": speed, "running": running} - - -func load_data(data: Dictionary) -> void: - _elapsed_minutes = maxf(float(data.get("minutes", 0.0)), 0.0) - speed = clampi(int(data.get("speed", 1)), SPEEDS[0], SPEEDS[SPEEDS.size() - 1]) - running = bool(data.get("running", true)) - _last_whole_minute = int(_elapsed_minutes) - _last_day = _day_index() - flow_changed.emit() - minute_passed.emit(_last_whole_minute) - - -# --- Внутреннее ------------------------------------------------------------- - -func _advance(minutes: float) -> void: - _elapsed_minutes += minutes - - # Сигналим по целым минутам, а не каждый кадр: подписчикам нужен такт, - # а не дробное значение. - var whole := int(_elapsed_minutes) - if whole == _last_whole_minute: - return - _last_whole_minute = whole - minute_passed.emit(whole) - - var day := _day_index() - if day == _last_day: - return - _last_day = day - day_passed.emit(day) - - -func _day_index() -> int: - return floori(_elapsed_minutes / float(MINUTES_PER_DAY)) diff --git a/scripts/game/game_clock.gd.uid b/scripts/game/game_clock.gd.uid deleted file mode 100644 index d677756..0000000 --- a/scripts/game/game_clock.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://7wstqw8ve2he diff --git a/scripts/game/sky_cycle.gd b/scripts/game/sky_cycle.gd deleted file mode 100644 index f0016e2..0000000 --- a/scripts/game/sky_cycle.gd +++ /dev/null @@ -1,81 +0,0 @@ -class_name SkyCycle -extends RefCounted -## Палитра неба по времени суток. -## -## Только вычисления, без узлов: по часу суток отдаёт цвета неба, цвет света -## для сцены, яркость звёзд и положение светил. Рисование — в sky_view.gd, -## пейзаж — в surface_view.gd. - -## Ключевые моменты суток; между ними всё интерполируется линейно. -## `light` — общий тон, которым красится пейзаж: он делает утро розоватым, -## полдень белым, а ночь синей. -const KEYFRAMES := [ - {"hour": 0.0, "top": "#040711", "bottom": "#0b1626", "light": "#4a5876", "stars": 1.0}, - {"hour": 4.5, "top": "#070d1e", "bottom": "#1b2340", "light": "#55637f", "stars": 1.0}, - {"hour": 6.0, "top": "#16294a", "bottom": "#6b4a68", "light": "#8a7c92", "stars": 0.35}, - {"hour": 7.0, "top": "#2c5183", "bottom": "#e0895a", "light": "#d0a184", "stars": 0.0}, - {"hour": 9.0, "top": "#3d7cba", "bottom": "#a9d6ec", "light": "#f2f7fa", "stars": 0.0}, - {"hour": 13.0, "top": "#4a90d9", "bottom": "#c3e6f5", "light": "#ffffff", "stars": 0.0}, - {"hour": 17.0, "top": "#4585c8", "bottom": "#d2e2ec", "light": "#f7efe2", "stars": 0.0}, - {"hour": 19.5, "top": "#27456f", "bottom": "#e0734a", "light": "#c78a6e", "stars": 0.05}, - {"hour": 21.0, "top": "#0d1a30", "bottom": "#2b2b4c", "light": "#666b8a", "stars": 0.6}, - {"hour": 24.0, "top": "#040711", "bottom": "#0b1626", "light": "#4a5876", "stars": 1.0}, -] - -const SUNRISE := 6.0 -const SUNSET := 20.0 - - -## Состояние неба на указанный час суток: top, bottom, light, stars. -static func sample(hour: float) -> Dictionary: - var moment := fposmod(hour, 24.0) - - for index in range(KEYFRAMES.size() - 1): - var from: Dictionary = KEYFRAMES[index] - var to: Dictionary = KEYFRAMES[index + 1] - var start := float(from["hour"]) - var end := float(to["hour"]) - if moment < start or moment > end: - continue - - var span := end - start - var weight := 0.0 if is_zero_approx(span) else (moment - start) / span - return { - "top": Color(String(from["top"])).lerp(Color(String(to["top"])), weight), - "bottom": Color(String(from["bottom"])).lerp(Color(String(to["bottom"])), weight), - "light": Color(String(from["light"])).lerp(Color(String(to["light"])), weight), - "stars": lerpf(float(from["stars"]), float(to["stars"]), weight), - } - - var last: Dictionary = KEYFRAMES[KEYFRAMES.size() - 1] - return { - "top": Color(String(last["top"])), - "bottom": Color(String(last["bottom"])), - "light": Color(String(last["light"])), - "stars": float(last["stars"]), - } - - -## Доля пути солнца по небу: 0 — восход слева, 1 — закат справа. -## -1, если солнце под горизонтом. -static func sun_progress(hour: float) -> float: - var moment := fposmod(hour, 24.0) - if moment < SUNRISE or moment > SUNSET: - return -1.0 - return (moment - SUNRISE) / (SUNSET - SUNRISE) - - -## То же для луны — она идёт по небу оставшуюся часть суток. -static func moon_progress(hour: float) -> float: - var moment := fposmod(hour, 24.0) - if moment > SUNRISE and moment < SUNSET: - return -1.0 - - var night_length := 24.0 - (SUNSET - SUNRISE) - var elapsed := moment - SUNSET if moment >= SUNSET else moment + (24.0 - SUNSET) - return elapsed / night_length - - -## Час суток дробным числом из словаря Time. -static func hour_of(moment: Dictionary) -> float: - return float(int(moment["hour"])) + float(int(moment["minute"])) / 60.0 diff --git a/scripts/game/sky_cycle.gd.uid b/scripts/game/sky_cycle.gd.uid deleted file mode 100644 index e3d35d9..0000000 --- a/scripts/game/sky_cycle.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://gdc8itmwcajy diff --git a/scripts/game/sky_view.gd b/scripts/game/sky_view.gd deleted file mode 100644 index 29e7829..0000000 --- a/scripts/game/sky_view.gd +++ /dev/null @@ -1,115 +0,0 @@ -class_name SkyView -extends Node2D -## Небо над убежищем: градиент по времени суток, звёзды, солнце и луна. -## -## Рисуется первым, за пейзажем и породой. Что рисовать — решает SkyCycle, -## насколько это видно сквозь облака — WeatherSystem. - -const SUN_TEXTURE := preload("res://background/PNG/sun.png") -const MOON_TEXTURE := preload("res://background/PNG/moon_full.png") - -## Небо начинается здесь и идёт до уровня земли (y = 0). -const TOP := -1700.0 -const LEFT := -1600.0 -const RIGHT := 2900.0 - -## Дуга, по которой идут светила. -const ARC_RADIUS := Vector2(900.0, 620.0) -const ARC_BASE := -40.0 - -const STAR_COUNT := 240 -const STAR_SEED := 20120401 - -## Час суток; сцена обновляет его вслед за часами. -var hour := 6.0 -## Плотность облаков 0..1 — сквозь них хуже видно звёзды и светила. -var clouds := 0.0 - -var _stars: Array[Dictionary] = [] - - -func _ready() -> void: - _generate_stars() - - -## Одним вызовом — чтобы не гонять перерисовку дважды. -func set_conditions(hour_of_day: float, cloudiness: float) -> void: - hour = hour_of_day - clouds = cloudiness - queue_redraw() - - -func _draw() -> void: - var sky := SkyCycle.sample(hour) - _draw_gradient(sky) - _draw_stars(float(sky["stars"])) - _draw_bodies() - - -func _draw_gradient(sky: Dictionary) -> void: - var points := PackedVector2Array([ - Vector2(LEFT, TOP), Vector2(RIGHT, TOP), Vector2(RIGHT, 0.0), Vector2(LEFT, 0.0), - ]) - var top: Color = sky["top"] - var bottom: Color = sky["bottom"] - draw_polygon(points, PackedColorArray([top, top, bottom, bottom])) - - -func _draw_stars(brightness: float) -> void: - # Плотная облачность гасит звёзды почти полностью. - var visibility := brightness * (1.0 - clampf(clouds, 0.0, 1.0) * 0.9) - if visibility <= 0.01: - return - - for star: Dictionary in _stars: - var alpha: float = float(star["alpha"]) * visibility - draw_circle(star["position"], float(star["radius"]), Color(star["tint"], alpha)) - - -func _draw_bodies() -> void: - # Сквозь облака светило просвечивает, но тускло. - var through := 1.0 - clampf(clouds, 0.0, 1.0) * 0.75 - - var sun := SkyCycle.sun_progress(hour) - if sun >= 0.0: - var position := _arc_position(sun) - draw_circle(position, 150.0, Color("#ffd27a", 0.10 * through)) - draw_circle(position, 92.0, Color("#ffdc93", 0.14 * through)) - _draw_body(SUN_TEXTURE, position, 1.7, Color(1.0, 1.0, 1.0, through)) - return - - var moon := SkyCycle.moon_progress(hour) - if moon >= 0.0: - var position := _arc_position(moon) - draw_circle(position, 110.0, Color("#cfe0ff", 0.07 * through)) - _draw_body(MOON_TEXTURE, position, 1.35, Color(1.0, 1.0, 1.0, through)) - - -func _draw_body(texture: Texture2D, position: Vector2, scale: float, tint: Color) -> void: - var size := Vector2(texture.get_size()) * scale - draw_texture_rect(texture, Rect2(position - size * 0.5, size), false, tint) - - -## Точка на дуге: 0 — у левого горизонта, 1 — у правого. -func _arc_position(progress: float) -> Vector2: - var angle := PI * (1.0 - progress) - var center_x := VaultGrid.bounds().get_center().x - return Vector2( - center_x + cos(angle) * ARC_RADIUS.x, - ARC_BASE - sin(angle) * ARC_RADIUS.y - ) - - -func _generate_stars() -> void: - var rng := RandomNumberGenerator.new() - rng.seed = STAR_SEED - - for index in STAR_COUNT: - _stars.append({ - "position": Vector2( - rng.randf_range(LEFT, RIGHT), rng.randf_range(TOP, -140.0) - ), - "radius": rng.randf_range(1.4, 3.6), - "alpha": rng.randf_range(0.35, 1.0), - "tint": Color("#bcd2ff").lerp(Color("#fff2d8"), rng.randf()), - }) diff --git a/scripts/game/sky_view.gd.uid b/scripts/game/sky_view.gd.uid deleted file mode 100644 index f7aceab..0000000 --- a/scripts/game/sky_view.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://ddaqvur2yl61c diff --git a/scripts/game/surface_view.gd b/scripts/game/surface_view.gd deleted file mode 100644 index d19938c..0000000 --- a/scripts/game/surface_view.gd +++ /dev/null @@ -1,315 +0,0 @@ -class_name SurfaceView -extends Node2D -## Поверхность над убежищем: горы, холмы, деревья, облака и осадки. -## -## Текстуры — набор Kenney из `background/PNG/Flat`. Слои рисуются с разной -## скоростью относительно камеры (параллакс) и подмешивают цвет неба тем -## сильнее, чем дальше стоят, — это даёт воздушную перспективу. -## -## Как и остальной вид, всё живёт в _draw(): узлов-спрайтов нет, поэтому -## перекрасить пейзаж под время суток — это один параметр, а не обход дерева. - -const MOUNTAINS := preload("res://background/PNG/Flat/pointy_mountains.png") -const HILLS_FAR := preload("res://background/PNG/Flat/hills2.png") -const HILLS_NEAR := preload("res://background/PNG/Flat/hills1.png") -## Облака — отдельными клубами, а не сплошной лентой: у ленты прямоугольник -## обрезает текстуру, и на небе видно горизонтальный шов, который вдобавок -## едет вместе с ветром. -const CLOUD_PATHS := [ - "res://background/PNG/Flat/cloud1.png", "res://background/PNG/Flat/cloud2.png", - "res://background/PNG/Flat/cloud3.png", "res://background/PNG/Flat/cloud4.png", - "res://background/PNG/Flat/cloud5.png", "res://background/PNG/Flat/cloud6.png", - "res://background/PNG/Flat/cloud7.png", "res://background/PNG/Flat/cloud8.png", - "res://background/PNG/Flat/cloud9.png", -] -const CLOUD_COUNT := 30 - -## Ближний план берём из основного набора: там деревья и трава уже цветные. -## Набор Flat — бледные силуэты, он идёт на дальние слои, которые всё равно -## перекрашиваются под воздушную перспективу. -const TREE_PATHS := [ - "res://background/PNG/tree01.png", "res://background/PNG/tree05.png", - "res://background/PNG/tree09.png", "res://background/PNG/tree12.png", - "res://background/PNG/tree18.png", "res://background/PNG/tree24.png", - "res://background/PNG/tree30.png", -] -const GRASS_PATHS := [ - "res://background/PNG/grass1.png", "res://background/PNG/grass2.png", - "res://background/PNG/grass3.png", "res://background/PNG/grass4.png", -] - -## Собственный цвет дальних слоёв: сами текстуры почти белые, тон задаём тут. -const MOUNTAIN_TONE := Color("#7e93ad") -const HILLS_FAR_TONE := Color("#6b8f5e") -const HILLS_NEAR_TONE := Color("#5d8248") - -const LEFT := -1600.0 -const RIGHT := 2900.0 -## Сколько крайних столбцов текстуры отбрасываем на стыке плиток. -const EDGE_INSET := 1.0 -const SCENERY_SEED := 20120401 - -## Полоса дёрна на уровне земли. -const TURF := Color("#4a6b3a") -const TURF_HEIGHT := 16.0 - -## Не ставим деревья вплотную к будке входа, чтобы её не загораживали. -const ENTRANCE_CLEAR := Vector2(-140.0, 300.0) - -## Час суток и погода — сцена обновляет их вслед за часами. -var hour := 6.0 -var clouds := 0.0 -var precipitation := 0.0 -var fog := 0.0 -var wind := 0.3 -var snowing := false -## Множитель хода: 0 на паузе, иначе скорость игры. -var time_scale := 1.0 - -var _trees: Array[Dictionary] = [] -var _grass: Array[Dictionary] = [] -var _cloud_puffs: Array[Dictionary] = [] -var _drops: Array[Vector2] = [] -var _drift := 0.0 -var _fall := 0.0 - - -func _ready() -> void: - # Повтор выключен намеренно: полосы мы кладём плитками сами, а с включённым - # повтором фильтрация на краю кадра подмешивает противоположный край - # текстуры — по небу шла тонкая линия во всю ширину. - texture_repeat = CanvasItem.TEXTURE_REPEAT_DISABLED - _scatter_scenery() - _scatter_clouds() - _scatter_drops() - - -func _process(delta: float) -> void: - if is_zero_approx(time_scale): - return - var step := delta * time_scale - _drift += step * (18.0 + wind * 120.0) - _fall += step * (900.0 + precipitation * 900.0) - queue_redraw() - - -## Одним вызовом — чтобы не гонять перерисовку на каждый параметр. -func set_conditions( - hour_of_day: float, weather: WeatherSystem -) -> void: - hour = hour_of_day - clouds = weather.clouds - precipitation = weather.precipitation - fog = weather.fog - wind = weather.wind - snowing = weather.is_snowing() - queue_redraw() - - -func _draw() -> void: - var sky := SkyCycle.sample(hour) - var light: Color = sky["light"] - var haze: Color = sky["bottom"] - var view := _view_rect() - - _draw_band(MOUNTAINS, MOUNTAIN_TONE, 1.7, 0.45, 0.25, light, haze, view) - _draw_band(HILLS_FAR, HILLS_FAR_TONE, 1.5, 0.24, 0.5, light, haze, view) - _draw_clouds(view, light) - _draw_band(HILLS_NEAR, HILLS_NEAR_TONE, 1.15, 0.08, 0.75, light, haze, view) - _draw_turf(light) - _draw_scenery(light) - _draw_fog(haze) - _draw_precipitation(view, light) - - -# --- Слои пейзажа ----------------------------------------------------------- - -## Широкая полоса, замощённая по горизонтали и стоящая на уровне земли. -## `distance` — насколько слой выцветает в цвет неба, `parallax` — насколько -## он привязан к миру (1.0 — намертво, меньше — отстаёт от камеры). -func _draw_band( - texture: Texture2D, tone: Color, scale: float, distance: float, parallax: float, - light: Color, haze: Color, view: Rect2 -) -> void: - var tint := (tone * light).lerp(haze, distance) - var offset := view.get_center().x * (1.0 - parallax) - var texture_size := Vector2(texture.get_size()) - - # Плитку кладём вручную: draw_texture_rect(tile = true) повторяет текстуру - # в натуральную величину и по обеим осям сразу, из-за чего масштаб - # превращался в лишние ряды с полосой на стыке. - # - # Крайние столбцы пикселей у этих текстур полупрозрачные (сглаживание). - # Встык они складываются дважды и дают вертикальную линию, поэтому берём - # область с отступом в пиксель с каждой стороны и ещё на пиксель - # перекрываем соседние плитки. - var source := Rect2( - Vector2(EDGE_INSET, 0.0), Vector2(texture_size.x - EDGE_INSET * 2.0, texture_size.y) - ) - var tile := Vector2(source.size.x * scale, texture_size.y * scale) - var step := tile.x - 1.0 - - var x := LEFT + fposmod(offset, step) - step - while x < RIGHT: - draw_texture_rect_region(texture, Rect2(Vector2(x, -tile.y), tile), source, tint) - x += step - - -func _draw_turf(light: Color) -> void: - draw_rect(Rect2(Vector2(LEFT, -TURF_HEIGHT), Vector2(RIGHT - LEFT, TURF_HEIGHT)), TURF * light) - - -func _draw_scenery(light: Color) -> void: - for tuft: Dictionary in _grass: - _draw_item(tuft, light) - for tree: Dictionary in _trees: - _draw_item(tree, light) - - -func _draw_item(item: Dictionary, light: Color) -> void: - var texture: Texture2D = item["texture"] - var size := Vector2(texture.get_size()) * float(item["scale"]) - var origin := Vector2(float(item["x"]) - size.x * 0.5, -size.y + TURF_HEIGHT * 0.4) - draw_texture_rect(texture, Rect2(origin, size), false, light * Color(item["tint"])) - - -# --- Погода ----------------------------------------------------------------- - -func _draw_clouds(view: Rect2, light: Color) -> void: - if clouds <= 0.02: - return - - var span := RIGHT - LEFT - var density := clampf(clouds, 0.0, 1.0) - # Чем плотнее облачность, тем свинцовее облака. - var tint := light.lerp(light * Color("#8ea3b8"), density) - - for cloud: Dictionary in _cloud_puffs: - # У каждого облака свой порог: облачность прибавляет их числом, а не - # только непрозрачностью, иначе пасмурно выглядит как ясно, но мутнее. - var threshold: float = cloud["threshold"] - if density <= threshold: - continue - var alpha := clampf((density - threshold) * 5.0, 0.0, 1.0) * 0.9 - - var depth: float = cloud["depth"] - var texture: Texture2D = cloud["texture"] - var size := Vector2(texture.get_size()) * float(cloud["scale"]) - var offset := view.get_center().x * (1.0 - depth) - _drift * depth - var x := LEFT + fposmod(float(cloud["x"]) + offset - LEFT, span) - - draw_texture_rect( - texture, Rect2(Vector2(x, float(cloud["y"])), size), false, Color(tint, alpha) - ) - - -## Дымка у горизонта: чем гуще, тем сильнее пейзаж растворяется в небе. -func _draw_fog(haze: Color) -> void: - if fog <= 0.01: - return - var top := -520.0 - var points := PackedVector2Array([ - Vector2(LEFT, top), Vector2(RIGHT, top), Vector2(RIGHT, 0.0), Vector2(LEFT, 0.0), - ]) - var clear := Color(haze, 0.0) - var dense := Color(haze, clampf(fog, 0.0, 1.0) * 0.85) - # Ниже нуля тумана нет — там уже разрез породы. - draw_polygon(points, PackedColorArray([clear, clear, dense, dense])) - - -func _draw_precipitation(view: Rect2, light: Color) -> void: - if precipitation <= 0.02: - return - - # Рисуем только то, что попадает в кадр и находится над землёй. - var band := view.intersection(Rect2(LEFT, -1700.0, RIGHT - LEFT, 1700.0)) - if band.size.x <= 0.0 or band.size.y <= 0.0: - return - - var count := int(float(_drops.size()) * clampf(precipitation, 0.0, 1.0)) - var slant := wind * 0.45 - - for index in count: - var drop := _drops[index] - var x := band.position.x + drop.x * band.size.x - var y := band.position.y + fposmod(drop.y * band.size.y + _fall, band.size.y) - - if snowing: - draw_circle(Vector2(x, y), 3.0, Color(light, 0.75)) - continue - var length := 16.0 + precipitation * 12.0 - draw_line( - Vector2(x, y), Vector2(x - slant * length, y + length), - Color(light.lerp(Color("#9fc4e8"), 0.5), 0.5), 1.5 - ) - - -# --- Расстановка ------------------------------------------------------------ - -func _scatter_scenery() -> void: - var rng := RandomNumberGenerator.new() - rng.seed = SCENERY_SEED - - var trees: Array[Texture2D] = [] - for path: String in TREE_PATHS: - trees.append(load(path) as Texture2D) - - var grass: Array[Texture2D] = [] - for path: String in GRASS_PATHS: - grass.append(load(path) as Texture2D) - - var x := LEFT - while x < RIGHT: - x += rng.randf_range(90.0, 260.0) - if x > ENTRANCE_CLEAR.x and x < ENTRANCE_CLEAR.y: - continue - _trees.append({ - "texture": trees[rng.randi_range(0, trees.size() - 1)], - "x": x, - "scale": rng.randf_range(0.55, 1.0), - "tint": Color("#ffffff").lerp(Color("#9db98a"), rng.randf() * 0.45), - }) - - var tuft_x := LEFT - while tuft_x < RIGHT: - tuft_x += rng.randf_range(34.0, 130.0) - _grass.append({ - "texture": grass[rng.randi_range(0, grass.size() - 1)], - "x": tuft_x, - "scale": rng.randf_range(0.9, 1.7), - "tint": Color("#ffffff"), - }) - - -func _scatter_clouds() -> void: - var rng := RandomNumberGenerator.new() - rng.seed = SCENERY_SEED + 3 - - var textures: Array[Texture2D] = [] - for path: String in CLOUD_PATHS: - textures.append(load(path) as Texture2D) - - for index in CLOUD_COUNT: - _cloud_puffs.append({ - "texture": textures[rng.randi_range(0, textures.size() - 1)], - "x": rng.randf_range(LEFT, RIGHT), - "y": rng.randf_range(-1020.0, -430.0), - "scale": rng.randf_range(1.3, 3.4), - # Ближние облака едут быстрее дальних. - "depth": rng.randf_range(0.25, 0.75), - "threshold": rng.randf_range(0.0, 0.9), - }) - - -func _scatter_drops() -> void: - var rng := RandomNumberGenerator.new() - rng.seed = SCENERY_SEED + 7 - for index in 520: - _drops.append(Vector2(rng.randf(), rng.randf())) - - -## Прямоугольник, который сейчас видно камерой, в координатах мира. -func _view_rect() -> Rect2: - var canvas := get_canvas_transform() - var zoom := canvas.get_scale() - return Rect2(-canvas.origin / zoom, get_viewport_rect().size / zoom) diff --git a/scripts/game/surface_view.gd.uid b/scripts/game/surface_view.gd.uid deleted file mode 100644 index b893f7d..0000000 --- a/scripts/game/surface_view.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://c4c36o4o35gqw diff --git a/scripts/game/vault_camera.gd b/scripts/game/vault_camera.gd deleted file mode 100644 index 36faf32..0000000 --- a/scripts/game/vault_camera.gd +++ /dev/null @@ -1,65 +0,0 @@ -class_name VaultCamera -extends Camera2D -## Камера убежища: перетаскивание, зум колесом и клавиатурная прокрутка. -## -## Границы задаются встроенными limit_* по размеру убежища, поэтому вручную -## позицию не зажимаем — движок делает это сам. - -const ZOOM_STEP := 1.2 -const MIN_ZOOM := 0.45 -const MAX_ZOOM := 2.2 -const KEY_PAN_SPEED := 900.0 -const EDGE_MARGIN := 420.0 -## Сверху запас больше: там небо со светилами, и на него хочется смотреть. -const SKY_MARGIN := 900.0 - -var _dragging := false - - -func _ready() -> void: - var bounds := VaultGrid.bounds() - limit_left = int(bounds.position.x - EDGE_MARGIN) - limit_right = int(bounds.end.x + EDGE_MARGIN) - # Сверху отмеряем от поверхности, а не от бункера: над землёй стоит будка - # входа, и до неё нужно доезжать. - limit_top = int(-SKY_MARGIN) - limit_bottom = int(bounds.end.y + EDGE_MARGIN) - # Открываемся на верхних этажах — оттуда видно и вход, и застройку. - position = Vector2(bounds.get_center().x, bounds.position.y + VaultGrid.CELL.y) - - -func _process(delta: float) -> void: - var direction := Input.get_vector("move_left", "move_right", "move_up", "move_down") - if direction != Vector2.ZERO: - position += direction * KEY_PAN_SPEED * delta / zoom.x - - -func _unhandled_input(event: InputEvent) -> void: - if event is InputEventMouseButton: - _handle_mouse_button(event as InputEventMouseButton) - elif event is InputEventMouseMotion and _dragging: - position -= (event as InputEventMouseMotion).relative / zoom - get_viewport().set_input_as_handled() - - -func _handle_mouse_button(event: InputEventMouseButton) -> void: - match event.button_index: - # На один щелчок колеса Godot шлёт и нажатие, и отпускание. Без - # проверки pressed шаг зума применялся бы дважды. - MOUSE_BUTTON_WHEEL_UP: - if event.pressed: - _zoom_by(ZOOM_STEP) - get_viewport().set_input_as_handled() - MOUSE_BUTTON_WHEEL_DOWN: - if event.pressed: - _zoom_by(1.0 / ZOOM_STEP) - get_viewport().set_input_as_handled() - MOUSE_BUTTON_RIGHT, MOUSE_BUTTON_MIDDLE: - # Правая и средняя кнопки таскают вид; левая остаётся строительству. - _dragging = event.pressed - get_viewport().set_input_as_handled() - - -func _zoom_by(factor: float) -> void: - var target := clampf(zoom.x * factor, MIN_ZOOM, MAX_ZOOM) - zoom = Vector2(target, target) diff --git a/scripts/game/vault_camera.gd.uid b/scripts/game/vault_camera.gd.uid deleted file mode 100644 index 66546f3..0000000 --- a/scripts/game/vault_camera.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://dg751mcd0v178 diff --git a/scripts/game/vault_grid.gd b/scripts/game/vault_grid.gd deleted file mode 100644 index ce6789f..0000000 --- a/scripts/game/vault_grid.gd +++ /dev/null @@ -1,181 +0,0 @@ -class_name VaultGrid -extends RefCounted -## Модель убежища: сетка этажей и комнаты на ней. -## -## Здесь нет ни узлов, ни отрисовки — только данные и правила размещения. -## Вид (vault_view.gd) читает эту модель, а сохранение сериализует её целиком. - -## Размер одной ячейки сетки в пикселях мира. -const CELL := Vector2(140.0, 120.0) -## Колонка 0 — лифтовая шахта, комнаты занимают 1..COLUMNS-1. -const COLUMNS := 9 -const FLOORS := 6 -const ELEVATOR_COLUMN := 0 -## Насколько верхний этаж утоплен под поверхность. y = 0 — уровень земли, -## выше — небо. Смещение живёт здесь, а не в отрисовке, чтобы вместе с -## картинкой уехали и попадание мышью, и границы камеры. -const DEPTH := 360.0 - -## Типы комнат: подпись, цвет, ширина в ячейках и баланс ресурсов за цикл. -const KINDS := { - "living": { - "label": "Жилой блок", "color": "#2ee6c5", "width": 2, - "power": -2, "water": 0, "food": 0, - }, - "power": { - "label": "Генератор", "color": "#f2b134", "width": 2, - "power": 8, "water": 0, "food": 0, - }, - "water": { - "label": "Водоочистка", "color": "#4aa8f2", "width": 2, - "power": -3, "water": 6, "food": 0, - }, - "diner": { - "label": "Столовая", "color": "#f2704a", "width": 2, - "power": -3, "water": 0, "food": 6, - }, - "storage": { - "label": "Склад", "color": "#9b8cf5", "width": 1, - "power": -1, "water": 0, "food": 0, - }, -} - -## Комнаты: [{"kind": String, "floor": int, "column": int}, ...] -var rooms: Array[Dictionary] = [] - - -## Стартовая застройка: без неё убежище выглядит пустой ямой. -func reset_to_starter() -> void: - rooms.clear() - place("living", 0, 1) - place("power", 0, 3) - place("diner", 1, 1) - place("water", 1, 3) - - -# --- Правила размещения ----------------------------------------------------- - -static func kind_width(kind: String) -> int: - return int(KINDS[kind]["width"]) - - -func in_bounds(a_floor: int, column: int, width: int) -> bool: - if a_floor < 0 or a_floor >= FLOORS: - return false - if column <= ELEVATOR_COLUMN: - return false - return column + width <= COLUMNS - - -func can_place(kind: String, a_floor: int, column: int) -> bool: - if not KINDS.has(kind): - return false - var width := kind_width(kind) - if not in_bounds(a_floor, column, width): - return false - for offset in width: - if room_index_at(a_floor, column + offset) >= 0: - return false - return true - - -func place(kind: String, a_floor: int, column: int) -> bool: - if not can_place(kind, a_floor, column): - return false - rooms.append({"kind": kind, "floor": a_floor, "column": column}) - return true - - -## Индекс комнаты, накрывающей ячейку, или -1. -func room_index_at(a_floor: int, column: int) -> int: - for index in rooms.size(): - var room: Dictionary = rooms[index] - if int(room["floor"]) != a_floor: - continue - var start := int(room["column"]) - if column >= start and column < start + kind_width(String(room["kind"])): - return index - return -1 - - -func remove_at(a_floor: int, column: int) -> bool: - var index := room_index_at(a_floor, column) - if index < 0: - return false - rooms.remove_at(index) - return true - - -# --- Геометрия -------------------------------------------------------------- - -static func cell_rect(a_floor: int, column: int, width: int = 1) -> Rect2: - return Rect2( - Vector2(column * CELL.x, DEPTH + a_floor * CELL.y), - Vector2(CELL.x * width, CELL.y) - ) - - -static func room_rect(room: Dictionary) -> Rect2: - return cell_rect(int(room["floor"]), int(room["column"]), kind_width(String(room["kind"]))) - - -## Ячейка под точкой в координатах вида. Может оказаться за пределами сетки — -## проверяйте in_bounds(). -static func cell_at(local_position: Vector2) -> Vector2i: - return Vector2i( - int(floor(local_position.x / CELL.x)), - int(floor((local_position.y - DEPTH) / CELL.y)) - ) - - -## Прямоугольник всего убежища в координатах вида. -static func bounds() -> Rect2: - return Rect2(Vector2(0.0, DEPTH), Vector2(COLUMNS * CELL.x, FLOORS * CELL.y)) - - -# --- Сводка по ресурсам ----------------------------------------------------- - -func totals() -> Dictionary: - var result := {"power": 0, "water": 0, "food": 0} - for room: Dictionary in rooms: - var kind: Dictionary = KINDS[String(room["kind"])] - for key: String in result: - result[key] = int(result[key]) + int(kind[key]) - return result - - -func count_of(kind: String) -> int: - var total := 0 - for room: Dictionary in rooms: - if String(room["kind"]) == kind: - total += 1 - return total - - -# --- Сериализация ----------------------------------------------------------- - -func to_array() -> Array: - var data := [] - for room: Dictionary in rooms: - data.append({ - "kind": String(room["kind"]), - "floor": int(room["floor"]), - "column": int(room["column"]), - }) - return data - - -func from_array(data: Array) -> void: - rooms.clear() - for entry: Variant in data: - if not (entry is Dictionary): - continue - var room: Dictionary = entry - var kind := String(room.get("kind", "")) - if not KINDS.has(kind): - continue - rooms.append({ - "kind": kind, - "floor": int(room.get("floor", 0)), - "column": int(room.get("column", 1)), - }) diff --git a/scripts/game/vault_grid.gd.uid b/scripts/game/vault_grid.gd.uid deleted file mode 100644 index 2411194..0000000 --- a/scripts/game/vault_grid.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://0futdc17rt4h diff --git a/scripts/game/vault_scene.gd b/scripts/game/vault_scene.gd deleted file mode 100644 index 806a500..0000000 --- a/scripts/game/vault_scene.gd +++ /dev/null @@ -1,587 +0,0 @@ -extends Node2D -## Игровой слой: убежище в разрезе, вид сбоку. -## -## Связывает три части: модель (VaultGrid), отрисовку (VaultView) и HUD. -## Здесь же живёт контракт сохранения — сцена лежит в группе "persistent". -## -## Управление: ЛКМ действует по режиму из нижней панели (по умолчанию — выбор -## комнаты), ПКМ/СКМ — тащить вид, колесо — зум, WASD и стрелки — прокрутка. - -## Строки сводки ресурсов: ключ из VaultGrid.totals() → подпись и цвет. -const STAT_ROWS := { - "power": {"label": "Питание", "color": "#f2b134"}, - "water": {"label": "Вода", "color": "#4aa8f2"}, - "food": {"label": "Еда", "color": "#f2704a"}, -} - -const HINT := "ЛКМ — выбрать комнату · ПКМ — тащить вид · колесо — зум" - -## Насколько мышь может сместиться между нажатием и отпусканием, чтобы это -## всё ещё считалось кликом, а не перетаскиванием вида. -const CLICK_SLACK := 6.0 - -## Режим курсора. По умолчанию сцена ничего не строит: строительство -## включается только выбором типа комнаты в нижней панели. -enum Mode { SELECT, BUILD, DEMOLISH } - -@onready var _saves: SaveManagerService = get_node("/root/SaveManager") -@onready var _vault: VaultView = $View -@onready var _camera: VaultCamera = $Camera -@onready var _clock: GameClock = $Clock -@onready var _weather: WeatherSystem = $Weather -@onready var _sky: SkyView = $Sky -@onready var _surface: SurfaceView = $Surface -@onready var _weather_icon: WeatherIcon = $Hud/Root/TopRight/Row/ClockBar/Body/Climate/Icon -@onready var _weather_label: Label = $Hud/Root/TopRight/Row/ClockBar/Body/Climate/WeatherLabel -@onready var _temp_label: Label = $Hud/Root/TopRight/Row/ClockBar/Body/Climate/TempLabel -@onready var _wind_label: Label = $Hud/Root/TopRight/Row/ClockBar/Body/Climate/WindLabel -@onready var _stats: HBoxContainer = $Hud/Root/TopBar/Stats -@onready var _date_label: Label = $Hud/Root/TopRight/Row/ClockBar/Body/Moment/DateLabel -@onready var _time_label: Label = $Hud/Root/TopRight/Row/ClockBar/Body/Moment/TimeLabel -@onready var _flow_controls: HBoxContainer = $Hud/Root/TopRight/Row/ClockBar/Body/Controls -@onready var _tools: HBoxContainer = $Hud/Root/BottomAnchor/Row/BuildBar/Panel/Tools -@onready var _status: Label = $Hud/Root/BottomAnchor/Row/BuildBar/Panel/Status - -var _grid := VaultGrid.new() -var _mode := Mode.SELECT -## Тип комнаты, который построится в режиме Mode.BUILD. -var _build_kind := "" -## Якорная ячейка выбранной комнаты; (-1, -1) — ничего не выбрано. -var _selected_cell := Vector2i(-1, -1) -var _stat_labels := {} -var _tool_group := ButtonGroup.new() -var _right_pressed := false -var _right_press_position := Vector2.ZERO -var _flow_group := ButtonGroup.new() -var _speed_group := ButtonGroup.new() -var _play_button: Button -var _pause_button: Button -var _speed_buttons := {} - - -func _ready() -> void: - _grid.reset_to_starter() - _vault.grid = _grid - - add_to_group(SaveManagerService.PERSIST_GROUP) - _saves.begin_session(scene_file_path) - - _build_stats() - _build_tools() - _build_flow_controls() - _refresh_stats() - - _weather.attach_clock(_clock) - _weather.changed.connect(_on_weather_changed) - - _clock.minute_passed.connect(_on_minute_passed) - _clock.flow_changed.connect(_refresh_flow) - _refresh_moment() - _refresh_flow() - _on_weather_changed(_weather.kind) - _register_console_commands() - - _status.text = HINT - - -func _process(_delta: float) -> void: - # В режиме выбора призрака нет: пустой тип и (-1, -1) гасят подсветку. - if _mode == Mode.SELECT: - _vault.set_ghost("", Vector2i(-1, -1), false) - return - _vault.set_ghost(_build_kind, _cell_under_mouse(), _mode == Mode.DEMOLISH) - - -## ПКМ обслуживается здесь, а не в _unhandled_input: камера забирает эти -## события себе под перетаскивание вида. Событие не гасим — камера должна -## получить его как обычно. -func _input(event: InputEvent) -> void: - if not (event is InputEventMouseButton): - return - var button := event as InputEventMouseButton - if button.button_index != MOUSE_BUTTON_RIGHT: - return - - if button.pressed: - _right_pressed = true - _right_press_position = button.position - return - - if not _right_pressed: - return - _right_pressed = false - # Вид не двигали — значит это клик, а не перетаскивание. - if button.position.distance_to(_right_press_position) <= CLICK_SLACK: - _reset_to_select() - - -func _unhandled_input(event: InputEvent) -> void: - if not (event is InputEventMouseButton): - return - var button := event as InputEventMouseButton - if button.button_index != MOUSE_BUTTON_LEFT or not button.pressed: - return - # Берём точку из самого события, а не текущее положение курсора: клик - # должен срабатывать там, где кликнули. - _apply_at(_cell_at_screen(button.position)) - get_viewport().set_input_as_handled() - - -# --- Строительство ---------------------------------------------------------- - -func _cell_under_mouse() -> Vector2i: - return VaultGrid.cell_at(_vault.get_local_mouse_position()) - - -## Ячейка под точкой экрана. Учитывает камеру: переводим из координат -## окна в локальные координаты вида. -func _cell_at_screen(screen_position: Vector2) -> Vector2i: - var local := _vault.get_global_transform_with_canvas().affine_inverse() * screen_position - return VaultGrid.cell_at(local) - - -func _apply_at(cell: Vector2i) -> void: - match _mode: - Mode.SELECT: - _select_at(cell) - Mode.DEMOLISH: - if _grid.remove_at(cell.y, cell.x): - _after_change("Комната снесена.") - else: - _status.text = "Здесь нечего сносить." - Mode.BUILD: - if _grid.place(_build_kind, cell.y, cell.x): - _after_change("Построено: %s" % VaultGrid.KINDS[_build_kind]["label"]) - else: - _status.text = "Здесь строить нельзя: занято или вплотную к шахте." - - -func _after_change(message: String) -> void: - # Индексы комнат после изменения съезжают — выделение сбрасываем. - _set_selection(Vector2i(-1, -1)) - _vault.queue_redraw() - _refresh_stats() - _status.text = message - - -# --- Выбор ------------------------------------------------------------------ - -func _select_at(cell: Vector2i) -> void: - var index := _grid.room_index_at(cell.y, cell.x) - if index < 0: - _set_selection(Vector2i(-1, -1)) - _status.text = HINT - return - - _set_selection(cell) - _status.text = _describe(_grid.rooms[index]) - - -func _set_selection(cell: Vector2i) -> void: - _selected_cell = cell - _vault.set_selection(cell) - - -## Строка для нижней панели: что за комната, на каком этаже и её баланс. -func _describe(room: Dictionary) -> String: - var kind: Dictionary = VaultGrid.KINDS[String(room["kind"])] - var parts := PackedStringArray() - parts.append(String(kind["label"])) - parts.append("этаж %d" % (int(room["floor"]) + 1)) - for key: String in STAT_ROWS: - var amount := int(kind[key]) - if amount != 0: - parts.append("%s %+d" % [String(STAT_ROWS[key]["label"]).to_lower(), amount]) - return " · ".join(parts) - - -# --- Команды консоли -------------------------------------------------------- - -## Команды живут здесь, а не в самой консоли: они управляют этой сценой и -## умирают вместе с ней — консоль сама выбросит их, когда Callable протухнет. -func _register_console_commands() -> void: - var console := get_node_or_null("/root/DevConsole") - if console == null: - return - - console.register("stats", "текущее состояние партии", _cmd_stats) - console.register("time", "перевести часы", _cmd_time, "ЧЧ:ММ") - console.register("date", "сменить дату", _cmd_date, "ДД.ММ.ГГГГ") - console.register("speed", "скорость игры, 0 — пауза", _cmd_speed, "0..4") - console.register( - "weather", "поставить погоду", _cmd_weather, - "clear|cloudy|overcast|rain|storm|fog|snow" - ) - console.register("temp", "задать температуру", _cmd_temp, "°C") - console.register("wind", "задать ветер", _cmd_wind, "м/с") - console.register("build", "построить комнату", _cmd_build, "тип этаж колонка") - console.register("wipe", "снести все комнаты", _cmd_wipe) - - -func _cmd_stats(_arguments: Array[String]) -> String: - var totals := _grid.totals() - return "\n".join(PackedStringArray([ - "Время: %s, %s (%s, x%d)" % [ - _clock.date_text(), _clock.time_text(), - "идёт" if _clock.running else "пауза", _clock.speed, - ], - "Погода: %s, %s, ветер %s" % [ - _weather.label(), - Climate.temperature_text(_weather.temperature), - Climate.wind_text(_weather.wind_speed), - ], - "Облака: %.2f · осадки %.2f · дымка %.2f" % [ - _weather.clouds, _weather.precipitation, _weather.fog, - ], - "Комнат: %d" % _grid.rooms.size(), - "Ресурсы: питание %+d, вода %+d, еда %+d" % [ - int(totals["power"]), int(totals["water"]), int(totals["food"]), - ], - ])) - - -func _cmd_time(arguments: Array[String]) -> String: - if arguments.is_empty(): - return "Нужен аргумент: time ЧЧ:ММ" - var parts := arguments[0].split(":") - if parts.size() != 2: - return "Не разобрал время: %s" % arguments[0] - - var moment := _clock.now() - moment["hour"] = clampi(int(String(parts[0])), 0, 23) - moment["minute"] = clampi(int(String(parts[1])), 0, 59) - if not _clock.set_moment(moment): - return "Этот момент раньше начала партии." - - _refresh_all() - return "Часы: %s" % _clock.time_text() - - -func _cmd_date(arguments: Array[String]) -> String: - if arguments.is_empty(): - return "Нужен аргумент: date ДД.ММ.ГГГГ" - var parts := arguments[0].split(".") - if parts.size() != 3: - return "Не разобрал дату: %s" % arguments[0] - - var moment := _clock.now() - moment["day"] = clampi(int(String(parts[0])), 1, 31) - moment["month"] = clampi(int(String(parts[1])), 1, 12) - moment["year"] = int(String(parts[2])) - if not _clock.set_moment(moment): - return "Этот момент раньше начала партии." - - _refresh_all() - return "Дата: %s" % _clock.date_text() - - -func _cmd_speed(arguments: Array[String]) -> String: - if arguments.is_empty(): - return "Нужен аргумент: speed 0..4" - var value := int(arguments[0]) - if value <= 0: - _clock.pause() - return "Пауза." - _clock.set_speed(value) - return "Скорость x%d" % _clock.speed - - -func _cmd_weather(arguments: Array[String]) -> String: - if arguments.is_empty(): - return "Нужен аргумент: weather clear|cloudy|overcast|rain|storm|fog|snow" - - # Понимаем и латинский ключ, и русское название — как удобнее. - var wanted := arguments[0].to_lower() - for kind: int in WeatherSystem.KINDS: - var entry: Dictionary = WeatherSystem.KINDS[kind] - if String(entry["key"]) != wanted and String(entry["label"]).to_lower() != wanted: - continue - _weather.force_kind(kind) - _refresh_all() - return "Погода: %s" % _weather.label() - return "Не знаю такой погоды: %s" % arguments[0] - - -func _cmd_temp(arguments: Array[String]) -> String: - if arguments.is_empty(): - return "Нужен аргумент: temp °C" - _weather.nudge_temperature(float(arguments[0])) - _refresh_all() - return "Температура: %s" % Climate.temperature_text(_weather.temperature) - - -func _cmd_wind(arguments: Array[String]) -> String: - if arguments.is_empty(): - return "Нужен аргумент: wind м/с" - _weather.set_wind_speed(float(arguments[0])) - _refresh_all() - return "Ветер: %s" % Climate.wind_text(_weather.wind_speed) - - -func _cmd_build(arguments: Array[String]) -> String: - if arguments.size() < 3: - return "Нужно: build тип этаж колонка. Типы: %s" % ", ".join(VaultGrid.KINDS.keys()) - - var kind := arguments[0] - if not VaultGrid.KINDS.has(kind): - return "Нет такого типа: %s" % kind - - var a_floor := int(arguments[1]) - 1 - var column := int(arguments[2]) - if not _grid.place(kind, a_floor, column): - return "Сюда не поставить: занято или вплотную к шахте." - - _after_change("Построено из консоли: %s" % VaultGrid.KINDS[kind]["label"]) - return "Готово: %s на этаже %d" % [VaultGrid.KINDS[kind]["label"], a_floor + 1] - - -func _cmd_wipe(_arguments: Array[String]) -> String: - var removed := _grid.rooms.size() - _grid.rooms.clear() - _after_change("Убежище очищено.") - return "Снесено комнат: %d" % removed - - -## После вмешательства извне проще обновить всё, чем вспоминать, что зависит -## от чего. -func _refresh_all() -> void: - _refresh_moment() - _refresh_environment() - _refresh_weather_hud() - _refresh_flow() - _refresh_stats() - - -# --- Ход времени ------------------------------------------------------------ - -func _build_flow_controls() -> void: - # Тема рассчитана на крупные кнопки меню; для панели времени нужен свой, - # компактный набор стилей. Ресурсы общие на все кнопки — их всего четыре. - var styles := { - "normal": _flow_style("#ffffff0d", "#ffffff1f"), - "hover": _flow_style("#2ee6c51f", "#2ee6c566"), - "pressed": _flow_style("#2ee6c52e", "#2ee6c5cc"), - "focus": _flow_style("#2ee6c51a", "#2ee6c599"), - } - - _play_button = _add_flow_button("▶", _flow_group, styles) - _play_button.pressed.connect(_clock.play) - - _pause_button = _add_flow_button("❚❚", _flow_group, styles) - _pause_button.pressed.connect(_clock.pause) - - var gap := Control.new() - gap.custom_minimum_size.x = 8 - _flow_controls.add_child(gap) - - for multiplier: int in GameClock.SPEEDS: - # Выбор скорости заодно снимает паузу — отдельно жать «play» не нужно. - var button := _add_flow_button("x%d" % multiplier, _speed_group, styles) - button.pressed.connect(_clock.set_speed.bind(multiplier)) - _speed_buttons[multiplier] = button - - -func _add_flow_button(label: String, group: ButtonGroup, styles: Dictionary) -> Button: - var button := Button.new() - button.text = label - button.toggle_mode = true - button.button_group = group - button.custom_minimum_size.x = 34 - button.add_theme_font_size_override("font_size", 13) - for state: String in styles: - button.add_theme_stylebox_override(state, styles[state]) - _flow_controls.add_child(button) - return button - - -func _flow_style(background: String, border: String) -> StyleBoxFlat: - var style := StyleBoxFlat.new() - style.bg_color = Color(background) - style.border_color = Color(border) - style.set_border_width_all(1) - style.set_corner_radius_all(5) - style.content_margin_left = 9.0 - style.content_margin_right = 9.0 - style.content_margin_top = 4.0 - style.content_margin_bottom = 4.0 - return style - - -func _on_minute_passed(_total_minutes: int) -> void: - _refresh_moment() - _refresh_environment() - _refresh_weather_hud() - - -func _on_weather_changed(_kind: int) -> void: - _refresh_weather_hud() - - -func _refresh_weather_hud() -> void: - var hour := SkyCycle.hour_of(_clock.now()) - var is_night := SkyCycle.sun_progress(hour) < 0.0 - - _weather_icon.set_state(_weather.kind, is_night) - _weather_label.text = _weather.label() - _temp_label.text = Climate.temperature_text(_weather.temperature) - _wind_label.text = Climate.wind_text(_weather.wind_speed) - - -func _refresh_moment() -> void: - _date_label.text = _clock.date_text() - _time_label.text = _clock.time_text() - - -## Небо и поверхность зависят от одних и тех же двух вещей — часа и погоды. -func _refresh_environment() -> void: - var hour := SkyCycle.hour_of(_clock.now()) - _sky.set_conditions(hour, _weather.clouds) - _surface.set_conditions(hour, _weather) - - -## Кнопки только отражают состояние часов — источник правды там. -func _refresh_flow() -> void: - # Облака и осадки идут в такт игре: на паузе они замирают. - _surface.time_scale = float(_clock.speed) if _clock.running else 0.0 - _play_button.set_pressed_no_signal(_clock.running) - _pause_button.set_pressed_no_signal(not _clock.running) - for multiplier: int in _speed_buttons: - var button: Button = _speed_buttons[multiplier] - button.set_pressed_no_signal(multiplier == _clock.speed) - - -# --- HUD -------------------------------------------------------------------- - -func _build_stats() -> void: - for key: String in STAT_ROWS: - var row := VBoxContainer.new() - row.add_theme_constant_override("separation", 0) - - var caption := Label.new() - caption.text = String(STAT_ROWS[key]["label"]) - caption.add_theme_font_size_override("font_size", 14) - caption.add_theme_color_override("font_color", Color("#8fa5ba")) - row.add_child(caption) - - var value := Label.new() - value.add_theme_font_size_override("font_size", 24) - value.add_theme_color_override("font_color", Color(String(STAT_ROWS[key]["color"]))) - row.add_child(value) - - _stat_labels[key] = value - _stats.add_child(row) - - -func _refresh_stats() -> void: - var totals := _grid.totals() - for key: String in _stat_labels: - var amount := int(totals[key]) - var label: Label = _stat_labels[key] - label.text = "%+d" % amount - # Дефицит важнее оформления: красим в тревожный цвет, а не в цвет ресурса. - if amount < 0: - label.add_theme_color_override("font_color", Color("#f2704a")) - else: - label.add_theme_color_override("font_color", Color(String(STAT_ROWS[key]["color"]))) - - -func _build_tools() -> void: - # Отдельной кнопки «Выбор» нет: выбор — это состояние по умолчанию, когда - # ни один инструмент не нажат. allow_unpress даёт отжать активный - # инструмент повторным кликом и вернуться к выбору. - _tool_group.allow_unpress = true - - for kind: String in VaultGrid.KINDS: - var button := Button.new() - button.text = String(VaultGrid.KINDS[kind]["label"]) - button.toggle_mode = true - button.button_group = _tool_group - button.add_theme_font_size_override("font_size", 18) - button.toggled.connect(_on_kind_toggled.bind(kind)) - _tools.add_child(button) - - var separator := Control.new() - separator.custom_minimum_size.x = 20 - _tools.add_child(separator) - - var demolish := Button.new() - demolish.text = "Снести" - demolish.toggle_mode = true - demolish.button_group = _tool_group - demolish.add_theme_font_size_override("font_size", 18) - demolish.toggled.connect(_on_demolish_toggled) - _tools.add_child(demolish) - - -## Возврат к выбору: ни один инструмент не нажат. -func _reset_to_select() -> void: - if _mode == Mode.SELECT: - return - _mode = Mode.SELECT - _build_kind = "" - - var active := _tool_group.get_pressed_button() - if active != null: - active.set_pressed_no_signal(false) - - _status.text = HINT - - -func _on_kind_toggled(is_on: bool, kind: String) -> void: - if not is_on: - # Инструмент отжали — если он и был активным, возвращаемся к выбору. - if _mode == Mode.BUILD and _build_kind == kind: - _reset_to_select() - return - - _mode = Mode.BUILD - _build_kind = kind - _set_selection(Vector2i(-1, -1)) - _status.text = "Стройка: %s · ЛКМ — поставить · ПКМ — отмена" % VaultGrid.KINDS[kind]["label"] - - -func _on_demolish_toggled(is_on: bool) -> void: - if not is_on: - if _mode == Mode.DEMOLISH: - _reset_to_select() - return - - _mode = Mode.DEMOLISH - _build_kind = "" - _set_selection(Vector2i(-1, -1)) - _status.text = "Снос: кликните по комнате · ПКМ — отмена" - - -# --- Сохранение ------------------------------------------------------------- - -func save_data() -> Dictionary: - return { - "rooms": _grid.to_array(), - "clock": _clock.save_data(), - "weather": _weather.save_data(), - "camera": { - "x": _camera.position.x, - "y": _camera.position.y, - "zoom": _camera.zoom.x, - }, - } - - -func load_data(data: Dictionary) -> void: - _grid.from_array(data.get("rooms", [])) - _clock.load_data(data.get("clock", {})) - _weather.load_data(data.get("weather", {})) - _refresh_environment() - - var camera_state: Dictionary = data.get("camera", {}) - if not camera_state.is_empty(): - _camera.position = Vector2( - float(camera_state.get("x", 0.0)), float(camera_state.get("y", 0.0)) - ) - var level := float(camera_state.get("zoom", 1.0)) - _camera.zoom = Vector2(level, level) - - _set_selection(Vector2i(-1, -1)) - _vault.queue_redraw() - _refresh_stats() - _status.text = "Убежище загружено." diff --git a/scripts/game/vault_scene.gd.uid b/scripts/game/vault_scene.gd.uid deleted file mode 100644 index 4a56566..0000000 --- a/scripts/game/vault_scene.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://lsclvc1dgviq diff --git a/scripts/game/vault_view.gd b/scripts/game/vault_view.gd deleted file mode 100644 index 5890368..0000000 --- a/scripts/game/vault_view.gd +++ /dev/null @@ -1,323 +0,0 @@ -class_name VaultView -extends Node2D -## Отрисовка убежища в разрезе: небо, порода, лифтовая шахта, комнаты -## и призрак строительства. -## -## Ассетов у проекта пока нет, поэтому всё рисуется процедурно в _draw(). -## Когда появится графика, заменять нужно только этот файл — модель -## (VaultGrid) и логика сцены от него не зависят. - -const DIRT_TOP := Color("#2a231d") -const DIRT_BOTTOM := Color("#100d0b") -const SURFACE := Color("#3d4f3a") - -const SHELL := Color("#1b262c") -const WALL := Color("#2c3b45") -const OUTLINE := Color("#080d11") -const SHAFT := Color("#141c21") -const RUNG := Color("#c9a227", 0.45) -const CABIN := Color("#c9a227", 0.22) - -const HUT_WALL := Color("#26333b") -const HUT_ROOF := Color("#33434d") -const HUT_DOOR := Color("#0a1014") -const HUT_LAMP := Color("#f2b134") - -const EMPTY_FILL := Color("#ffffff", 0.02) -const EMPTY_LINE := Color("#ffffff", 0.06) -const GHOST_OK := Color("#2ee6c5") -const GHOST_BAD := Color("#f2704a") -const SELECTION := Color("#ffffff") - -const MARGIN := 1200.0 -const DIRT_DEPTH := 460.0 -const PEBBLE_SEED := 20260810 - -## Модель, которую рисуем. Ставится сценой сразу после создания. -var grid: VaultGrid - -var _ghost_kind := "" -var _ghost_cell := Vector2i(-1, -1) -var _demolish := false -## Якорная ячейка выделенной комнаты; (-1, -1) — ничего не выделено. -var _selected_cell := Vector2i(-1, -1) -var _pebbles: Array[Dictionary] = [] - - -func _ready() -> void: - _generate_pebbles() - - -## Подсветка под курсором: тип строящейся комнаты (пустая строка — ничего), -## ячейка и режим сноса. -func set_ghost(kind: String, cell: Vector2i, demolish: bool) -> void: - if kind == _ghost_kind and cell == _ghost_cell and demolish == _demolish: - return - _ghost_kind = kind - _ghost_cell = cell - _demolish = demolish - queue_redraw() - - -## Выделенная комната задаётся ячейкой, а не индексом: индексы съезжают -## при сносе, а ячейка остаётся собой. -func set_selection(cell: Vector2i) -> void: - if cell == _selected_cell: - return - _selected_cell = cell - queue_redraw() - - -func _draw() -> void: - if grid == null: - return - _draw_dirt() - _draw_shell() - _draw_empty_cells() - _draw_shaft() - _draw_entrance() - _draw_floor_numbers() - for room: Dictionary in grid.rooms: - _draw_room(room) - _draw_selection() - _draw_ghost() - - -# --- Фон -------------------------------------------------------------------- - -func _draw_dirt() -> void: - var bounds := VaultGrid.bounds() - var left := -MARGIN - var right := bounds.size.x + MARGIN - var depth := bounds.end.y + DIRT_DEPTH - _fill_gradient(Rect2(Vector2(left, 0.0), Vector2(right - left, depth)), DIRT_TOP, DIRT_BOTTOM) - - for pebble: Dictionary in _pebbles: - draw_circle(pebble["position"], float(pebble["radius"]), pebble["color"]) - - # Полоса поверхности — граница земли и неба. - draw_line(Vector2(left, 0.0), Vector2(right, 0.0), SURFACE, 5.0) - - -## Заливка прямоугольника вертикальным градиентом: draw_rect умеет только -## сплошной цвет, поэтому идём через полигон с цветами вершин. -func _fill_gradient(rect: Rect2, top: Color, bottom: Color) -> void: - var points := PackedVector2Array([ - rect.position, - Vector2(rect.end.x, rect.position.y), - rect.end, - Vector2(rect.position.x, rect.end.y), - ]) - draw_polygon(points, PackedColorArray([top, top, bottom, bottom])) - - -func _generate_pebbles() -> void: - var rng := RandomNumberGenerator.new() - rng.seed = PEBBLE_SEED - var bounds := VaultGrid.bounds() - for i in 260: - _pebbles.append({ - "position": Vector2( - rng.randf_range(-MARGIN, bounds.size.x + MARGIN), - rng.randf_range(6.0, bounds.end.y + DIRT_DEPTH) - ), - "radius": rng.randf_range(1.5, 5.0), - "color": Color("#000000", rng.randf_range(0.10, 0.28)), - }) - - -# --- Убежище ---------------------------------------------------------------- - -func _draw_shell() -> void: - draw_rect(VaultGrid.bounds().grow(10.0), SHELL) - - -func _draw_empty_cells() -> void: - for a_floor in VaultGrid.FLOORS: - for column in range(VaultGrid.ELEVATOR_COLUMN + 1, VaultGrid.COLUMNS): - if grid.room_index_at(a_floor, column) >= 0: - continue - var rect := VaultGrid.cell_rect(a_floor, column).grow(-3.0) - draw_rect(rect, EMPTY_FILL) - draw_rect(rect, EMPTY_LINE, false, 1.0) - - -func _draw_shaft() -> void: - var bounds := VaultGrid.bounds() - var left := VaultGrid.ELEVATOR_COLUMN * VaultGrid.CELL.x - # Шахта идёт от самой поверхности до низа: она связывает вход с этажами. - var rect := Rect2(Vector2(left, 0.0), Vector2(VaultGrid.CELL.x, bounds.end.y)) - - # Ствол выше убежища обшиваем — иначе шахта висит в породе без стенок. - draw_rect( - Rect2(Vector2(left - 9.0, 0.0), Vector2(rect.size.x + 18.0, bounds.position.y)), - SHELL - ) - draw_rect(rect, SHAFT) - - var y := 16.0 - while y < rect.size.y: - draw_line(Vector2(rect.position.x + 18.0, y), Vector2(rect.end.x - 18.0, y), RUNG, 2.0) - y += 26.0 - - # Кабина стоит на верхнем этаже убежища, а не на уровне земли. - var cabin := Rect2( - Vector2(rect.position.x + 22.0, bounds.position.y + 14.0), - Vector2(rect.size.x - 44.0, 92.0) - ) - draw_rect(cabin, CABIN) - draw_rect(cabin, RUNG, false, 2.0) - draw_rect(rect, OUTLINE, false, 2.0) - - -## Будка входа на поверхности: то, что видно снаружи над шахтой. -func _draw_entrance() -> void: - var center_x := VaultGrid.ELEVATOR_COLUMN * VaultGrid.CELL.x + VaultGrid.CELL.x * 0.5 - var half := 96.0 - var height := 132.0 - - var body := Rect2(Vector2(center_x - half, -height), Vector2(half * 2.0, height)) - draw_rect(body, HUT_WALL) - draw_rect(body, OUTLINE, false, 2.0) - - var roof := Rect2( - Vector2(center_x - half - 16.0, -height - 18.0), Vector2((half + 16.0) * 2.0, 18.0) - ) - draw_rect(roof, HUT_ROOF) - draw_rect(roof, OUTLINE, false, 2.0) - - # Проём над шахтой — вход и есть устье ствола. - var door := Rect2(Vector2(center_x - 34.0, -height + 40.0), Vector2(68.0, height - 40.0)) - draw_rect(door, HUT_DOOR) - draw_rect(door, RUNG, false, 2.0) - - # Лампа над дверью со скромным ореолом. - var lamp := Vector2(center_x, -height + 24.0) - draw_circle(lamp, 16.0, Color(HUT_LAMP, 0.10)) - draw_circle(lamp, 6.0, HUT_LAMP) - - # Мачта на крыше — силуэт, который читается издалека. - var mast_x := center_x + half - 22.0 - draw_line( - Vector2(mast_x, -height - 18.0), Vector2(mast_x, -height - 86.0), HUT_ROOF, 4.0 - ) - draw_line( - Vector2(mast_x - 14.0, -height - 62.0), Vector2(mast_x + 14.0, -height - 62.0), - HUT_ROOF, 3.0 - ) - - -func _draw_floor_numbers() -> void: - var font := ThemeDB.fallback_font - for a_floor in VaultGrid.FLOORS: - var row := VaultGrid.cell_rect(a_floor, 0) - var pos := Vector2(-46.0, row.position.y + VaultGrid.CELL.y * 0.5 + 7.0) - draw_string(font, pos, str(a_floor + 1), HORIZONTAL_ALIGNMENT_LEFT, -1, 20, - Color("#ffffff", 0.28)) - - -func _draw_room(room: Dictionary) -> void: - var rect := VaultGrid.room_rect(room) - var kind: Dictionary = VaultGrid.KINDS[String(room["kind"])] - var accent := Color(String(kind["color"])) - - draw_rect(rect, WALL) - - var inner := rect.grow(-7.0) - _fill_gradient(inner, accent.lerp(Color("#0b1116"), 0.58), accent.lerp(Color("#060a0d"), 0.86)) - - # Свет от потолочной лампы. - var lamp := Vector2(inner.position.x + inner.size.x * 0.5, inner.position.y + 2.0) - draw_polygon( - PackedVector2Array([ - lamp + Vector2(-16.0, 0.0), - lamp + Vector2(16.0, 0.0), - Vector2(inner.end.x - 10.0, inner.end.y), - Vector2(inner.position.x + 10.0, inner.end.y), - ]), - PackedColorArray([ - Color(accent, 0.13), Color(accent, 0.13), Color(accent, 0.0), Color(accent, 0.0), - ]) - ) - - _draw_equipment(inner, accent, VaultGrid.kind_width(String(room["kind"]))) - - # Пол. - draw_rect( - Rect2(Vector2(inner.position.x, inner.end.y - 7.0), Vector2(inner.size.x, 7.0)), - accent.lerp(Color("#05080a"), 0.55) - ) - draw_rect(rect, OUTLINE, false, 2.0) - - draw_string(ThemeDB.fallback_font, rect.position + Vector2(14.0, 30.0), - String(kind["label"]), HORIZONTAL_ALIGNMENT_LEFT, rect.size.x - 20.0, 17, - Color("#e6f1f7", 0.92)) - - -## Силуэты оборудования у пола — чтобы комнаты не выглядели пустыми коробками. -func _draw_equipment(inner: Rect2, accent: Color, width: int) -> void: - var body := accent.lerp(Color("#04070a"), 0.62) - var glow := Color(accent, 0.55) - var baseline := inner.end.y - 7.0 - var count := 3 if width > 1 else 2 - var step := inner.size.x / float(count + 1) - - for i in range(1, count + 1): - var center_x := inner.position.x + step * i - var height := 26.0 + float((i * 13) % 22) - var machine := Rect2(Vector2(center_x - 17.0, baseline - height), Vector2(34.0, height)) - draw_rect(machine, body) - draw_rect(Rect2(machine.position + Vector2(6.0, 6.0), Vector2(22.0, 4.0)), glow) - - -# --- Выделение и строительство ---------------------------------------------- - -## Рамка с уголками вокруг выбранной комнаты. Уголки нужны, чтобы выделение -## читалось поверх любой заливки — тонкой линии на пёстром фоне мало. -func _draw_selection() -> void: - if _selected_cell.x < 0: - return - var index := grid.room_index_at(_selected_cell.y, _selected_cell.x) - if index < 0: - return - - var rect := VaultGrid.room_rect(grid.rooms[index]).grow(-2.0) - draw_rect(rect, Color(SELECTION, 0.08)) - draw_rect(rect, Color(SELECTION, 0.75), false, 2.0) - - var arm := 20.0 - var corners := [ - [rect.position, Vector2(1.0, 1.0)], - [Vector2(rect.end.x, rect.position.y), Vector2(-1.0, 1.0)], - [rect.end, Vector2(-1.0, -1.0)], - [Vector2(rect.position.x, rect.end.y), Vector2(1.0, -1.0)], - ] - for entry: Array in corners: - var point: Vector2 = entry[0] - var direction: Vector2 = entry[1] - draw_line(point, point + Vector2(arm * direction.x, 0.0), SELECTION, 4.0) - draw_line(point, point + Vector2(0.0, arm * direction.y), SELECTION, 4.0) - - -func _draw_ghost() -> void: - if _ghost_cell.x < 0: - return - - if _demolish: - var index := grid.room_index_at(_ghost_cell.y, _ghost_cell.x) - if index < 0: - return - var target := VaultGrid.room_rect(grid.rooms[index]) - draw_rect(target, Color(GHOST_BAD, 0.22)) - draw_rect(target, GHOST_BAD, false, 3.0) - return - - if _ghost_kind.is_empty(): - return - - var width := VaultGrid.kind_width(_ghost_kind) - var rect := VaultGrid.cell_rect(_ghost_cell.y, _ghost_cell.x, width) - var allowed := grid.can_place(_ghost_kind, _ghost_cell.y, _ghost_cell.x) - var tint := GHOST_OK if allowed else GHOST_BAD - draw_rect(rect, Color(tint, 0.16)) - draw_rect(rect, tint, false, 3.0) diff --git a/scripts/game/vault_view.gd.uid b/scripts/game/vault_view.gd.uid deleted file mode 100644 index f7cf9ca..0000000 --- a/scripts/game/vault_view.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://bvimo3kgmefgf diff --git a/scripts/game/weather_system.gd b/scripts/game/weather_system.gd deleted file mode 100644 index 00822fe..0000000 --- a/scripts/game/weather_system.gd +++ /dev/null @@ -1,221 +0,0 @@ -class_name WeatherSystem -extends Node -## Погода: тип, температура, ветер и плавные переходы между состояниями. -## -## Данные и правила, без отрисовки. Вид (surface_view.gd, sky_view.gd) читает -## отсюда `clouds`, `precipitation`, `fog` и `wind`, HUD — `temperature` -## и `wind_speed`. Норму по сезону даёт climate.gd. -## -## Такт берётся у GameClock, поэтому погода стоит вместе с паузой и ускоряется -## вместе со скоростью игры — своего таймера здесь нет намеренно. - -enum Kind { CLEAR, CLOUDY, OVERCAST, RAIN, STORM, FOG, SNOW } - -## Целевые параметры картинки для каждого типа. Температура и ветер сюда не -## входят: они зависят ещё и от сезона, их считает Climate. -## -## `key` — латинское имя для консоли: набирать русские названия с латинской -## раскладки неудобно, а переключаться посреди отладки — тем более. -const KINDS := { - Kind.CLEAR: { - "label": "Ясно", "key": "clear", - "clouds": 0.12, "precipitation": 0.0, "fog": 0.0, - }, - Kind.CLOUDY: { - "label": "Облачно", "key": "cloudy", - "clouds": 0.45, "precipitation": 0.0, "fog": 0.0, - }, - Kind.OVERCAST: { - "label": "Пасмурно", "key": "overcast", - "clouds": 0.85, "precipitation": 0.0, "fog": 0.06, - }, - Kind.RAIN: { - "label": "Дождь", "key": "rain", - "clouds": 0.95, "precipitation": 0.55, "fog": 0.14, - }, - Kind.STORM: { - "label": "Ливень", "key": "storm", - "clouds": 1.0, "precipitation": 1.0, "fog": 0.22, - }, - Kind.FOG: { - "label": "Туман", "key": "fog", - "clouds": 0.3, "precipitation": 0.0, "fog": 0.62, - }, - Kind.SNOW: { - "label": "Снег", "key": "snow", - "clouds": 0.9, "precipitation": 0.5, "fog": 0.24, - }, -} - -## Куда погода может перейти и с каким относительным весом. Матрица, а не -## общий мешок: так дождь приходит через пасмурно, а не из ясного неба. -const TRANSITIONS := { - Kind.CLEAR: {Kind.CLEAR: 4, Kind.CLOUDY: 5, Kind.FOG: 1}, - Kind.CLOUDY: {Kind.CLEAR: 4, Kind.CLOUDY: 2, Kind.OVERCAST: 4, Kind.FOG: 1}, - Kind.OVERCAST: {Kind.CLOUDY: 4, Kind.OVERCAST: 2, Kind.RAIN: 4, Kind.SNOW: 1}, - Kind.RAIN: {Kind.RAIN: 2, Kind.STORM: 2, Kind.OVERCAST: 5}, - Kind.STORM: {Kind.RAIN: 5, Kind.OVERCAST: 2}, - Kind.FOG: {Kind.FOG: 2, Kind.CLEAR: 4, Kind.CLOUDY: 3}, - Kind.SNOW: {Kind.SNOW: 3, Kind.OVERCAST: 4, Kind.CLOUDY: 2}, -} - -const MIN_DURATION := 120 -const MAX_DURATION := 420 -## За сколько игровых минут параметры доходят до целевых. -const BLEND_MINUTES := 45.0 -## Насколько воздушная масса может отклонить температуру от нормы, °C. -const DRIFT_RANGE := 3.0 - -## Сменился тип погоды — для HUD и звука. -signal changed(kind: int) - -var kind := Kind.CLEAR -var clouds := 0.12 -var precipitation := 0.0 -var fog := 0.0 -## Ветер 0..1 для картинки; в метрах в секунду — wind_speed. -var wind := 0.15 -var wind_speed := 2.5 -var temperature := 8.0 - -var _minutes_left := MIN_DURATION -## Отклонение текущей воздушной массы от климатической нормы, °C. -var _temperature_drift := 0.0 -var _rng := RandomNumberGenerator.new() -var _clock: GameClock - - -func _ready() -> void: - _rng.randomize() - _apply_target(1.0) - - -## Сцена связывает погоду с часами: без этого она стоит на месте. -func attach_clock(clock: GameClock) -> void: - _clock = clock - _clock.minute_passed.connect(_on_minute_passed) - # Прыжок во времени — не то же, что ход времени: догонять новый сезон - # плавно после переноса на полгода бессмысленно, берём норму сразу. - _clock.jumped.connect(_on_clock_jumped) - _apply_climate(1.0) - - -func label() -> String: - return String(KINDS[kind]["label"]) - - -## Идёт ли снег, а не дождь — виду нужно рисовать разное. -func is_snowing() -> bool: - return kind == Kind.SNOW - - -# --- Ручное управление (консоль разработчика) ------------------------------- - -## Поставить конкретную погоду немедленно, минуя матрицу переходов. -func force_kind(value: int, hold_minutes := MAX_DURATION) -> void: - kind = clampi(value, 0, KINDS.size() - 1) - _minutes_left = hold_minutes - changed.emit(kind) - - -## Сдвинуть воздушную массу так, чтобы сейчас было примерно `celsius`. -## Значение держится до следующей смены погоды, а не жёстко фиксируется. -func nudge_temperature(celsius: float) -> void: - _temperature_drift += celsius - temperature - temperature = celsius - - -func set_wind_speed(speed: float) -> void: - wind_speed = maxf(speed, 0.0) - wind = clampf(wind_speed / Climate.WIND_REFERENCE, 0.0, 1.0) - - -# --- Сохранение ------------------------------------------------------------- - -func save_data() -> Dictionary: - # Облачность, осадки и дымку не пишем: это промежуточные значения перехода, - # и в слоте они противоречили бы названию погоды — туман с ливневыми - # осадками. При загрузке они берутся из типа напрямую. - return { - "kind": int(kind), - "minutes_left": _minutes_left, - "wind_speed": wind_speed, - "temperature": temperature, - "drift": _temperature_drift, - } - - -func load_data(data: Dictionary) -> void: - kind = clampi(int(data.get("kind", Kind.CLEAR)), 0, KINDS.size() - 1) - _minutes_left = int(data.get("minutes_left", MIN_DURATION)) - temperature = float(data.get("temperature", 8.0)) - _temperature_drift = float(data.get("drift", 0.0)) - set_wind_speed(float(data.get("wind_speed", 2.5))) - # Картинка сразу соответствует названию погоды, без доблёкивания. - _apply_target(1.0) - changed.emit(kind) - - -# --- Внутреннее ------------------------------------------------------------- - -func _on_clock_jumped() -> void: - _apply_climate(1.0) - - -func _on_minute_passed(_total_minutes: int) -> void: - _apply_target(1.0 / BLEND_MINUTES) - _apply_climate(1.0 / BLEND_MINUTES) - - _minutes_left -= 1 - if _minutes_left > 0: - return - - kind = _roll_next() - _minutes_left = _rng.randi_range(MIN_DURATION, MAX_DURATION) - # Новая погода — новая воздушная масса. - _temperature_drift = _rng.randf_range(-DRIFT_RANGE, DRIFT_RANGE) - changed.emit(kind) - - -## Параметры картинки не прыгают вместе с типом: они доходят до цели плавно. -func _apply_target(weight: float) -> void: - var target: Dictionary = KINDS[kind] - clouds = lerpf(clouds, float(target["clouds"]), weight) - precipitation = lerpf(precipitation, float(target["precipitation"]), weight) - fog = lerpf(fog, float(target["fog"]), weight) - - -## Температура и ветер идут к сезонной норме с поправкой на тип погоды. -func _apply_climate(weight: float) -> void: - if _clock == null: - return - var moment := _clock.now() - var target := Climate.base_temperature(int(moment["month"]), SkyCycle.hour_of(moment)) - target += Climate.weather_offset(kind) + _temperature_drift - temperature = lerpf(temperature, target, weight) - - set_wind_speed(lerpf(wind_speed, Climate.base_wind(kind), weight)) - - -func _roll_next() -> int: - var options: Dictionary = TRANSITIONS[kind] - var total := 0 - for weight: int in options.values(): - total += weight - - var pick := _rng.randi_range(1, total) - for candidate: int in options: - pick -= int(options[candidate]) - if pick <= 0: - return _by_temperature(candidate) - return kind - - -## Форму осадков решает градусник, а не календарь: у нуля дождь становится -## снегом и наоборот. Так это можно проверить, подкрутив температуру. -func _by_temperature(candidate: int) -> int: - if candidate == Kind.SNOW and temperature > Climate.SNOW_THRESHOLD + 1.5: - return Kind.RAIN - if candidate == Kind.RAIN and temperature < Climate.SNOW_THRESHOLD: - return Kind.SNOW - return candidate diff --git a/scripts/game/weather_system.gd.uid b/scripts/game/weather_system.gd.uid deleted file mode 100644 index 8ef3ac0..0000000 --- a/scripts/game/weather_system.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://by1cwvs3fc3pa diff --git a/scripts/ui/dev_console.gd b/scripts/ui/dev_console.gd deleted file mode 100644 index f3a2a15..0000000 --- a/scripts/ui/dev_console.gd +++ /dev/null @@ -1,230 +0,0 @@ -extends CanvasLayer -## Консоль разработчика: ввод команд поверх игры. -## -## Автозагрузка, поэтому доступна из любой сцены. Своих знаний об игре у неё -## нет — команды регистрируют сцены через register(). Так консоль не тянет за -## собой игровую логику, а команды живут рядом с тем, чем управляют. -## -## Открывается тильдой или F1. Слой обрабатывается всегда, поэтому работает -## и на паузе — иначе отлаживать остановленную игру было бы нечем. - -const HISTORY_LIMIT := 40 - -## Файловый мост для внешних инструментов (MCP, скрипты, CI). -## -## Внедрённые события клавиатуры доносят до LineEdit код клавиши, но не символ, -## поэтому набрать команду извне нельзя. Мост обходит клавиатуру: во входной -## файл кладут строки, консоль их выполняет и удаляет файл, а весь вывод -## дублирует в лог. Только в отладочной сборке — в релиз это не попадёт. -const BRIDGE_IN := "user://console_in.txt" -const BRIDGE_LOG := "user://console_log.txt" -const BRIDGE_INTERVAL := 0.25 - -const COLOR_ECHO := "#5d7288" -const COLOR_INFO := "#dbe7f0" -const COLOR_OK := "#2ee6c5" -const COLOR_ERROR := "#f2704a" - -@onready var _root: Control = $Root -@onready var _output: RichTextLabel = $Root/Panel/Body/Output -@onready var _entry: LineEdit = $Root/Panel/Body/InputRow/Input - -## Имя команды -> {description, usage, handler} -var _commands := {} -var _history: Array[String] = [] -var _history_index := 0 -var _log: FileAccess - - -func _ready() -> void: - _root.visible = false - _entry.text_submitted.connect(_on_submitted) - - _register_builtin() - _start_bridge() - print_line("Консоль разработчика. `help` — список команд.", COLOR_INFO) - - -func _input(event: InputEvent) -> void: - if not (event is InputEventKey and event.is_pressed() and not event.is_echo()): - return - - var key := (event as InputEventKey).keycode - if key == KEY_QUOTELEFT or key == KEY_F1: - toggle() - get_viewport().set_input_as_handled() - return - - if not _root.visible: - return - - # История — стрелками, как в настоящей консоли. - match key: - KEY_UP: - _recall(-1) - get_viewport().set_input_as_handled() - KEY_DOWN: - _recall(1) - get_viewport().set_input_as_handled() - KEY_ESCAPE: - close() - get_viewport().set_input_as_handled() - - -# --- Открытие / закрытие ---------------------------------------------------- - -func toggle() -> void: - if _root.visible: - close() - else: - open() - - -func open() -> void: - _root.visible = true - _entry.clear() - _entry.grab_focus() - - -func close() -> void: - _root.visible = false - _entry.release_focus() - - -# --- Реестр команд ---------------------------------------------------------- - -## Сцены регистрируют свои команды здесь. `handler` принимает Array[String] -## аргументов и возвращает String — что напечатать. -func register(command: String, description: String, handler: Callable, usage := "") -> void: - _commands[command] = { - "description": description, - "usage": usage, - "handler": handler, - } - - -func unregister(command: String) -> void: - _commands.erase(command) - - -func print_line(text: String, color := COLOR_INFO) -> void: - _output.append_text("[color=%s]%s[/color]\n" % [color, text]) - if _log != null: - # Сбрасываем сразу: внешний инструмент читает файл, пока игра жива. - _log.store_line(text) - _log.flush() - - -# --- Файловый мост ---------------------------------------------------------- - -func _start_bridge() -> void: - if not OS.is_debug_build(): - return - - # Лог перезаписывается на каждый запуск — так в нём только текущая сессия. - _log = FileAccess.open(BRIDGE_LOG, FileAccess.WRITE) - - var timer := Timer.new() - timer.wait_time = BRIDGE_INTERVAL - timer.autostart = true - timer.timeout.connect(_poll_bridge) - add_child(timer) - - -func _poll_bridge() -> void: - if not FileAccess.file_exists(BRIDGE_IN): - return - - var file := FileAccess.open(BRIDGE_IN, FileAccess.READ) - if file == null: - return - var payload := file.get_as_text() - file.close() - # Удаляем сразу, иначе команды выполнятся повторно на следующем тике. - DirAccess.remove_absolute(BRIDGE_IN) - - for line: String in payload.split("\n", false): - _on_submitted(line) - - -# --- Выполнение ------------------------------------------------------------- - -func _on_submitted(line: String) -> void: - _entry.clear() - var trimmed := line.strip_edges() - if trimmed.is_empty(): - return - - _remember(trimmed) - print_line("> " + trimmed, COLOR_ECHO) - - var parts := trimmed.split(" ", false) - var command := String(parts[0]).to_lower() - var arguments: Array[String] = [] - for index in range(1, parts.size()): - arguments.append(String(parts[index])) - - _execute(command, arguments) - - -func _execute(command: String, arguments: Array[String]) -> void: - if not _commands.has(command): - print_line("Неизвестная команда: %s. `help` — список." % command, COLOR_ERROR) - return - - var entry: Dictionary = _commands[command] - var handler: Callable = entry["handler"] - # Сцена могла смениться — её команды умирают вместе с ней. - if not handler.is_valid(): - _commands.erase(command) - print_line("Команда %s больше недоступна в этой сцене." % command, COLOR_ERROR) - return - - var result: Variant = handler.call(arguments) - if result is String and not String(result).is_empty(): - print_line(String(result), COLOR_OK) - - -# --- История ---------------------------------------------------------------- - -func _remember(line: String) -> void: - _history.append(line) - if _history.size() > HISTORY_LIMIT: - _history.remove_at(0) - _history_index = _history.size() - - -func _recall(step: int) -> void: - if _history.is_empty(): - return - _history_index = clampi(_history_index + step, 0, _history.size()) - if _history_index == _history.size(): - _entry.clear() - return - _entry.text = _history[_history_index] - _entry.caret_column = _entry.text.length() - - -# --- Встроенные команды ----------------------------------------------------- - -func _register_builtin() -> void: - register("help", "список команд", _cmd_help) - register("cls", "очистить вывод", _cmd_clear) - - -func _cmd_help(_arguments: Array[String]) -> String: - var names := _commands.keys() - names.sort() - - var lines := PackedStringArray() - for name: String in names: - var entry: Dictionary = _commands[name] - var usage := String(entry["usage"]) - var head := name if usage.is_empty() else "%s %s" % [name, usage] - lines.append(" %-24s %s" % [head, String(entry["description"])]) - return "\n".join(lines) - - -func _cmd_clear(_arguments: Array[String]) -> String: - _output.clear() - return "" diff --git a/scripts/ui/dev_console.gd.uid b/scripts/ui/dev_console.gd.uid deleted file mode 100644 index 85ee774..0000000 --- a/scripts/ui/dev_console.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://bp5qxf7p5q3ty diff --git a/scripts/ui/main_menu.gd b/scripts/ui/main_menu.gd deleted file mode 100644 index 7a66ec5..0000000 --- a/scripts/ui/main_menu.gd +++ /dev/null @@ -1,168 +0,0 @@ -extends Control -## Главное меню GWorld. -## -## Визуал собран из трёх частей: анимированный фон (shaders/menu_background.gdshader), -## тема кнопок (themes/main_menu.theme.tres) и этот скрипт — появление, наведение -## и вызов экранов настроек, сохранений и «Об игре». - -## Сцена, в которую уходим по «Новая игра». -@export var game_scene: PackedScene - -## Игрок нажал «Продолжить» — до того, как начнётся загрузка слота. -signal continue_requested -## Игрок нажал «Новая игра». -signal new_game_requested - -const INTRO_TIME := 0.5 -const HOVER_SCALE := 1.035 - -@onready var _saves: SaveManagerService = get_node("/root/SaveManager") -@onready var _header: Control = $Content/Column/Header -@onready var _menu: VBoxContainer = $Content/Column/Menu -@onready var _footer: Control = $Footer -@onready var _continue_button: Button = $Content/Column/Menu/ContinueButton -@onready var _load_button: Button = $Content/Column/Menu/LoadButton -@onready var _settings_screen: Control = $SettingsScreen -@onready var _save_screen: SaveMenuScreen = $SaveScreen -@onready var _about_overlay: Control = $AboutOverlay - - -func _ready() -> void: - # В меню время не идёт: сессия считается только внутри игровой сцены. - _saves.end_session() - - var has_saves := _saves.has_any_save() - _continue_button.visible = has_saves - _load_button.visible = has_saves - - _wire_menu_buttons() - - _settings_screen.closed.connect(_focus_first_button) - _save_screen.closed.connect(_focus_first_button) - var about_back: Button = $AboutOverlay/Center/Card/Body/Actions/AboutBackButton - about_back.pressed.connect(_close_about) - - await _play_intro() - _focus_first_button() - - -func _unhandled_input(event: InputEvent) -> void: - if not _about_overlay.visible or not event.is_action_pressed("ui_cancel"): - return - _close_about() - get_viewport().set_input_as_handled() - - -# --- Меню ------------------------------------------------------------------- - -func _wire_menu_buttons() -> void: - for button: Button in _menu.get_children(): - # Мышь и клавиатура делят одну подсветку: наведение = фокус. - button.mouse_entered.connect(button.grab_focus) - button.focus_entered.connect(_on_button_focus.bind(button, true)) - button.focus_exited.connect(_on_button_focus.bind(button, false)) - button.pressed.connect(_on_menu_pressed.bind(button.name)) - - -func _on_button_focus(button: Button, focused: bool) -> void: - button.pivot_offset = Vector2(0.0, button.size.y * 0.5) - var target := Vector2.ONE * (HOVER_SCALE if focused else 1.0) - var tween := create_tween().set_ease(Tween.EASE_OUT).set_trans(Tween.TRANS_BACK) - tween.tween_property(button, "scale", target, 0.18) - - -func _on_menu_pressed(button_name: StringName) -> void: - match String(button_name): - "ContinueButton": - continue_requested.emit() - _continue_latest() - "NewGameButton": - new_game_requested.emit() - _start_game() - "LoadButton": - _save_screen.open(SaveMenuScreen.Mode.LOAD) - "SettingsButton": - _settings_screen.open() - "AboutButton": - _open_about() - "QuitButton": - _quit() - - -func _focus_first_button() -> void: - for button: Button in _menu.get_children(): - if button.visible: - button.grab_focus() - return - - -func _continue_latest() -> void: - var slot := _saves.latest_slot() - if slot < 0: - return - # Не ждём: смена сцены уничтожит это меню вместе со старым деревом. - _saves.load_slot(slot) - - -func _start_game() -> void: - if game_scene == null: - push_warning("MainMenu: game_scene не назначена — назначьте её в инспекторе.") - return - get_tree().change_scene_to_packed(game_scene) - - -func _quit() -> void: - var tween := create_tween() - tween.tween_property(self, "modulate:a", 0.0, 0.25) - await tween.finished - get_tree().quit() - - -# --- «Об игре» -------------------------------------------------------------- - -func _open_about() -> void: - _about_overlay.modulate.a = 0.0 - _about_overlay.visible = true - # Контейнеры раскладываются только после того, как узел стал видимым. - await get_tree().process_frame - - var card: Control = _about_overlay.get_node("Center/Card") - card.pivot_offset = card.size * 0.5 - card.scale = Vector2(0.96, 0.96) - - var tween := create_tween().set_parallel(true).set_ease(Tween.EASE_OUT).set_trans(Tween.TRANS_CUBIC) - tween.tween_property(_about_overlay, "modulate:a", 1.0, 0.18) - tween.tween_property(card, "scale", Vector2.ONE, 0.22) - - var back_button: Button = card.get_node("Body/Actions").get_child(0) - back_button.grab_focus() - - -func _close_about() -> void: - var tween := create_tween().set_ease(Tween.EASE_IN).set_trans(Tween.TRANS_CUBIC) - tween.tween_property(_about_overlay, "modulate:a", 0.0, 0.15) - await tween.finished - _about_overlay.visible = false - _focus_first_button() - - -# --- Анимация --------------------------------------------------------------- - -func _play_intro() -> void: - var tween := create_tween().set_parallel(true).set_ease(Tween.EASE_OUT).set_trans(Tween.TRANS_CUBIC) - - _header.modulate.a = 0.0 - tween.tween_property(_header, "modulate:a", 1.0, INTRO_TIME) - - _footer.modulate.a = 0.0 - tween.tween_property(_footer, "modulate:a", 1.0, INTRO_TIME).set_delay(0.35) - - var index := 0 - for button: Button in _menu.get_children(): - if not button.visible: - continue - button.modulate.a = 0.0 - tween.tween_property(button, "modulate:a", 1.0, 0.35).set_delay(0.2 + index * 0.07) - index += 1 - - await tween.finished diff --git a/scripts/ui/main_menu.gd.uid b/scripts/ui/main_menu.gd.uid deleted file mode 100644 index 7705cb4..0000000 --- a/scripts/ui/main_menu.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://3plo51qjjlpl diff --git a/scripts/ui/pause_menu.gd b/scripts/ui/pause_menu.gd deleted file mode 100644 index 37193fb..0000000 --- a/scripts/ui/pause_menu.gd +++ /dev/null @@ -1,124 +0,0 @@ -extends CanvasLayer -## Меню паузы. Кладётся внутрь игровой сцены и работает само по себе: -## ловит действие «pause», останавливает дерево и переиспользует те же -## экраны настроек и сохранений, что и главное меню. -## -## Слой обрабатывается всегда (process_mode = ALWAYS), поэтому анимации и -## ввод продолжают работать, пока остальная игра стоит на паузе. - -## Куда уходим по «В главное меню». -@export_file("*.tscn") var main_menu_scene: String = "res://scenes/ui/main_menu.tscn" - -signal opened -signal closed - -@onready var _saves: SaveManagerService = get_node("/root/SaveManager") -@onready var _root: Control = $Root -@onready var _card: Control = $Root/Center/Card -@onready var _menu: VBoxContainer = $Root/Center/Card/Body/Menu -@onready var _settings_screen: Control = $Root/SettingsScreen -@onready var _save_screen: SaveMenuScreen = $Root/SaveScreen - -## Режим курсора до паузы — игра могла держать его захваченным. -var _previous_mouse_mode := Input.MOUSE_MODE_VISIBLE - - -func _ready() -> void: - _root.visible = false - for button: Button in _menu.get_children(): - # Мышь и клавиатура делят одну подсветку: наведение = фокус. - button.mouse_entered.connect(button.grab_focus) - button.pressed.connect(_on_menu_pressed.bind(button.name)) - _settings_screen.closed.connect(_focus_first_button) - _save_screen.closed.connect(_focus_first_button) - - -func _unhandled_input(event: InputEvent) -> void: - # Вложенные экраны сами обрабатывают Esc и гасят событие — сюда оно не - # дойдёт, но проверка оставлена на случай другой раскладки для «pause». - if _settings_screen.visible or _save_screen.visible: - return - if not event.is_action_pressed("pause"): - return - toggle() - get_viewport().set_input_as_handled() - - -func toggle() -> void: - if _root.visible: - close() - else: - open() - - -func open() -> void: - # Миниатюру снимаем до показа меню, иначе в слот попадёт само меню. - _saves.capture_thumbnail() - - get_tree().paused = true - _previous_mouse_mode = Input.mouse_mode - Input.mouse_mode = Input.MOUSE_MODE_VISIBLE - - _root.modulate.a = 0.0 - _root.visible = true - # Контейнеры раскладываются только после того, как узел стал видимым. - await get_tree().process_frame - - _card.pivot_offset = _card.size * 0.5 - _card.scale = Vector2(0.96, 0.96) - - var tween := create_tween().set_parallel(true).set_ease(Tween.EASE_OUT).set_trans(Tween.TRANS_CUBIC) - tween.tween_property(_root, "modulate:a", 1.0, 0.15) - tween.tween_property(_card, "scale", Vector2.ONE, 0.2) - - _focus_first_button() - opened.emit() - - -func close() -> void: - var tween := create_tween().set_ease(Tween.EASE_IN).set_trans(Tween.TRANS_CUBIC) - tween.tween_property(_root, "modulate:a", 0.0, 0.12) - await tween.finished - - _root.visible = false - get_tree().paused = false - Input.mouse_mode = _previous_mouse_mode - closed.emit() - - -func _on_menu_pressed(button_name: StringName) -> void: - match String(button_name): - "ResumeButton": - close() - "SaveButton": - _save_screen.open(SaveMenuScreen.Mode.SAVE) - "LoadButton": - _save_screen.open(SaveMenuScreen.Mode.LOAD) - "SettingsButton": - _settings_screen.open() - "MainMenuButton": - _return_to_main_menu() - "QuitButton": - _quit() - - -func _focus_first_button() -> void: - for button: Button in _menu.get_children(): - if button.visible: - button.grab_focus() - return - - -func _return_to_main_menu() -> void: - get_tree().paused = false - Input.mouse_mode = Input.MOUSE_MODE_VISIBLE - _saves.end_session() - get_tree().change_scene_to_file(main_menu_scene) - - -func _quit() -> void: - var tween := create_tween() - tween.tween_property(_root, "modulate:a", 0.0, 0.2) - await tween.finished - get_tree().paused = false - get_tree().quit() diff --git a/scripts/ui/pause_menu.gd.uid b/scripts/ui/pause_menu.gd.uid deleted file mode 100644 index a532d8d..0000000 --- a/scripts/ui/pause_menu.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://bajc7dq7tn5ik diff --git a/scripts/ui/save_menu.gd b/scripts/ui/save_menu.gd deleted file mode 100644 index 70a5a26..0000000 --- a/scripts/ui/save_menu.gd +++ /dev/null @@ -1,242 +0,0 @@ -class_name SaveMenuScreen -extends Control -## Экран слотов сохранения. Один и тот же и для записи, и для чтения — -## режим задаётся при открытии: open(Mode.SAVE) из паузы, open(Mode.LOAD) -## из главного меню. -## -## Опасные действия (перезапись и удаление) требуют второго нажатия: -## кнопка меняет подпись на «Точно?», строка статуса объясняет, что будет. - -signal closed - -enum Mode { SAVE, LOAD } - -const MUTED := Color("#8fa5ba") -const THUMB_SIZE := Vector2(192, 108) - -@onready var _saves: SaveManagerService = get_node("/root/SaveManager") -@onready var _card: Control = $Center/Card -@onready var _heading: Label = $Center/Card/Body/Heading -@onready var _slots_box: VBoxContainer = $Center/Card/Body/Scroll/Slots -@onready var _status: Label = $Center/Card/Body/Actions/Status -@onready var _back_button: Button = $Center/Card/Body/Actions/BackButton - -var _mode := Mode.LOAD -## {"action": "save" | "delete", "index": int} — ждём подтверждения. -var _pending := {} - - -func _ready() -> void: - _back_button.pressed.connect(close) - _refresh() - - -func _unhandled_input(event: InputEvent) -> void: - if not visible or not event.is_action_pressed("ui_cancel"): - return - close() - get_viewport().set_input_as_handled() - - -# --- Открытие / закрытие ---------------------------------------------------- - -func open(mode: int) -> void: - _mode = mode - _pending = {} - _heading.text = "СОХРАНЕНИЕ" if mode == Mode.SAVE else "ЗАГРУЗКА" - _status.text = "Выберите слот для записи." if mode == Mode.SAVE else "Выберите сохранение." - _refresh() - - modulate.a = 0.0 - visible = true - # Контейнеры раскладываются только после того, как узел стал видимым. - await get_tree().process_frame - - _card.pivot_offset = _card.size * 0.5 - _card.scale = Vector2(0.97, 0.97) - - var tween := create_tween().set_parallel(true).set_ease(Tween.EASE_OUT).set_trans(Tween.TRANS_CUBIC) - tween.tween_property(self, "modulate:a", 1.0, 0.18) - tween.tween_property(_card, "scale", Vector2.ONE, 0.22) - - _focus_first_action() - - -func close() -> void: - var tween := create_tween().set_ease(Tween.EASE_IN).set_trans(Tween.TRANS_CUBIC) - tween.tween_property(self, "modulate:a", 0.0, 0.15) - await tween.finished - visible = false - closed.emit() - - -# --- Список слотов ---------------------------------------------------------- - -## Перестраивает список. focus_row/focus_delete возвращают фокус на ту же -## кнопку, что была нажата, — иначе после перерисовки он теряется. -func _refresh(focus_row: int = -1, focus_delete: bool = false) -> void: - for child in _slots_box.get_children(): - _slots_box.remove_child(child) - child.queue_free() - - var rows: Array[Node] = [] - for info: Dictionary in _saves.list_slots(): - var row := _make_row(info) - _slots_box.add_child(row) - rows.append(row) - - if focus_row >= 0 and focus_row < rows.size(): - _focus_row_button(rows[focus_row], focus_delete) - - -func _focus_row_button(row: Node, delete: bool) -> void: - var buttons: Array[Button] = [] - for child: Node in row.get_child(0).get_children(): - if child is Button: - buttons.append(child as Button) - if buttons.is_empty(): - return - var target := buttons[1] if delete and buttons.size() > 1 else buttons[0] - if not target.disabled: - target.grab_focus() - - -func _make_row(info: Dictionary) -> PanelContainer: - var index: int = info["index"] - var exists: bool = info["exists"] - - var panel := PanelContainer.new() - panel.add_theme_stylebox_override("panel", _row_style(exists)) - - var row := HBoxContainer.new() - row.add_theme_constant_override("separation", 18) - panel.add_child(row) - - var thumb := TextureRect.new() - thumb.custom_minimum_size = THUMB_SIZE - thumb.expand_mode = TextureRect.EXPAND_IGNORE_SIZE - thumb.stretch_mode = TextureRect.STRETCH_KEEP_ASPECT_COVERED - thumb.clip_contents = true - thumb.texture = info["thumbnail"] - row.add_child(thumb) - - var info_box := VBoxContainer.new() - info_box.size_flags_horizontal = Control.SIZE_EXPAND_FILL - info_box.size_flags_vertical = Control.SIZE_SHRINK_CENTER - info_box.add_theme_constant_override("separation", 4) - row.add_child(info_box) - - var title := Label.new() - title.text = "Слот %d" % (index + 1) - title.add_theme_font_size_override("font_size", 22) - info_box.add_child(title) - - var meta := Label.new() - meta.add_theme_font_size_override("font_size", 16) - meta.add_theme_color_override("font_color", MUTED) - if exists: - meta.text = "%s · %s" % [ - SaveManagerService.format_timestamp(info["saved_at"]), - SaveManagerService.format_playtime(info["playtime"]), - ] - else: - meta.text = "пусто" - info_box.add_child(meta) - - row.add_child(_make_action_button(index, exists)) - row.add_child(_make_delete_button(index, exists)) - return panel - - -func _make_action_button(index: int, exists: bool) -> Button: - var button := Button.new() - button.custom_minimum_size.x = 230 - button.size_flags_vertical = Control.SIZE_SHRINK_CENTER - button.add_theme_font_size_override("font_size", 20) - - if _is_pending("save", index): - button.text = "Точно?" - elif _mode == Mode.SAVE: - button.text = "Перезаписать" if exists else "Сохранить" - else: - button.text = "Загрузить" - button.disabled = not exists - - button.pressed.connect(_on_action_pressed.bind(index)) - return button - - -func _make_delete_button(index: int, exists: bool) -> Button: - var button := Button.new() - button.custom_minimum_size.x = 170 - button.size_flags_vertical = Control.SIZE_SHRINK_CENTER - button.add_theme_font_size_override("font_size", 20) - button.text = "Точно?" if _is_pending("delete", index) else "Удалить" - button.disabled = not exists - button.pressed.connect(_on_delete_pressed.bind(index)) - return button - - -func _row_style(filled: bool) -> StyleBoxFlat: - var style := StyleBoxFlat.new() - style.bg_color = Color("#ffffff0f") if filled else Color("#ffffff05") - style.border_color = Color("#ffffff1a") - style.set_border_width_all(1) - style.set_corner_radius_all(10) - style.content_margin_left = 14 - style.content_margin_right = 14 - style.content_margin_top = 12 - style.content_margin_bottom = 12 - return style - - -func _focus_first_action() -> void: - for row: Node in _slots_box.get_children(): - for control: Node in row.get_child(0).get_children(): - if control is Button and not (control as Button).disabled: - (control as Button).grab_focus() - return - _back_button.grab_focus() - - -# --- Действия --------------------------------------------------------------- - -func _on_action_pressed(index: int) -> void: - if _mode == Mode.LOAD: - _status.text = "Загрузка слота %d…" % (index + 1) - # Не ждём: смена сцены уничтожит этот экран вместе со старым деревом. - _saves.load_slot(index) - return - - var info := _saves.slot_info(index) - if info["exists"] and not _is_pending("save", index): - _set_pending("save", index, "Слот %d будет перезаписан — нажмите ещё раз." % (index + 1)) - return - - _pending = {} - if _saves.save_to_slot(index): - _status.text = "Сохранено в слот %d." % (index + 1) - else: - _status.text = "Не удалось сохранить в слот %d." % (index + 1) - _refresh(index) - - -func _on_delete_pressed(index: int) -> void: - if not _is_pending("delete", index): - _set_pending("delete", index, "Слот %d будет удалён — нажмите ещё раз." % (index + 1)) - return - - _pending = {} - _saves.delete_slot(index) - _status.text = "Слот %d удалён." % (index + 1) - _refresh(index) - - -func _set_pending(action: String, index: int, message: String) -> void: - _pending = {"action": action, "index": index} - _status.text = message - _refresh(index, action == "delete") - - -func _is_pending(action: String, index: int) -> bool: - return _pending.get("action", "") == action and _pending.get("index", -1) == index diff --git a/scripts/ui/save_menu.gd.uid b/scripts/ui/save_menu.gd.uid deleted file mode 100644 index 1e1ff05..0000000 --- a/scripts/ui/save_menu.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://dtjbpbm5rqb72 diff --git a/scripts/ui/settings_menu.gd b/scripts/ui/settings_menu.gd deleted file mode 100644 index 3dec8d4..0000000 --- a/scripts/ui/settings_menu.gd +++ /dev/null @@ -1,258 +0,0 @@ -extends Control -## Экран настроек: видео, звук, управление. -## -## Сам ничего не хранит и не применяет — только показывает состояние -## автозагрузки GameSettings и дёргает её сеттеры. Открывается через open(), -## закрывается кнопкой «Готово» или Esc и сообщает об этом сигналом closed. - -signal closed - -const ACCENT := Color("#2ee6c5") - -@onready var _settings: GameSettingsService = get_node("/root/GameSettings") - -@onready var _card: Control = $Center/Card -@onready var _tabs: TabContainer = $Center/Card/Body/Tabs -@onready var _window_mode_option: OptionButton = $Center/Card/Body/Tabs/VideoTab/Rows/WindowModeRow/WindowModeOption -@onready var _resolution_option: OptionButton = $Center/Card/Body/Tabs/VideoTab/Rows/ResolutionRow/ResolutionOption -@onready var _vsync_toggle: Button = $Center/Card/Body/Tabs/VideoTab/Rows/VsyncRow/VsyncToggle -@onready var _fps_option: OptionButton = $Center/Card/Body/Tabs/VideoTab/Rows/FpsRow/FpsOption -@onready var _audio_rows: VBoxContainer = $Center/Card/Body/Tabs/AudioTab/Rows -@onready var _bindings_box: VBoxContainer = $Center/Card/Body/Tabs/ControlsTab/Wrap/Scroll/Bindings -@onready var _bindings_hint: Label = $Center/Card/Body/Tabs/ControlsTab/Wrap/Hint -@onready var _reset_button: Button = $Center/Card/Body/Actions/ResetButton -@onready var _done_button: Button = $Center/Card/Body/Actions/DoneButton - -## Пока не пусто — ждём клавишу для этого действия. -var _capturing_action := "" -## Защита от реакции на сигналы во время программного обновления контролов. -var _syncing := false -var _hint_default := "" -var _volume_rows := {} -var _binding_buttons := {} - - -func _ready() -> void: - _hint_default = _bindings_hint.text - _name_tabs() - _fill_options() - _build_audio_rows() - _build_binding_rows() - - _window_mode_option.item_selected.connect(_on_window_mode_selected) - _resolution_option.item_selected.connect(_on_resolution_selected) - _fps_option.item_selected.connect(_on_fps_selected) - _vsync_toggle.toggled.connect(_on_vsync_toggled) - _reset_button.pressed.connect(_on_reset_pressed) - _done_button.pressed.connect(close) - - _sync_from_settings() - - -func _input(event: InputEvent) -> void: - if _capturing_action == "": - return - if not (event is InputEventKey and event.is_pressed() and not event.is_echo()): - return - - var key_event := event as InputEventKey - var action := _capturing_action - _capturing_action = "" - - if key_event.keycode != KEY_ESCAPE: - var conflict := _settings.set_binding(action, key_event.keycode) - if conflict != "": - var label: String = GameSettingsService.ACTION_LABELS[conflict] - _bindings_hint.text = "%s: клавиша освобождена, назначьте новую." % label - else: - _bindings_hint.text = _hint_default - - _refresh_bindings() - get_viewport().set_input_as_handled() - - -func _unhandled_input(event: InputEvent) -> void: - if not visible or not event.is_action_pressed("ui_cancel"): - return - close() - get_viewport().set_input_as_handled() - - -# --- Открытие / закрытие ---------------------------------------------------- - -func open() -> void: - visible = true - _sync_from_settings() - modulate.a = 0.0 - # Контейнеры раскладываются только после того, как узел стал видимым. - await get_tree().process_frame - - _card.pivot_offset = _card.size * 0.5 - _card.scale = Vector2(0.97, 0.97) - - var tween := create_tween().set_parallel(true).set_ease(Tween.EASE_OUT).set_trans(Tween.TRANS_CUBIC) - tween.tween_property(self, "modulate:a", 1.0, 0.18) - tween.tween_property(_card, "scale", Vector2.ONE, 0.22) - - _tabs.get_tab_bar().grab_focus() - - -func close() -> void: - # Esc во время ожидания клавиши сначала отменяет назначение. - if _capturing_action != "": - _capturing_action = "" - _bindings_hint.text = _hint_default - _refresh_bindings() - return - - var tween := create_tween().set_ease(Tween.EASE_IN).set_trans(Tween.TRANS_CUBIC) - tween.tween_property(self, "modulate:a", 0.0, 0.15) - await tween.finished - visible = false - closed.emit() - - -# --- Построение вкладок ----------------------------------------------------- - -func _name_tabs() -> void: - _tabs.set_tab_title(0, "Видео") - _tabs.set_tab_title(1, "Звук") - _tabs.set_tab_title(2, "Управление") - - -func _fill_options() -> void: - for label: String in GameSettingsService.WINDOW_MODE_LABELS: - _window_mode_option.add_item(label) - - for resolution: Vector2i in GameSettingsService.RESOLUTIONS: - _resolution_option.add_item("%d × %d" % [resolution.x, resolution.y]) - - for limit: int in GameSettingsService.FPS_LIMITS: - _fps_option.add_item("Без ограничения" if limit == 0 else str(limit)) - - -func _build_audio_rows() -> void: - for bus_name: String in GameSettingsService.AUDIO_BUSES: - var row := HBoxContainer.new() - row.add_theme_constant_override("separation", 20) - - var caption := Label.new() - caption.text = GameSettingsService.AUDIO_BUSES[bus_name] - caption.custom_minimum_size.x = 300 - row.add_child(caption) - - var slider := HSlider.new() - slider.min_value = 0.0 - slider.max_value = 1.0 - slider.step = 0.01 - slider.size_flags_horizontal = Control.SIZE_EXPAND_FILL - slider.size_flags_vertical = Control.SIZE_SHRINK_CENTER - row.add_child(slider) - - var value_label := Label.new() - value_label.custom_minimum_size.x = 90 - value_label.horizontal_alignment = HORIZONTAL_ALIGNMENT_RIGHT - value_label.add_theme_color_override("font_color", ACCENT) - row.add_child(value_label) - - slider.value_changed.connect(_on_volume_changed.bind(bus_name)) - _volume_rows[bus_name] = {"slider": slider, "label": value_label} - _audio_rows.add_child(row) - - -func _build_binding_rows() -> void: - for action: String in GameSettingsService.ACTION_LABELS: - var row := HBoxContainer.new() - - var caption := Label.new() - caption.text = GameSettingsService.ACTION_LABELS[action] - caption.size_flags_horizontal = Control.SIZE_EXPAND_FILL - row.add_child(caption) - - var button := Button.new() - button.custom_minimum_size.x = 260 - button.add_theme_font_size_override("font_size", 20) - button.pressed.connect(_start_capture.bind(action)) - row.add_child(button) - - _binding_buttons[action] = button - _bindings_box.add_child(row) - - -# --- Синхронизация UI ------------------------------------------------------- - -func _sync_from_settings() -> void: - _syncing = true - - _window_mode_option.selected = _settings.window_mode - _resolution_option.selected = GameSettingsService.RESOLUTIONS.find(_settings.resolution) - _resolution_option.disabled = _settings.window_mode != GameSettingsService.WindowMode.WINDOWED - _fps_option.selected = GameSettingsService.FPS_LIMITS.find(_settings.fps_limit) - _vsync_toggle.button_pressed = _settings.vsync - _vsync_toggle.text = "Вкл" if _settings.vsync else "Выкл" - - for bus_name: String in _volume_rows: - var value: float = _settings.volumes[bus_name] - _volume_rows[bus_name]["slider"].value = value - _volume_rows[bus_name]["label"].text = "%d%%" % roundi(value * 100.0) - - _refresh_bindings() - _syncing = false - - -func _refresh_bindings() -> void: - for action: String in _binding_buttons: - var button: Button = _binding_buttons[action] - if action == _capturing_action: - button.text = "Нажмите клавишу…" - else: - button.text = GameSettingsService.key_name(int(_settings.bindings.get(action, KEY_NONE))) - - -# --- Обработчики ------------------------------------------------------------ - -func _on_window_mode_selected(index: int) -> void: - if _syncing: - return - _settings.set_window_mode(index) - _resolution_option.disabled = index != GameSettingsService.WindowMode.WINDOWED - - -func _on_resolution_selected(index: int) -> void: - if _syncing: - return - _settings.set_resolution(GameSettingsService.RESOLUTIONS[index]) - - -func _on_fps_selected(index: int) -> void: - if _syncing: - return - _settings.set_fps_limit(GameSettingsService.FPS_LIMITS[index]) - - -func _on_vsync_toggled(enabled: bool) -> void: - _vsync_toggle.text = "Вкл" if enabled else "Выкл" - if _syncing: - return - _settings.set_vsync(enabled) - - -func _on_volume_changed(value: float, bus_name: String) -> void: - _volume_rows[bus_name]["label"].text = "%d%%" % roundi(value * 100.0) - if _syncing: - return - _settings.set_volume(bus_name, value) - - -func _on_reset_pressed() -> void: - _settings.reset_to_defaults() - _bindings_hint.text = _hint_default - _sync_from_settings() - - -func _start_capture(action: String) -> void: - if _capturing_action != "": - return - _capturing_action = action - _bindings_hint.text = _hint_default - _refresh_bindings() diff --git a/scripts/ui/settings_menu.gd.uid b/scripts/ui/settings_menu.gd.uid deleted file mode 100644 index c905172..0000000 --- a/scripts/ui/settings_menu.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://jkhpwi3ngait diff --git a/scripts/ui/weather_icon.gd b/scripts/ui/weather_icon.gd deleted file mode 100644 index 55ed273..0000000 --- a/scripts/ui/weather_icon.gd +++ /dev/null @@ -1,120 +0,0 @@ -class_name WeatherIcon -extends Control -## Значок погоды для HUD. -## -## Рисуется процедурно: иконок в наборе фона нет, а тащить шрифт с символами -## ради семи состояний неоправданно. Заодно значок красится темой, а не -## растром, и одинаково чёткий на любом масштабе. - -const SUN := Color("#f2b134") -const MOON := Color("#cfd8e6") -const CLOUD := Color("#c6d4e0") -const CLOUD_DARK := Color("#8fa5ba") -const RAIN := Color("#4aa8f2") -const SNOW := Color("#e6f1f7") -const BOLT := Color("#f2b134") - -## Тип погоды из WeatherSystem.Kind. -var kind := 0 -## Ночью в ясную погоду вместо солнца показываем луну. -var night := false - - -func _ready() -> void: - custom_minimum_size = Vector2(24.0, 24.0) - - -func set_state(weather_kind: int, is_night: bool) -> void: - if weather_kind == kind and is_night == night: - return - kind = weather_kind - night = is_night - queue_redraw() - - -func _draw() -> void: - var box := Rect2(Vector2.ZERO, size) - var center := box.get_center() - - match kind: - WeatherSystem.Kind.CLEAR: - _draw_body(center, size.x * 0.30) - WeatherSystem.Kind.CLOUDY: - _draw_body(center - Vector2(size.x * 0.14, size.y * 0.14), size.x * 0.22) - _draw_cloud(center + Vector2(size.x * 0.06, size.y * 0.10), CLOUD) - WeatherSystem.Kind.OVERCAST: - _draw_cloud(center - Vector2(size.x * 0.10, size.y * 0.06), CLOUD_DARK) - _draw_cloud(center + Vector2(size.x * 0.08, size.y * 0.08), CLOUD) - WeatherSystem.Kind.RAIN: - _draw_cloud(center - Vector2(0.0, size.y * 0.14), CLOUD) - _draw_streaks(center, RAIN) - WeatherSystem.Kind.STORM: - _draw_cloud(center - Vector2(0.0, size.y * 0.14), CLOUD_DARK) - _draw_streaks(center, RAIN) - _draw_bolt(center) - WeatherSystem.Kind.FOG: - _draw_fog(box) - WeatherSystem.Kind.SNOW: - _draw_cloud(center - Vector2(0.0, size.y * 0.14), CLOUD) - _draw_flakes(center) - - -## Солнце или луна — смотря какое время суток. -func _draw_body(center: Vector2, radius: float) -> void: - if night: - # Полумесяц: круг с вырезом, вырез закрашен фоном значка. - draw_circle(center, radius, MOON) - draw_circle(center + Vector2(radius * 0.55, -radius * 0.30), radius * 0.92, Color(0, 0, 0, 0)) - draw_arc(center, radius, PI * 0.35, PI * 1.65, 20, MOON, 2.0) - return - - draw_circle(center, radius, SUN) - for index in 8: - var angle := TAU * float(index) / 8.0 - var direction := Vector2(cos(angle), sin(angle)) - draw_line(center + direction * (radius * 1.35), center + direction * (radius * 1.85), SUN, 1.6) - - -func _draw_cloud(center: Vector2, tint: Color) -> void: - var unit := size.x * 0.12 - draw_circle(center + Vector2(-unit * 1.1, 0.0), unit * 1.05, tint) - draw_circle(center + Vector2(unit * 1.1, unit * 0.15), unit * 0.9, tint) - draw_circle(center + Vector2(0.0, -unit * 0.55), unit * 1.25, tint) - draw_rect(Rect2(center + Vector2(-unit * 1.9, -unit * 0.1), Vector2(unit * 3.8, unit * 1.1)), tint) - - -func _draw_streaks(center: Vector2, tint: Color) -> void: - var unit := size.x * 0.12 - for index in 3: - var start := center + Vector2((float(index) - 1.0) * unit * 1.4, unit * 1.3) - draw_line(start, start + Vector2(-unit * 0.35, unit * 1.3), tint, 1.8) - - -func _draw_flakes(center: Vector2) -> void: - var unit := size.x * 0.12 - for index in 3: - draw_circle(center + Vector2((float(index) - 1.0) * unit * 1.4, unit * 1.9), unit * 0.32, SNOW) - - -func _draw_bolt(center: Vector2) -> void: - var unit := size.x * 0.12 - draw_polygon( - PackedVector2Array([ - center + Vector2(unit * 0.2, unit * 1.1), - center + Vector2(unit * 1.2, unit * 1.1), - center + Vector2(unit * 0.4, unit * 2.6), - center + Vector2(unit * 0.7, unit * 1.7), - center + Vector2(-unit * 0.2, unit * 1.7), - ]), - PackedColorArray([BOLT, BOLT, BOLT, BOLT, BOLT]) - ) - - -func _draw_fog(box: Rect2) -> void: - for index in 3: - var y := box.position.y + box.size.y * (0.32 + float(index) * 0.18) - var inset := box.size.x * (0.08 + float(index % 2) * 0.12) - draw_line( - Vector2(box.position.x + inset, y), Vector2(box.end.x - inset, y), - CLOUD_DARK, 2.0 - ) diff --git a/scripts/ui/weather_icon.gd.uid b/scripts/ui/weather_icon.gd.uid deleted file mode 100644 index 4e1bf17..0000000 --- a/scripts/ui/weather_icon.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://dpifh4u0gmgxw diff --git a/shaders/menu_background.gdshader b/shaders/menu_background.gdshader deleted file mode 100644 index 1c1e2ea..0000000 --- a/shaders/menu_background.gdshader +++ /dev/null @@ -1,84 +0,0 @@ -shader_type canvas_item; - -// Анимированный фон главного меню: градиент + полярное сияние + звёзды + виньетка. - -uniform vec4 color_top : source_color = vec4(0.035, 0.043, 0.098, 1.0); -uniform vec4 color_bottom : source_color = vec4(0.020, 0.106, 0.133, 1.0); -uniform vec4 aurora_a : source_color = vec4(0.180, 0.850, 0.760, 1.0); -uniform vec4 aurora_b : source_color = vec4(0.470, 0.360, 0.960, 1.0); -uniform float speed : hint_range(0.0, 0.3) = 0.035; -uniform float aurora_strength : hint_range(0.0, 2.0) = 0.55; -uniform float star_amount : hint_range(0.0, 1.0) = 0.45; -uniform float vignette_strength : hint_range(0.0, 1.0) = 0.65; - -float hash21(vec2 p) { - p = fract(p * vec2(123.34, 456.21)); - p += dot(p, p + 45.32); - return fract(p.x * p.y); -} - -// Мягкая волнистая полоса «сияния» на высоте center. -float aurora_band(vec2 uv, float t, float center, float freq, float thickness) { - float y = center - + 0.090 * sin(uv.x * freq + t) - + 0.050 * sin(uv.x * freq * 1.6 - t * 0.8) - + 0.018 * sin(uv.x * freq * 2.7 + t * 0.5); - float d = abs(uv.y - y); - float band = smoothstep(thickness, 0.0, d); - return band * band; -} - -// Звёздное поле. Три независимых хеша на ячейку: положение внутри ячейки, -// базовая яркость и характер мерцания. Без этого звёзды садятся на решётку -// и подмигивают синхронно, волной. -vec3 starfield(vec2 uv) { - vec2 grid = uv * vec2(190.0, 107.0); - vec2 cell = floor(grid); - vec2 local = fract(grid); - - float h1 = hash21(cell); - float h2 = hash21(cell + 17.31); - float h3 = hash21(cell + 41.77); - - float present = step(1.0 - star_amount * 0.045, h1); - - // Смещение внутри ячейки убирает регулярность решётки. - vec2 offset = vec2(h2, h3) * 0.66 + 0.17; - float d = length(local - offset); - - // Ядро плюс мягкий ореол — так звезда читается, не превращаясь в точку. - float radius = mix(0.13, 0.32, h3); - float shape = smoothstep(radius, 0.0, d) + 0.22 * smoothstep(radius * 3.0, 0.0, d); - - // Две несоизмеримые частоты — рисунок мерцания не повторяется на глаз. - float phase = h1 * 62.83; - float flicker = 0.5 + 0.5 * ( - 0.62 * sin(TIME * (0.5 + h3 * 1.8) + phase) - + 0.38 * sin(TIME * (0.31 + h2 * 1.1) * 1.618 + phase * 1.7) - ); - - // У части звёзд мерцание почти незаметно, у части — заметное. - float amplitude = 0.12 + 0.5 * h3; - float brightness = (0.30 + 0.70 * h2) * (1.0 - amplitude + amplitude * flicker); - - vec3 tint = mix(vec3(0.74, 0.84, 1.0), vec3(1.0, 0.93, 0.80), h2); - return tint * present * shape * brightness; -} - -void fragment() { - vec2 uv = UV; - float t = TIME * speed * 6.28318; - - vec3 col = mix(color_top.rgb, color_bottom.rgb, smoothstep(0.0, 1.0, uv.y)); - - col += aurora_a.rgb * aurora_band(uv, t, 0.34, 4.0, 0.22) * aurora_strength; - col += aurora_b.rgb * aurora_band(uv, t * 0.75 + 2.0, 0.62, 3.0, 0.28) * aurora_strength * 0.75; - - col += starfield(uv); - - // Виньетка по краям кадра. - float v = distance(uv, vec2(0.5, 0.5)); - col *= 1.0 - smoothstep(0.32, 0.95, v) * vignette_strength; - - COLOR = vec4(col, 1.0); -} diff --git a/shaders/menu_background.gdshader.uid b/shaders/menu_background.gdshader.uid deleted file mode 100644 index b8d9024..0000000 --- a/shaders/menu_background.gdshader.uid +++ /dev/null @@ -1 +0,0 @@ -uid://om0dt8so0gns diff --git a/shaders/menu_background_material.tres b/shaders/menu_background_material.tres deleted file mode 100644 index b82c7f7..0000000 --- a/shaders/menu_background_material.tres +++ /dev/null @@ -1,14 +0,0 @@ -[gd_resource type="ShaderMaterial" format=3 uid="uid://6nshffib001t"] - -[ext_resource type="Shader" path="res://shaders/menu_background.gdshader" id="1_ctg3t"] - -[resource] -shader = ExtResource("1_ctg3t") -shader_parameter/color_top = Color(0.035, 0.043, 0.098, 1) -shader_parameter/color_bottom = Color(0.02, 0.106, 0.133, 1) -shader_parameter/aurora_a = Color(0.18, 0.85, 0.76, 1) -shader_parameter/aurora_b = Color(0.47, 0.36, 0.96, 1) -shader_parameter/speed = 0.12 -shader_parameter/aurora_strength = 0.55 -shader_parameter/star_amount = 0.45 -shader_parameter/vignette_strength = 0.65 diff --git a/themes/main_menu.theme.tres b/themes/main_menu.theme.tres deleted file mode 100644 index 6328938..0000000 --- a/themes/main_menu.theme.tres +++ /dev/null @@ -1,352 +0,0 @@ -[gd_resource type="Theme" format=3 uid="uid://c6kkopjj3snag"] - -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_ounka"] -content_margin_left = 26.0 -content_margin_top = 16.0 -content_margin_right = 26.0 -content_margin_bottom = 16.0 -bg_color = Color(0.18039216, 0.9019608, 0.77254903, 0.078431375) -border_width_left = 3 -border_color = Color(0.18039216, 0.9019608, 0.77254903, 0.6) -corner_radius_top_left = 6 -corner_radius_top_right = 6 -corner_radius_bottom_right = 6 -corner_radius_bottom_left = 6 - -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_3q0ab"] -content_margin_left = 26.0 -content_margin_top = 16.0 -content_margin_right = 26.0 -content_margin_bottom = 16.0 -bg_color = Color(0.18039216, 0.9019608, 0.77254903, 0.13333334) -border_width_left = 3 -border_color = Color(0.18039216, 0.9019608, 0.77254903, 1) -corner_radius_top_left = 6 -corner_radius_top_right = 6 -corner_radius_bottom_right = 6 -corner_radius_bottom_left = 6 - -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_wtscx"] -content_margin_left = 26.0 -content_margin_top = 16.0 -content_margin_right = 26.0 -content_margin_bottom = 16.0 -bg_color = Color(0.05490196, 0.08235294, 0.14901961, 0) -border_width_left = 3 -border_color = Color(0.18039216, 0.9019608, 0.77254903, 0) -corner_radius_top_left = 6 -corner_radius_top_right = 6 -corner_radius_bottom_right = 6 -corner_radius_bottom_left = 6 - -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_wpfjp"] -content_margin_left = 26.0 -content_margin_top = 16.0 -content_margin_right = 26.0 -content_margin_bottom = 16.0 -bg_color = Color(0.18039216, 0.9019608, 0.77254903, 0.22745098) -border_width_left = 3 -border_color = Color(0.48235294, 0.41960785, 0.9607843, 1) -corner_radius_top_left = 6 -corner_radius_top_right = 6 -corner_radius_bottom_right = 6 -corner_radius_bottom_left = 6 - -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_peg0r"] -content_margin_left = 6.0 -content_margin_top = 4.0 -content_margin_right = 6.0 -content_margin_bottom = 4.0 -bg_color = Color(0.18039216, 0.9019608, 0.77254903, 0.078431375) -border_width_left = 1 -border_width_top = 1 -border_width_right = 1 -border_width_bottom = 1 -border_color = Color(0.18039216, 0.9019608, 0.77254903, 0.4) -corner_radius_top_left = 6 -corner_radius_top_right = 6 -corner_radius_bottom_right = 6 -corner_radius_bottom_left = 6 - -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_lga6n"] -content_margin_left = 6.0 -content_margin_top = 4.0 -content_margin_right = 6.0 -content_margin_bottom = 4.0 -bg_color = Color(1, 1, 1, 0.05882353) -corner_radius_top_left = 6 -corner_radius_top_right = 6 -corner_radius_bottom_right = 6 -corner_radius_bottom_left = 6 - -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_pv110"] -content_margin_left = 6.0 -content_margin_top = 4.0 -content_margin_right = 6.0 -content_margin_bottom = 4.0 -bg_color = Color(0, 0, 0, 0) - -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_1d5i7"] -content_margin_left = 6.0 -content_margin_top = 4.0 -content_margin_right = 6.0 -content_margin_bottom = 4.0 -bg_color = Color(0, 0, 0, 0) - -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_x7x8h"] -content_margin_top = 4.0 -content_margin_bottom = 4.0 -bg_color = Color(0.18039216, 0.9019608, 0.77254903, 1) -corner_radius_top_left = 4 -corner_radius_top_right = 4 -corner_radius_bottom_right = 4 -corner_radius_bottom_left = 4 - -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_ugjg2"] -content_margin_top = 4.0 -content_margin_bottom = 4.0 -bg_color = Color(0.3882353, 0.9490196, 0.85490197, 1) -corner_radius_top_left = 4 -corner_radius_top_right = 4 -corner_radius_bottom_right = 4 -corner_radius_bottom_left = 4 - -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_a27gw"] -content_margin_top = 4.0 -content_margin_bottom = 4.0 -bg_color = Color(1, 1, 1, 0.12156863) -corner_radius_top_left = 4 -corner_radius_top_right = 4 -corner_radius_bottom_right = 4 -corner_radius_bottom_left = 4 - -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_2lqsq"] -content_margin_left = 16.0 -content_margin_top = 10.0 -content_margin_right = 16.0 -content_margin_bottom = 10.0 -bg_color = Color(1, 1, 1, 0.03137255) -border_width_left = 1 -border_width_top = 1 -border_width_right = 1 -border_width_bottom = 1 -border_color = Color(1, 1, 1, 0.078431375) -corner_radius_top_left = 6 -corner_radius_top_right = 6 -corner_radius_bottom_right = 6 -corner_radius_bottom_left = 6 - -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_lnpk0"] -content_margin_left = 16.0 -content_margin_top = 10.0 -content_margin_right = 16.0 -content_margin_bottom = 10.0 -bg_color = Color(0.18039216, 0.9019608, 0.77254903, 0.101960786) -border_width_left = 1 -border_width_top = 1 -border_width_right = 1 -border_width_bottom = 1 -border_color = Color(0.18039216, 0.9019608, 0.77254903, 0.8) -corner_radius_top_left = 6 -corner_radius_top_right = 6 -corner_radius_bottom_right = 6 -corner_radius_bottom_left = 6 - -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_ks2w3"] -content_margin_left = 16.0 -content_margin_top = 10.0 -content_margin_right = 16.0 -content_margin_bottom = 10.0 -bg_color = Color(0.18039216, 0.9019608, 0.77254903, 0.13333334) -border_width_left = 1 -border_width_top = 1 -border_width_right = 1 -border_width_bottom = 1 -border_color = Color(0.18039216, 0.9019608, 0.77254903, 0.6) -corner_radius_top_left = 6 -corner_radius_top_right = 6 -corner_radius_bottom_right = 6 -corner_radius_bottom_left = 6 - -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_qfgvf"] -content_margin_left = 16.0 -content_margin_top = 10.0 -content_margin_right = 16.0 -content_margin_bottom = 10.0 -bg_color = Color(1, 1, 1, 0.05882353) -border_width_left = 1 -border_width_top = 1 -border_width_right = 1 -border_width_bottom = 1 -border_color = Color(1, 1, 1, 0.12156863) -corner_radius_top_left = 6 -corner_radius_top_right = 6 -corner_radius_bottom_right = 6 -corner_radius_bottom_left = 6 - -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_iyqh1"] -content_margin_left = 16.0 -content_margin_top = 10.0 -content_margin_right = 16.0 -content_margin_bottom = 10.0 -bg_color = Color(0.18039216, 0.9019608, 0.77254903, 0.2) -border_width_left = 1 -border_width_top = 1 -border_width_right = 1 -border_width_bottom = 1 -border_color = Color(0.18039216, 0.9019608, 0.77254903, 1) -corner_radius_top_left = 6 -corner_radius_top_right = 6 -corner_radius_bottom_right = 6 -corner_radius_bottom_left = 6 - -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_vmmn3"] -content_margin_left = 36.0 -content_margin_top = 30.0 -content_margin_right = 36.0 -content_margin_bottom = 30.0 -bg_color = Color(0.043137256, 0.07450981, 0.13333334, 0.9098039) -border_width_left = 1 -border_width_top = 1 -border_width_right = 1 -border_width_bottom = 1 -border_color = Color(0.18039216, 0.9019608, 0.77254903, 0.2509804) -corner_radius_top_left = 16 -corner_radius_top_right = 16 -corner_radius_bottom_right = 16 -corner_radius_bottom_left = 16 -shadow_size = 28 -shadow_offset = Vector2(0, 10) - -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_fitbe"] -bg_color = Color(0.18039216, 0.9019608, 0.77254903, 0.18039216) -corner_radius_top_left = 6 -corner_radius_top_right = 6 -corner_radius_bottom_right = 6 -corner_radius_bottom_left = 6 - -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_drplo"] -content_margin_left = 6.0 -content_margin_top = 8.0 -content_margin_right = 6.0 -content_margin_bottom = 8.0 -bg_color = Color(0.043137256, 0.07450981, 0.13333334, 0.98039216) -border_width_left = 1 -border_width_top = 1 -border_width_right = 1 -border_width_bottom = 1 -border_color = Color(0.18039216, 0.9019608, 0.77254903, 0.3019608) -corner_radius_top_left = 10 -corner_radius_top_right = 10 -corner_radius_bottom_right = 10 -corner_radius_bottom_left = 10 -shadow_color = Color(0, 0, 0, 0.6666667) -shadow_size = 22 -shadow_offset = Vector2(0, 8) - -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_yvkpt"] -content_margin_left = 0.0 -content_margin_top = 18.0 -content_margin_right = 0.0 -content_margin_bottom = 0.0 -bg_color = Color(0, 0, 0, 0) - -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_7o3oc"] -content_margin_left = 22.0 -content_margin_top = 10.0 -content_margin_right = 22.0 -content_margin_bottom = 10.0 -bg_color = Color(1, 1, 1, 0.07058824) -border_width_bottom = 2 -border_color = Color(1, 1, 1, 0.2) -corner_radius_top_left = 6 -corner_radius_top_right = 6 - -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_08mny"] -content_margin_left = 22.0 -content_margin_top = 10.0 -content_margin_right = 22.0 -content_margin_bottom = 10.0 -bg_color = Color(0.18039216, 0.9019608, 0.77254903, 0.12156863) -border_width_bottom = 2 -border_color = Color(0.18039216, 0.9019608, 0.77254903, 1) -corner_radius_top_left = 6 -corner_radius_top_right = 6 - -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_54y8e"] -content_margin_left = 22.0 -content_margin_top = 10.0 -content_margin_right = 22.0 -content_margin_bottom = 10.0 -bg_color = Color(0, 0, 0, 0) -border_width_bottom = 2 -border_color = Color(1, 1, 1, 0.078431375) -corner_radius_top_left = 6 -corner_radius_top_right = 6 - -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_7xjts"] -content_margin_left = 4.0 -content_margin_right = 4.0 -bg_color = Color(0.18039216, 0.9019608, 0.77254903, 0.5019608) -corner_radius_top_left = 4 -corner_radius_top_right = 4 -corner_radius_bottom_right = 4 -corner_radius_bottom_left = 4 - -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_hwl52"] -content_margin_left = 5.0 -content_margin_right = 5.0 -bg_color = Color(1, 1, 1, 0.0627451) -corner_radius_top_left = 4 -corner_radius_top_right = 4 -corner_radius_bottom_right = 4 -corner_radius_bottom_left = 4 - -[resource] -Button/colors/font_color = Color(0.7254902, 0.7882353, 0.84705883, 1) -Button/colors/font_disabled_color = Color(0.32941177, 0.40392157, 0.47843137, 1) -Button/colors/font_focus_color = Color(1, 1, 1, 1) -Button/colors/font_hover_color = Color(1, 1, 1, 1) -Button/colors/font_pressed_color = Color(0.18039216, 0.9019608, 0.77254903, 1) -Button/font_sizes/font_size = 26 -Button/styles/focus = SubResource("StyleBoxFlat_ounka") -Button/styles/hover = SubResource("StyleBoxFlat_3q0ab") -Button/styles/normal = SubResource("StyleBoxFlat_wtscx") -Button/styles/pressed = SubResource("StyleBoxFlat_wpfjp") -CheckButton/colors/font_color = Color(0.85882354, 0.90588236, 0.9411765, 1) -CheckButton/colors/icon_hover_color = Color(1, 1, 1, 1) -CheckButton/colors/icon_normal_color = Color(0.5764706, 0.654902, 0.73333335, 1) -CheckButton/colors/icon_pressed_color = Color(0.18039216, 0.9019608, 0.77254903, 1) -CheckButton/font_sizes/font_size = 20 -CheckButton/styles/focus = SubResource("StyleBoxFlat_peg0r") -CheckButton/styles/hover = SubResource("StyleBoxFlat_lga6n") -CheckButton/styles/normal = SubResource("StyleBoxFlat_pv110") -CheckButton/styles/pressed = SubResource("StyleBoxFlat_1d5i7") -HSlider/styles/grabber_area = SubResource("StyleBoxFlat_x7x8h") -HSlider/styles/grabber_area_highlight = SubResource("StyleBoxFlat_ugjg2") -HSlider/styles/slider = SubResource("StyleBoxFlat_a27gw") -Label/colors/font_color = Color(0.85882354, 0.90588236, 0.9411765, 1) -Label/font_sizes/font_size = 20 -OptionButton/colors/font_disabled_color = Color(0.32941177, 0.40392157, 0.47843137, 1) -OptionButton/font_sizes/font_size = 20 -OptionButton/styles/disabled = SubResource("StyleBoxFlat_2lqsq") -OptionButton/styles/focus = SubResource("StyleBoxFlat_lnpk0") -OptionButton/styles/hover = SubResource("StyleBoxFlat_ks2w3") -OptionButton/styles/normal = SubResource("StyleBoxFlat_qfgvf") -OptionButton/styles/pressed = SubResource("StyleBoxFlat_iyqh1") -PanelContainer/styles/panel = SubResource("StyleBoxFlat_vmmn3") -PopupMenu/colors/font_color = Color(0.7764706, 0.83137256, 0.8784314, 1) -PopupMenu/colors/font_hover_color = Color(1, 1, 1, 1) -PopupMenu/font_sizes/font_size = 20 -PopupMenu/styles/hover = SubResource("StyleBoxFlat_fitbe") -PopupMenu/styles/panel = SubResource("StyleBoxFlat_drplo") -TabContainer/colors/font_hovered_color = Color(0.85882354, 0.90588236, 0.9411765, 1) -TabContainer/colors/font_selected_color = Color(1, 1, 1, 1) -TabContainer/colors/font_unselected_color = Color(0.56078434, 0.64705884, 0.7294118, 1) -TabContainer/font_sizes/font_size = 21 -TabContainer/styles/panel = SubResource("StyleBoxFlat_yvkpt") -TabContainer/styles/tab_hovered = SubResource("StyleBoxFlat_7o3oc") -TabContainer/styles/tab_selected = SubResource("StyleBoxFlat_08mny") -TabContainer/styles/tab_unselected = SubResource("StyleBoxFlat_54y8e") -VScrollBar/styles/grabber = SubResource("StyleBoxFlat_7xjts") -VScrollBar/styles/scroll = SubResource("StyleBoxFlat_hwl52")